commit 8d47d749e68b535b5fed478629d5e45fa0b2b4f5 Author: jdg Date: Sun Sep 12 22:14:42 2021 +0200 First commit 18/11/2001 diff --git a/Esergui -BDE utilizando API/BDEDLL/BDEMONTREL.bpr b/Esergui -BDE utilizando API/BDEDLL/BDEMONTREL.bpr new file mode 100644 index 0000000..6d0f0a6 --- /dev/null +++ b/Esergui -BDE utilizando API/BDEDLL/BDEMONTREL.bpr @@ -0,0 +1,179 @@ +# --------------------------------------------------------------------------- +!if !$d(BCB) +BCB = $(MAKEDIR)\.. +!endif + +# --------------------------------------------------------------------------- +# IDE SECTION +# --------------------------------------------------------------------------- +# The following section of the project makefile is managed by the BCB IDE. +# It is recommended to use the IDE to change any of the values in this +# section. +# --------------------------------------------------------------------------- + +VERSION = BCB.04.04 +# --------------------------------------------------------------------------- +PROJECT = BDEMONTREL.dll +OBJFILES = BDEMONTREL.obj +RESFILES = +RESDEPEN = $(RESFILES) +LIBFILES = +LIBRARIES = +SPARELIBS = Vcl40.lib +PACKAGES = Vcl40.bpi Vclx40.bpi vcljpg40.bpi bcbsmp40.bpi Qrpt40.bpi Vcldb40.bpi \ + ibsmp40.bpi vcldbx40.bpi TeeUI40.bpi teedb40.bpi tee40.bpi nmfast40.bpi \ + dclocx40.bpi +DEFFILE = +# --------------------------------------------------------------------------- +PATHCPP = .; +PATHASM = .; +PATHPAS = .; +PATHRC = .; +DEBUGLIBPATH = $(BCB)\lib\debug +RELEASELIBPATH = $(BCB)\lib\release +USERDEFINES = +SYSDEFINES = _RTLDLL;NO_STRICT;USEPACKAGES +# --------------------------------------------------------------------------- +CFLAG1 = -I$(BCB)\include;$(BCB)\include\vcl -WD -Od -Hc -H=$(BCB)\lib\vcl40.csm -w -Ve \ + -r- -a8 -k -y -v -vi- -c -b- -w-par -w-inl -Vx -tWM \ + -D$(SYSDEFINES);$(USERDEFINES) +PFLAGS = -U$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) \ + -I$(BCB)\include;$(BCB)\include\vcl -$YD -$W -$O- -v -JPHNE -M +RFLAGS = -i$(BCB)\include;$(BCB)\include\vcl +AFLAGS = /i$(BCB)\include /i$(BCB)\include\vcl /mx /w2 /zd +LFLAGS = -L$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) -aa -Tpd -x -Gn -Gi -v +# --------------------------------------------------------------------------- +ALLOBJ = c0d32.obj Memmgr.Lib $(PACKAGES) sysinit.obj $(OBJFILES) +ALLRES = $(RESFILES) +ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mti.lib +# --------------------------------------------------------------------------- +!ifdef IDEOPTIONS + +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=3082 +CodePage=1252 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication= +RemoteHost= +RemotePath= +RemoteDebug=0 + +[Compiler] +InMemoryExe=0 +ShowInfoMsgs=0 + +!endif + +# --------------------------------------------------------------------------- +# MAKE SECTION +# --------------------------------------------------------------------------- +# This section of the project file is not used by the BCB IDE. It is for +# the benefit of building from the command-line using the MAKE utility. +# --------------------------------------------------------------------------- + +.autodepend +# --------------------------------------------------------------------------- +!if !$d(BCC32) +BCC32 = bcc32 +!endif + +!if !$d(CPP32) +CPP32 = cpp32 +!endif + +!if !$d(DCC32) +DCC32 = dcc32 +!endif + +!if !$d(TASM32) +TASM32 = tasm32 +!endif + +!if !$d(LINKER) +LINKER = ilink32 +!endif + +!if !$d(BRCC32) +BRCC32 = brcc32 +!endif + +# --------------------------------------------------------------------------- +!if $d(PATHCPP) +.PATH.CPP = $(PATHCPP) +.PATH.C = $(PATHCPP) +!endif + +!if $d(PATHPAS) +.PATH.PAS = $(PATHPAS) +!endif + +!if $d(PATHASM) +.PATH.ASM = $(PATHASM) +!endif + +!if $d(PATHRC) +.PATH.RC = $(PATHRC) +!endif +# --------------------------------------------------------------------------- +$(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) + $(BCB)\BIN\$(LINKER) @&&! + $(LFLAGS) + + $(ALLOBJ), + + $(PROJECT),, + + $(ALLLIB), + + $(DEFFILE), + + $(ALLRES) +! +# --------------------------------------------------------------------------- +.pas.hpp: + $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } + +.pas.obj: + $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } + +.cpp.obj: + $(BCB)\BIN\$(BCC32) $(CFLAG1) -n$(@D) {$< } + +.c.obj: + $(BCB)\BIN\$(BCC32) $(CFLAG1) -n$(@D) {$< } + +.c.i: + $(BCB)\BIN\$(CPP32) $(CFLAG1) -n. {$< } + +.cpp.i: + $(BCB)\BIN\$(CPP32) $(CFLAG1) -n. {$< } + +.asm.obj: + $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ + +.rc.res: + $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< +# --------------------------------------------------------------------------- diff --git a/Esergui -BDE utilizando API/BDEDLL/BDEMONTREL.cpp b/Esergui -BDE utilizando API/BDEDLL/BDEMONTREL.cpp new file mode 100644 index 0000000..62e1393 --- /dev/null +++ b/Esergui -BDE utilizando API/BDEDLL/BDEMONTREL.cpp @@ -0,0 +1,1639 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop +//--------------------------------------------------------------------------- +#include "stdlib.h" +#include "stdio.h" +#include "dos.h" +#include "alloc.h" +#include "BDEMONTREL.h" + +char FicheroError[DIM_FICHEROTXT]=""; + +//--------------------------------------------------------------------------- +// Important note about DLL memory management when your DLL uses the +// static version of the RunTime Library: +// +// If your DLL exports any functions that pass String objects (or structs/ +// classes containing nested Strings) as parameter or function results, +// you will need to add the library MEMMGR.LIB to both the DLL project and +// any other projects that use the DLL. You will also need to use MEMMGR.LIB +// if any other projects which use the DLL will be perfomring new or delete +// operations on any non-TObject-derived classes which are exported from the +// DLL. Adding MEMMGR.LIB to your project will change the DLL and its calling +// EXE's to use the BORLNDMM.DLL as their memory manager. In these cases, +// the file BORLNDMM.DLL should be deployed along with your DLL. +// +// To avoid using BORLNDMM.DLL, pass string information using "char *" or +// ShortString parameters. +// +// If your DLL uses the dynamic version of the RTL, you do not need to +// explicitly add MEMMGR.LIB as this will be done implicitly for you +//--------------------------------------------------------------------------- +int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) +{ + return 1; +} +//=============================================================== +// Funcion: +// IndCampo (dbiTabla* psT,char *pszCampo); +// +// Entrada: psT - Puntero a la tabla. +// szCampo - Nombre del campo descriptor. +// +// Devuelve: 1..N - Numero del campo descriptor . +// 0 - Campo desconocido. +// +// Description: +// Devuelve el numero del campo descriptor de entrada. +//================================================================ + +int IndCampo (dbiTabla* psT,char *pszCampo) +{ + int nI; + + nI = 0; + while ((nI < psT->curProps.iFields) && strcmp ((psT->pFldArray+nI)->szName,pszCampo)) + nI++; + if (nI == psT->curProps.iFields) + nI = -1; + nI++; + + return (nI); +} + +//=============================================================== +// Function: +// LIBError (char *pszDescError,char *pszContext1,char *pszContext2); +// +// Input: pszDescError - Descripcion error +// pszContext1 - Contexto 1 +// pszContext2 - Contexto 2 +// +// Description: +// Visualiza una ventana con informacion sobre el error de libreria. +// En la version grafica se grabara en logger y se +// presentara una ventana no bloqueante. +//================================================================ +/* +void LIBError (char *pszDescError,char *pszContext1,char *pszContext2) +{ +/* char szDes [TAMAX_BUFFER_TXT + 1]; + char szHora[TAMAX_HORA+1]; + char szFecha[TAMAX_FECHA+1]; + + CapturaFechaHora(szFecha,szHora); + Formatea (szDes,sizeof(szDes), + "%s. 1) %s. 2) %s", + pszDescError,pszContext1,pszContext2); + ExcepcionHistoricoTxt(szFecha,szHora,"Error","LIBDBI",szDes,NULL,NULL,NULL,NULL,NULL); + Formatea (szDes,sizeof(szDes), + "%s\n1) %s\n2) %s", + pszDescError,pszContext1,pszContext2); + poAplicacion->MessageBox(szDes,"Error librería DBI",MB_OK); +}*/ + +//=============================================================== +// Funcion: +// DBIError(DBIResult CodError); +// +// Entrada: CodError - Codigo del error +// +// Descripcion: +// Visualiza una ventana con informacion sobre el error DBI. +// En la version grafica se grabara en logger y se +// presentara una ventana no bloqueante. +//================================================================ +void DBIError (DBIResult CodError) +{ + DBIResult rslt; + DBIErrInfo ErrInfo; + DBIMSG ErrDesc; + char szDes [TAM_MAX_CADENA]; + + rslt = DbiGetErrorInfo(TRUE,ErrInfo); + if (rslt == DBIERR_NONE) + { + if (CodError == ErrInfo.iError) + { + sprintf (szDes, + "Error Info %s (%d,%d:%d). 1) %s. 2) %s. 3) %s. 4) %s", + ErrInfo.szErrCode,CodError,ErrCat(CodError),ErrCode(CodError), + ErrInfo.szContext[1],ErrInfo.szContext[2],ErrInfo.szContext[3],ErrInfo.szContext[4]); + if(strcmp(FicheroError,"")) + GenerarError(szDes); + } + else + { + rslt = DbiGetErrorString(CodError,ErrDesc); + if (rslt == DBIERR_NONE) + { + sprintf(szDes,"Error String %s (%d,%d:%d)", + ErrDesc,CodError,ErrCat(CodError),ErrCode(CodError)); + if(strcmp(FicheroError,"")) + GenerarError(szDes); + } + else + { + if(strcmp(FicheroError,"")) + GenerarError("Error Dbidif sin información"); + } + } + } + else + { + if(strcmp(FicheroError,"")) + GenerarError("Error Dbidif sin información"); + } +} + +//=============================================================== +// Funcion: +// AnsiToNativo (char *pszValorAnsi); +// +// Entrada: +// pszValorAnsi - Valor Ansi a convertir. +// +// Devuelve: +// Valor convertido +// +// Descripcion: +// Convierte una cadena ANSI al lenguaje nativo de la +// base de datos. Una cadena ANSI es, por ejemplo, la +// definida internamente en un fichero fuente. +//================================================================ + +DBIResult AnsiToNativo (char *pszAnsi,char *pszNativo) +{ + DBIResult rslt; + void *pLdObj; + int bDataLoss; + + rslt = DbiGetLdObj(NULL,pLdObj); + if (rslt == DBIERR_NONE) + rslt = DbiAnsiToNative(pLdObj,pszNativo,pszAnsi,0,bDataLoss); + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// InicializarBDE(char *pszIniFile) +// +// Entrada: pszIniFile - Nombre fichero de configuracion con extension .CFG +// +// Devuelve: DBIResult +// +// Descripcion: +// Inicializa IDAPI indicada. +//=============================================================== + +DBIResult InicializarBDE(char *pszIniFile) +{ + DBIResult rslt; + DBIEnv envr; + + strcpy (envr.szWorkDir,""); + strcpy (envr.szIniFile,pszIniFile); + strcpy (envr.szLang,""); + strcpy (envr.szClientName,""); + envr.bForceLocalInit = FALSE; + + rslt = DbiInit(&envr); + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return rslt; +} +//=============================================================== +// Funcion: +// ConectarBDE(char *pszBaseDatos,hDBIDb *hBaseDatos) +// +// Entrada: pszBaseDatos - Nombre base de datos. +// hDBIDb *hBaseDatos - Puntero a la base de Datos +// +// Devuelve: DBIResult +// +// Descripcion: +// Inicializa IDAPI indicada. +//=============================================================== + +DBIResult ConectarBDE(char *pszBaseDatos,hDBIDb *hBaseDatos) +{ + DBIResult rslt; + + rslt = DbiOpenDatabase(pszBaseDatos,NULL,dbiREADWRITE,dbiOPENSHARED, + NULL,0,NULL,NULL,*hBaseDatos); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return rslt; +} +//=============================================================== +// Funcion: +// DesconectarBDE (hDBIDb hBaseDatos) +// +// Entrada: hDBIDb hBaseDatos - Base de Datos +// +// Devuelve: DBIResult. +// +// Descripcion: +// Cierra la Database. +//================================================================ +DBIResult DesconectarBDE (hDBIDb hBaseDatos) +{ + DBIResult rslt; + rslt = DbiCloseDatabase(hBaseDatos); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return rslt; +} +//=============================================================== +// Funcion: +// FinalizarBDE (void) +// +// Devuelve: DBIResult. +// +// Descripcion: +// Finaliza el IDAPI. +//================================================================ + +DBIResult FinalizarBDE (void) +{ + DBIResult rslt; + rslt = DbiExit(); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// CargarDirDbf(char *pszDir); +// +// Entrada: char *pszDir - puntero al directorio de la base de datos +// hDBIDb hBaseDatos - Nombre de la base de datos +// +// Devuelve: DBIResult. +// +// Descripcion: +// Carga en pszDir el directorio donde se encuentran los +// dbf para esta base de datos +//================================================================ + +DBIResult CargarDirBDE (char *pszDir,hDBIDb hBaseDatos) +{ + DBIResult rslt; + + rslt = DbiGetDirectory(hBaseDatos,TRUE,pszDir); + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return rslt; +} + +//=============================================================== +// Funcion: +// AbrirTablaBDE (dbiTabla *psT, char *pszNombreTabla,char *pszNombreTag,bool bExclusivo); +// +// Entrada: psT - Puntero a la tabla. +// pszNombreTabla - Nombre de la tabla (sin extensión). +// pszNombreTag - Nombre indice de apertura (en orden natural sera NULL). +// bExclusivo - TRUE si se abre en exclusiva. +// +// Devuelve: DBIResult. +// +// Descripcion: +// Abre la tabla indicada, con indice o no activo, +// en modo exclusivo o no y se posiciona en el primer registro. +//================================================================ + +DBIResult AbrirTablaBDE (dbiTabla *psT, char *pszNombreTabla,char *pszNombreTag,bool bExclusivo,hDBIDb hBaseDatos) +{ + int iReproceso; + char szNombreIndice [DBIMAXTBLNAMELEN+1]; + DBIResult rslt; + DBIShareMode eModo; + + psT->bTablaAbierta = FALSE; + iReproceso = DEF_MAXREPOPENTABLE; + (bExclusivo ? eModo = dbiOPENEXCL : eModo = dbiOPENSHARED); + *szNombreIndice = 0; + if (pszNombreTag) + { + strcpy (szNombreIndice,pszNombreTabla); + strcat (szNombreIndice,DEF_MDXEXT); + } + + do + { + rslt = DbiOpenTable (hBaseDatos,pszNombreTabla,szDBASE,szNombreIndice,pszNombreTag, + 0,dbiREADWRITE,eModo,xltNONE,FALSE,NULL,psT->hCur); + if (rslt == DBIERR_NONE) + { + DbiGetCursorProps (psT->hCur, psT->curProps); + psT->pRecBuf = (PByte) malloc (psT->curProps.iRecBufSize); + if (psT->pRecBuf) + { + psT->pFldArray = (pFLDDesc) malloc (sizeof(FLDDesc) * psT->curProps.iFields); + if (psT->pFldArray) + { + DbiGetFieldDescs (psT->hCur,psT->pFldArray); + DbiSetProp(psT->hCur,curSOFTDELETEON,TRUE); + DbiGetNextRecord (psT->hCur,dbiNOLOCK,psT->pRecBuf,NULL); + psT->bTablaAbierta = TRUE; + } + else + { + rslt = DBIERR_NOMEMORY; + free (psT->pRecBuf); + DbiCloseCursor (psT->hCur); + } + } + else + { + rslt = DBIERR_NOMEMORY; + DbiCloseCursor (psT->hCur); + } + } + else + if (rslt == DBIERR_FILEBUSY) + { + iReproceso--; + Sleep (RETARDO_ABRIR_TABLA); + } + } + while (iReproceso && (rslt == DBIERR_FILEBUSY)); + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// CerrarTablaBDE (dbiTabla* psT); +// +// Entrada: psT - Puntero a la tabla. +// +// Devuelve: DBIResult +// +// Descripcion: +// Cierra la tabla indicada. +//================================================================ + +DBIResult CerrarTablaBDE (dbiTabla* psT) +{ + DBIResult rslt; + + rslt = DBIERR_NONE; + if (psT->bTablaAbierta) + { + free (psT->pFldArray); + free (psT->pRecBuf); + rslt = DbiCloseCursor (psT->hCur); + psT->bTablaAbierta = FALSE; + } + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// ContarRegBDE (dbiTabla* psT,UINT32 *nRN) +// +// Entrada: psT - Puntero a la tabla. +// +// Salida nRN - Puntero al numero de registros. +// +// Devuelve: DBIResult +// +// Descripcion: +// Devuelve el numero de registros en la tabla. +//================================================================ + +DBIResult ContarRegBDE (dbiTabla* psT,int *nRN) +{ + DBIResult rslt; + + rslt = DbiGetRecordCount(psT->hCur,*nRN); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// NumRegBDE (dbiTabla* psT); +// +// Entrada: psT - Puntero a la tabla. +// +// Salida nRN - Puntero al numero del registro. +// +// Devuelve: DBIResult +// +// Descripcion: +// Devuelve el ordinal del registro en curso +//================================================================ + +DBIResult NumRegBDE (dbiTabla* psT,int *nRN) +{ + DBIResult rslt; + + rslt = DbiGetRecord(psT->hCur,dbiNOLOCK,psT->pRecBuf,&psT->recProps); + if (rslt == DBIERR_NONE) + *nRN = (int) psT->recProps.iPhyRecNum; + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// IrRegBDE (dbiTabla* psT,int nNumRec,bool *bRD); +// +// Entrada: psT - Puntero a la tabla. +// nNumRec - Numero de registro. +// bRD - TRUE, si esta borrado. +// +// Devuelve: DBIResult +// +// Descripcion: +// Se posiciona en el registro indicado +//================================================================ + +DBIResult IrRegBDE (dbiTabla* psT,int nNumRec,bool *bRD) +{ + DBIResult rslt; + + rslt = DbiSetToRecordNo (psT->hCur,nNumRec); + if (rslt == DBIERR_NONE) + { + rslt = DbiGetRecord(psT->hCur,dbiNOLOCK,psT->pRecBuf,&psT->recProps); + if (rslt == DBIERR_NONE) + { + if (bRD) + *bRD = psT->recProps.bDeleteFlag; + } + } + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// EstaRegBorBDE (dbiTabla* psT,bool *bRD); +// +// Entrada: psT - Puntero a la tabla. +// +// Salida bRD - Puntero al dato. +// +// Devuelve: DBIResult +// +// Descripcion: +// Devuelve si el registro en curso está marcado para borrar. +//================================================================ + +DBIResult EstaRegBorBDE (dbiTabla* psT,bool *bRD) +{ + DBIResult rslt; + + rslt = DbiGetRecord(psT->hCur,dbiNOLOCK,psT->pRecBuf,&psT->recProps); + if (rslt == DBIERR_NONE) + { + if (bRD) + *bRD = psT->recProps.bDeleteFlag; + } + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// BorrarRegBDE (dbiTabla* psT); +// +// Entrada: psT - Puntero a la tabla. +// +// Devuelve: DBIResult +// +// Descripcion: +// Marca el registro en curso para borrar. +//================================================================ + +DBIResult BorrarRegBDE (dbiTabla* psT) +{ + DBIResult rslt; + + rslt = DbiDeleteRecord(psT->hCur,psT->pRecBuf); + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// RecRegBorBDE (dbiTabla* psT); +// +// Entrada: psT - Puntero a la tabla. +// +// Devuelve: DBIResult +// +// Descripcion: +// Desmarca el registro en curso para borrar. +//================================================================ + +DBIResult RecRegBorBDE (dbiTabla* psT) +{ + DBIResult rslt; + + rslt = DbiUndeleteRecord(psT->hCur); + if(rslt != DBIERR_NONE && rslt!=DBIERR_NA)//10756 El Reg no esta borrado + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// VerBorradosBDE (dbiTabla* psT,bool bON); +// +// Entrada: psT - Puntero a la tabla. +// bON - TRUE, los registros marcados son utilizables. +// +// Devuelve: DBIResult +// +// Descripcion: +// Cambia la propiedad SET DELETED +//================================================================ + +DBIResult VerBorradosBDE (dbiTabla* psT,bool bON) +{ + DBIResult rslt; + + rslt = DbiSetProp(psT->hCur,curSOFTDELETEON,bON); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// IrPrimerRegBDE (dbiTabla* psT,bool *bRD); +// +// Entrada: psT - Puntero a la tabla. +// +// Devuelve: DBIResult +// +// Descripcion: +// Se posiciona en el primer registro +//================================================================ + +DBIResult IrPrimerRegBDE (dbiTabla* psT,bool *bRD) +{ + DBIResult rslt; + + rslt = DbiSetToBegin (psT->hCur); + if (rslt == DBIERR_NONE) + { + rslt = DbiGetNextRecord (psT->hCur,dbiNOLOCK,psT->pRecBuf,&psT->recProps); + if (rslt == DBIERR_NONE) + { + if (bRD) + *bRD = psT->recProps.bDeleteFlag; + } + } + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// IrUltimoRegBDE (dbiTabla* psT,bool *bRD); +// +// Entrada: psT - Puntero a la tabla. +// +// Devuelve: DBIResult +// +// Descripcion: +// Se posiciona en el ultimo registro +//================================================================ + +DBIResult IrUltimoRegBDE (dbiTabla* psT,bool *bRD) +{ + DBIResult rslt; + + rslt = DbiSetToEnd (psT->hCur); + if (rslt == DBIERR_NONE) + { + rslt = DbiGetPriorRecord (psT->hCur,dbiNOLOCK,psT->pRecBuf,&psT->recProps); + if (rslt == DBIERR_NONE) + { + if (bRD) + *bRD = psT->recProps.bDeleteFlag; + } + } + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// IrSiguienteRegBDE (dbiTabla* psT,bool *bRD); +// +// Entrada: psT - Puntero a la tabla. +// +// Devuelve: DBIResult +// +// Descripcion: +// Se posiciona en el siguiente registro de la tabla. +//================================================================ + +DBIResult IrSiguienteRegBDE (dbiTabla* psT,bool *bRD) +{ + DBIResult rslt; + + rslt = DbiGetNextRecord (psT->hCur,dbiNOLOCK,psT->pRecBuf,&psT->recProps); + if (rslt == DBIERR_NONE) + { + if (bRD) + *bRD = psT->recProps.bDeleteFlag; + } + + if(rslt != DBIERR_NONE && rslt!=DBIERR_EOF)//8706 Fin de registros + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// IrAnteriorRegBDE (dbiTabla* psT,bool *bRD); +// +// Entrada: psT - Puntero a la tabla. +// +// Devuelve: DBIResult +// +// Descripcion: +// Se posiciona en el siguiente registro de la tabla. +//================================================================ + +DBIResult IrAnteriorRegBDE (dbiTabla* psT,bool *bRD) +{ + DBIResult rslt; + + rslt = DbiGetPriorRecord (psT->hCur,dbiNOLOCK,psT->pRecBuf,&psT->recProps); + if (rslt == DBIERR_NONE) + { + if (bRD) + *bRD = psT->recProps.bDeleteFlag; + } + if(rslt != DBIERR_NONE && rslt!=DBIERR_BOF)//8705 Principio de registros + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// SelIndBDE (dbiTabla* psT,char* szNombreTag); +// +// Entrada: psT - Puntero a la tabla. +// szNombreIndice - Nombre del Indice en el que se quiere buscar. +// +// Devuelve: DBIResult +// +// Descripcion: +// Selecciona el indice en la tabla indicada. +//================================================================ + +DBIResult SelIndBDE (dbiTabla* psT,char* szNombreTag) +{ + char szNombreIndice [DBIMAXTBLNAMELEN+1]; + DBIResult rslt; + + strcpy (szNombreIndice,psT->curProps.szName); + strcat (szNombreIndice,DEF_MDXEXT); + rslt = DbiSwitchToIndex (psT->hCur,szNombreIndice,szNombreTag,NULL,false); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// BuscarValorExactoBDE(dbiTabla *psT,char *pszValor,bool *bRD); +// +// Entrada: psT - Puntero a la tabla. +// szValor - Valor del Indice a encontrar. +// +// Devuelve: DBIResult +// +// Descripcion: +// Busca un valor índice exacto en la tabla y se posiciona en el +// registro correspondiente. +//================================================================ + +DBIResult BuscarValorExactoBDE (dbiTabla *psT,char *pszValor,bool *bRD) +{ + DBIResult rslt; + + rslt = DbiSetToKey (psT->hCur,keySEARCHEQ,true,0,0,(PByte)pszValor); + if (rslt == DBIERR_NONE) + { + rslt = DbiGetNextRecord (psT->hCur,dbiNOLOCK,psT->pRecBuf,&psT->recProps); + if (rslt == DBIERR_NONE) + { + if (bRD) + *bRD = psT->recProps.bDeleteFlag; + } + } + + if(rslt != DBIERR_NONE && rslt!=DBIERR_RECNOTFOUND)//8710 no encontro busqueda + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// BuscarValorAproxBDE (dbiTabla *psT,char *pszValor,bool *bRD); +// +// Entrada: psT - Puntero a la tabla. +// szValor - Valor del Indice a encontrar. +// +// Devuelve: DBIResult +// +// Descripcion: +// Busca un valor índice aproximado en la tabla y se posiciona en el +// registro correspondiente. +//================================================================ + +DBIResult BuscarValorAproxBDE (dbiTabla *psT,char *pszValor,bool *bRD) +{ + DBIResult rslt; + + rslt = DbiSetToKey (psT->hCur,keySEARCHGEQ,true,0,0,(PByte) pszValor); + if (rslt == DBIERR_NONE) + { + rslt = DbiGetNextRecord (psT->hCur,dbiNOLOCK,psT->pRecBuf,&psT->recProps); + if (rslt == DBIERR_NONE) + { + if (bRD) + *bRD = psT->recProps.bDeleteFlag; + } + } + + if(rslt != DBIERR_NONE && rslt!=DBIERR_RECNOTFOUND) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// BlanquearRegBDE (dbiTabla* psT); +// +// Entrada: psT - Puntero a la tabla. +// +// Devuelve: DBIResult +// +// Descripcion: +// Blanquea el registro seleccionado. +//================================================================ + +DBIResult BlanquearRegBDE (dbiTabla* psT) +{ + DBIResult rslt; + + rslt = DbiInitRecord (psT->hCur,psT->pRecBuf); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// AnadirRegBDE (dbiTabla* psT); +// +// Entrada: psT - Puntero a la tabla. +// +// Devuelve: DBIResult +// +// Descripcion: +// Añade un nuevo registro en blanco en la tabla. +//================================================================ + +DBIResult AnadirRegBDE (dbiTabla* psT) +{ + DBIResult rslt; + + rslt = DbiInitRecord (psT->hCur,psT->pRecBuf); + if (rslt == DBIERR_NONE) + { + rslt = DbiAppendRecord (psT->hCur,psT->pRecBuf); + } + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// LeerCampoBDE (dbiTabla* psT,int nInd,char *pszValor,bool *bVacio); +// +// Entrada: psT - Puntero a la tabla. +// nInd - Indice del campo que se quiere leer. +// szValor - Valor del campo leido. Opcional. +// nLon - sizeof (szValorCampo). Opcional. +// bVacio - TRUE, si campo vacio. Opcional. +// +// Devuelve: DBIResult +// +// Descripcion: +// Lee un campo de la tabla indicada. +//================================================================ + +DBIResult LeerCampoBDE (dbiTabla* psT,int nInd,char *pszValor, bool *bVacio) +{ + DBIResult rslt; + int nV,nLon; + + nLon=psT->pFldArray[nInd-1].iLen; + memset (pszValor,0,nLon+1); + rslt = DbiGetField (psT->hCur,(unsigned short)nInd,psT->pRecBuf,(PByte)pszValor,nV); + if (rslt == DBIERR_NONE && bVacio) + *bVacio = (nV == 1); + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// LeerCampoNBDE (dbiTabla* psT,char* szNombre,char *pszValor,bool *bVacio); +// +// Entrada: psT - Puntero a la tabla. +// szCampo - Nombre del campo que se quiere leer. +// szValor - Valor del campo leido. Opcional. +// nLon - sizeof (szValorCampo). Opcional. +// bVacio - TRUE, si campo vacio. Opcional. +// +// Devuelve: DBIResult +// +// Descripcion: +// Lee un campo de la tabla indicada. +//================================================================ + +DBIResult LeerCampoNBDE (dbiTabla* psT,char* szCampo,char *pszValor,bool *bVacio) +{ + return (LeerCampoBDE (psT,IndCampo(psT,szCampo),pszValor,bVacio)); +} + +//=============================================================== +// Funcion: +// ModificarCampoBDE (dbiTabla* psT,int nInd,char *pszValor); +// +// Entrada: psT - Puntero a la tabla. +// nInd - Indice del campo que se quiere escribir. +// szValor - Valor del campo escrito. NULL si se quiere limpiar. +// +// Devuelve: DBIResult +// +// Descripcion: +// Modifica un campo en la tabla indicada. +//================================================================ + +DBIResult ModificarCampoBDE (dbiTabla* psT,int nInd,char *pszValor) +{ + DBIResult rslt; + int nLon; + char *sValor; + + nLon=psT->pFldArray[nInd-1].iLen; + sValor=(char*)malloc(nLon); + memset (sValor,' ',nLon); + if(nLon>(int)strlen(pszValor)) + strncpy (sValor,pszValor,strlen(pszValor)); + else + strncpy (sValor,pszValor,nLon); + + rslt = DbiPutField (psT->hCur,(unsigned short)nInd,psT->pRecBuf,(PByte)sValor); + if (rslt == DBIERR_NONE) + rslt = DbiModifyRecord (psT->hCur,psT->pRecBuf,TRUE); + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + free(sValor); + + return (rslt); +} + +//=============================================================== +// Funcion: +// ModificarCampoNBDE (dbiTabla* psT,char* szNombre,char* pszValor); +// +// Input: psT - Puntero a la tabla. +// szNombre - Nombre del campo que se quiere escribir. +// szValor - Valor del campo escrito. NULL si se quiere limpiar. +// +// Return: DBIResult +// +// Description: +// Modifica un campo en la tabla indicada. +//================================================================ + +DBIResult ModificarCampoNBDE (dbiTabla* psT,char *pszNombre,char *pszValor) +{ + return (ModificarCampoBDE (psT,IndCampo(psT,pszNombre),pszValor)); +} + +//=============================================================== +// Funcion: +// DuplicarRegBDE (dbiTabla* psT); +// +// Entrada: psT - Puntero a la tabla. +// +// Devuelve: DBIResult +// +// Descripcion: +// Duplica un registro +//================================================================ + +DBIResult DuplicarRegBDE (dbiTabla* psT) +{ + DBIResult rslt; + char *psReg; + + psReg = (char *) malloc (psT->curProps.iRecBufSize); + if (psT->pRecBuf) + { + memcpy (psReg,psT->pRecBuf,psT->curProps.iRecBufSize); + rslt = AnadirRegBDE (psT); + if (rslt == DBIERR_NONE) + { + memcpy (psT->pRecBuf,psReg,psT->curProps.iRecBufSize); + rslt = DbiModifyRecord (psT->hCur,psT->pRecBuf,TRUE); + } + free (psReg); + } + else + rslt = DBIERR_NOMEMORY; + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// EliminarBorradosTablaBDE (dbiTabla *psT); +// +// Entrada: psT - Puntero a la tabla +// +// Devuelve: DBIResult +// +// Descripcion: +// Empaqueta la tabla indicada. +//================================================================ + +DBIResult EliminarBorradosTablaBDE (dbiTabla *psT,hDBIDb hBaseDatos) +{ + DBIResult rslt; + + rslt = DbiPackTable(hBaseDatos,psT->hCur,NULL,NULL,TRUE); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// VaciarTablaBDE (dbiTabla *psT); +// +// Entrada: psT - Puntero a la tabla +// +// Devuelve: DBIResult +// +// Descripcion: +// Vacía la tabla indicada. +//================================================================ + +DBIResult VaciarTablaBDE (dbiTabla *psT,hDBIDb hBaseDatos) +{ + DBIResult rslt; + + rslt = DbiEmptyTable(hBaseDatos,psT->hCur,NULL,NULL); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// ReindexarTablaBDE (dbiTabla *psT); +// +// Entrada: psT- Puntero a latabla +// +// Devuevle: DBIResult +// +// Descripcion: +// Reindexa la tabla indicada. +//================================================================ + +DBIResult ReindexarTablaBDE (dbiTabla *psT) +{ + DBIResult rslt; + + rslt = DbiRegenIndexes(psT->hCur); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// CopiarTablaBDE (dbiTabla *psT,char *pszNomDestTable); +// +// Entrada: tabla +// +// Devuelve: DBIResult +// +// Descripcion: +// Copia la tabla indicada. +//================================================================ + +DBIResult CopiarTablaBDE (char *pszNomOrigTable,char *pszNomDestTable,hDBIDb hBaseDatos) +{ + DBIResult rslt; + + rslt = DbiCopyTable (hBaseDatos,TRUE,pszNomOrigTable,szDBASE,pszNomDestTable); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// RenombrarTablaBDE (char *pszNomOldTable,char *pszNomNewTable); +// +// Entrada: tabla +// +// Devuelve: DBIResult +// +// Descripcion: +// Renombra la tabla indicada. +//================================================================ + +DBIResult RenombrarTablaBDE (char *pszNomOldTable,char *pszNomNewTable,hDBIDb hBaseDatos) +{ + DBIResult rslt; + + rslt = DbiRenameTable (hBaseDatos,pszNomOldTable,szDBASE,pszNomNewTable); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// BorrarTablaBDE (char *pszNomTable); +// +// Entrada: tabla +// +// Devuelve: DBIResult +// +// Descripcion: +// Renombra la tabla indicada. +//================================================================ + +DBIResult BorrarTablaBDE (char *pszNomTable,hDBIDb hBaseDatos) +{ + DBIResult rslt; + + rslt = DbiDeleteTable (hBaseDatos,pszNomTable,szDBASE); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// CopiarEstruTablaBDE (dbiTabla *psT,char *pszNomDestTable); +// +// Entrada: tabla +// +// Devuelve: DBIResult +// +// Descripcion: +// Genera una tabla con la estructura de la tabla indicada. +//================================================================ + +DBIResult CopiarEstruTablaBDE (dbiTabla *psT,char *pszNomDestTabla,hDBIDb hBaseDatos) +{ + DBIResult rslt; + CRTblDesc DescTabla; + pIDXDesc pIndArray; + + pIndArray = (pIDXDesc) malloc (sizeof(IDXDesc) * psT->curProps.iIndexes); + if (pIndArray) + { + rslt = DbiGetIndexDescs (psT->hCur,pIndArray); + if (rslt == DBIERR_NONE) + { + memset (&DescTabla,0,sizeof(CRTblDesc)); + strcpy (DescTabla.szTblName,pszNomDestTabla); + strcpy (DescTabla.szTblType,szDBASE); + + DescTabla.iFldCount = psT->curProps.iFields; + DescTabla.pfldDesc = psT->pFldArray; + + DescTabla.iIdxCount = psT->curProps.iIndexes; + DescTabla.pidxDesc = pIndArray; + + rslt = DbiCreateTable (hBaseDatos,TRUE,DescTabla); + } + + free (pIndArray); + } + else + rslt = DBIERR_NOMEMORY; + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// CopiarATextoBDE (dbiTabla* psT,char *pszNomText); +// +// Entrada: psT - Puntero a la tabla. +// pszNomText - Nombre fichero texto +// +// Devuelve: DBIResult +// +// Descripcion: +// Copia una tabla a un fichero texto. +//================================================================ + +DBIResult CopiarATextoBDE (dbiTabla* psT,char *pszNomText,hDBIDb hBaseDatos) +{ + DBIResult rslt; + CRTblDesc DescTxt; + hDBICur hTxtCur; + pFLDDesc pTxtFld; + int NumReg = 0; + + memset (&DescTxt,0,sizeof (CRTblDesc)); + + strcpy (DescTxt.szTblName,pszNomText); + strcpy (DescTxt.szTblType,szASCII); + + rslt = DbiCreateTable (hBaseDatos,TRUE,DescTxt); + if (rslt == DBIERR_NONE) + { + rslt = DbiOpenTable (hBaseDatos,pszNomText,"ASCIIDRV",NULL,NULL,0,dbiREADWRITE, + dbiOPENSHARED,xltFIELD,FALSE,NULL,hTxtCur); + if (rslt == DBIERR_NONE) + { + pTxtFld = (pFLDDesc) malloc (psT->curProps.iFields * sizeof(FLDDesc)); + if (pTxtFld) + { + rslt = DbiTranslateRecordStructure (szDBASE,psT->curProps.iFields,psT->pFldArray, + szASCII,NULL,pTxtFld,0); + if (rslt == DBIERR_NONE) + { + rslt = DbiSetFieldMap (hTxtCur,psT->curProps.iFields,pTxtFld); + if (rslt == DBIERR_NONE) + { + rslt = DbiSetToBegin (psT->hCur); + if (rslt == DBIERR_NONE) + { + rslt = DbiSetToBegin (hTxtCur); + if (rslt == DBIERR_NONE) + rslt = DbiBatchMove(NULL,psT->hCur,NULL,hTxtCur,batchAPPEND, + 0,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL, + NULL,NULL,FALSE,FALSE,NumReg,TRUE); + } + } + } + free (pTxtFld); + } + else + rslt = DBIERR_NOMEMORY; + + DbiCloseCursor (hTxtCur); + } + } + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// AnadirDesdeTextoBDE (dbiTabla* psT,char *pszNomText); +// +// Entrada: psT - Puntero a la tabla. +// pszNomText - Nombre fichero texto +// +// Devuelve: DBIResult +// +// Descripcion: +// Copia a una tabla desde un fichero texto. +//================================================================ + +DBIResult AnadirDesdeTextoBDE (dbiTabla* psT,char *pszNomText,hDBIDb hBaseDatos) +{ + DBIResult rslt; + hDBICur hTxtCur; + pFLDDesc pTxtFld; + int NumReg = 0; + + rslt = DbiOpenTable (hBaseDatos,pszNomText,"ASCIIDRV",NULL,NULL,0,dbiREADWRITE, + dbiOPENSHARED,xltFIELD,FALSE,NULL,hTxtCur); + if (rslt == DBIERR_NONE) + { + pTxtFld = (pFLDDesc) malloc (psT->curProps.iFields * sizeof(FLDDesc)); + if (pTxtFld) + { + rslt = DbiTranslateRecordStructure (szDBASE,psT->curProps.iFields,psT->pFldArray, + szASCII,NULL,pTxtFld,0); + if (rslt == DBIERR_NONE) + { + rslt = DbiSetFieldMap (hTxtCur,psT->curProps.iFields,pTxtFld); + if (rslt == DBIERR_NONE) + { + rslt = DbiSetToBegin (psT->hCur); + if (rslt == DBIERR_NONE) + { + rslt = DbiSetToBegin (hTxtCur); + if (rslt == DBIERR_NONE) + rslt = DbiBatchMove(NULL,hTxtCur,NULL,psT->hCur,batchAPPEND, + 0,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL, + NULL,NULL,FALSE,FALSE,NumReg,TRUE); + } + } + } + free (pTxtFld); + } + else + rslt = DBIERR_NOMEMORY; + + DbiCloseCursor (hTxtCur); + } + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// SelecReintBloqueoBDE (int nSegundos); +// +// Entrada: nSegundos - Nº de segundos de reintento +// +// Devuelve: DBIResult +// +// Descripcion: +// Actualiza el numero de segundos de reintento por bloqueo. +// No tiene aplicacion en las aperturas de tabla. +//================================================================ + +DBIResult SelecReintBloqueoBDE (int nSegundos) +{ + DBIResult rslt; + + rslt = DbiSetLockRetry ((unsigned short) nSegundos); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// void GenerarError(char *Error) +// +// Entrada: char *Error - Cadena del Error producido +// +// Descripcion: +// Genera Errores en el fichero de nombre a eleccion por el usuario +// +//================================================================ + +void GenerarError(char *Error) +{ + FILE *fichero; + char szHora[DIM_HORA+1]; + char szFecha[DIM_FECHA+1]; + + CapturarFechaHora(szFecha,szHora); + + if(strcmp(FicheroError,"")) + { + if( (fichero=fopen(FicheroError,"at"))!=NULL) + { + fputs(szFecha,fichero); + fputc(' ',fichero); + fputs(szHora,fichero); + fputc(' ',fichero); + fputs(Error,fichero); + fputc('\n',fichero); + fclose(fichero); + } + } +} + +//=============================================================== +// Funcion: +// void CapturarFechaHora(char *pszFecha,char *pszHora) +// +// Entrada: +// char *pszFecha - Puntero a char para la Fecha +// char *pszHora - Puntero a char para la Hora +// +// Descripcion: +// Formatea la fecha y hora actual +// +//================================================================ + +void CapturarFechaHora(char *pszFecha,char *pszHora) +{ + struct date sfecha; + struct time shora; + + getdate(&sfecha); + sprintf(pszFecha,"%02d/%02d/%4d",sfecha.da_day,sfecha.da_mon,sfecha.da_year); + + gettime(&shora); + sprintf(pszHora,"%02d:%02d:%02d",shora.ti_hour,shora.ti_min,shora.ti_sec); +} + +//=============================================================== +// Funcion: +// bool ComprobarNomFichError(char *Nombre) +// +// Entrada: +// char *Nombre - Nombre del fichero de Error +// +// Devuelve: +// bool - Si es correcto true sino false +// +// Descripcion: +// Comprueba si el nombre del fichero de Error es correcto +// +//================================================================ + +bool ComprobarNomFichError(char *Nombre) +{ + bool bcorrecto; + if (strlen(Nombre)<49) + { + strcpy(FicheroError,Nombre); + bcorrecto=true; + } + else + bcorrecto=false; + + return bcorrecto; +} + +//=============================================================== +// Funcion: +// char * ReservarMemoria(dbiTabla* psT,char *pszCampo) +// +// Entrada: +// dbiTabla* psT - Puntero a la tabla. +// char *pszCampo - Puntero al Campo. +// +// Devuelve: +// char * - Direccion de la zona de memoria reservada +// +// Descripcion: +// Reserva memoria a la variable con respecto al campo +// +//================================================================ + +char * ReservarMemoria(dbiTabla* psT,char *pszCampo) +{ + int CantidadMemoria; + char *Memoria; + + CantidadMemoria=ConseguirLongitud(psT,pszCampo); + if(CantidadMemoria) + { + //Reservamos memoria + Memoria=(char *)malloc(CantidadMemoria+1); + memset(Memoria,0,CantidadMemoria+1); + if(Memoria==NULL) + GenerarError("Error No hay memoria disponible"); + } + else Memoria=NULL; + + return Memoria; +} + +//=============================================================== +// Funcion: +// void LiberarMemoria(char *Memoria) +// +// Entrada: +// char *Memoria - Variable a liberar. +// +// Descripcion: +// Libera memoria de la variable con respecto al campo +// +//================================================================ + +void LiberarMemoria(char *Memoria) +{ + if(Memoria) + free(Memoria); + Memoria=NULL; +} + +//=============================================================== +// Funcion: +// int ConseguirLongitud(dbiTabla* psT,char *pszCampo) +// +// Entrada: +// dbiTabla* psT - Puntero a la tabla. +// char *pszCampo - Puntero al Campo. +// +// Devuelve: +// int - Longitud del Campo +// +// Descripcion: +// Consigue la longitud del campo deseado +// +//================================================================ + +int ConseguirLongitud(dbiTabla* psT,char *pszCampo) +{ + int nLon,indice; + + //Inicializamos longitud + nLon=0; + //Buscamos el indice del campo + indice=IndCampo(psT,pszCampo); + if(indice) + { + //Miramos cuanto mide el campo + nLon=psT->pFldArray[indice-1].iLen; + } + + return nLon; +} + +//=============================================================== +// Funcion: +// void LeerArrayCampoBDE(dbiTabla *psT,char *pszCampo,char **pszsCampoN, BYTE byRango) +// +// Entrada: +// dbiTabla* psT - Puntero a la tabla. +// char *pszCampo - Puntero al Campo. +// char **pszsCampoN - Variable de Array[byRango] +// BYTE byRango - Numero del Array a[9] seria 9 +// +// Descripcion: +// Lee un Array de campo +// +//================================================================ + +void LeerArrayCampoBDE(dbiTabla *psT,char *pszCampo,char **pszsCampoN, BYTE byRango) +{ + int ni; + char *pszNombreCampo; + + if(byRango + +#define DEF_MDXEXT ".MDX" +#define DEF_MAXREPOPENTABLE 15 +#define TAM_MAX_CADENA 513 +#define TAMANO_DATE_DBF 8 +#define RETARDO_ABRIR_TABLA 1000 + +#define DSCERR_NOINITDBI "Librería no inicializada" +#define DSCERR_NOMEMRECBUF "Insuficiente memoria buffer tabla" +#define DSCERR_NOMEMDESCFLD "Insuficiente memoria campos tabla" + +#define DIM_FECHA 10 +#define DIM_HORA 8 +#define DIM_FICHEROTXT 50 + +#define NUMERO_MAXIMO_ARRAY 99 + +#define BDE_FIN_FICHERO 8706 + +typedef struct +{ + hDBICur hCur; + PBYTE pRecBuf; + CURProps curProps; + RECProps recProps; + pFLDDesc pFldArray; + bool bTablaAbierta; +} dbiTabla; + +extern "C" __declspec(dllexport) void LiberarMemoria(char *Memoria); +extern "C" __declspec(dllexport) char * ReservarMemoria(dbiTabla* psT,char *pszCampo); +extern "C" __declspec(dllexport) bool ComprobarNomFichError(char *Nombre); +extern "C" __declspec(dllexport) void CapturarFechaHora(char *pszFecha,char *pszHora); +extern "C" __declspec(dllexport) void GenerarError(char *Error); +extern "C" __declspec(dllexport) int IndCampo (dbiTabla* psT,char* pszCampo); +extern "C" __declspec(dllexport) DBIResult AnsiToNativo (char *pszAnsi,char *pszNativo); +extern "C" __declspec(dllexport) DBIResult InicializarBDE(char *pszIniFile); +extern "C" __declspec(dllexport) DBIResult ConectarBDE(char *pszBaseDatos,hDBIDb *hBaseDatos); +extern "C" __declspec(dllexport) DBIResult DesconectarBDE (hDBIDb hBaseDatos); +extern "C" __declspec(dllexport) DBIResult FinalizarBDE (void); +extern "C" __declspec(dllexport) DBIResult CargarDirBDE (char *pszDir,hDBIDb hBaseDatos); +extern "C" __declspec(dllexport) DBIResult AbrirTablaBDE (dbiTabla *psT, char *pszNombreTabla,char *pszNombreTag,bool bExclusivo,hDBIDb hBaseDatos); +extern "C" __declspec(dllexport) DBIResult CerrarTablaBDE (dbiTabla* psT); +extern "C" __declspec(dllexport) DBIResult ContarRegBDE (dbiTabla* psT,int *nRN); +extern "C" __declspec(dllexport) DBIResult NumRegBDE (dbiTabla* psT,int *nRN); +extern "C" __declspec(dllexport) DBIResult IrRegBDE (dbiTabla* psT,int nNumRec,bool *bRD); +extern "C" __declspec(dllexport) DBIResult EstaRegBorBDE (dbiTabla* psT,bool *bRD); +extern "C" __declspec(dllexport) DBIResult BorrarRegBDE (dbiTabla* psT); +extern "C" __declspec(dllexport) DBIResult RecRegBorBDE (dbiTabla* psT); +extern "C" __declspec(dllexport) DBIResult VerBorradosBDE (dbiTabla* psT,bool bON); +extern "C" __declspec(dllexport) DBIResult IrPrimerRegBDE (dbiTabla* psT,bool *bRD); +extern "C" __declspec(dllexport) DBIResult IrUltimoRegBDE (dbiTabla* psT,bool *bRD); +extern "C" __declspec(dllexport) DBIResult IrSiguienteRegBDE (dbiTabla* psT,bool *bRD); +extern "C" __declspec(dllexport) DBIResult IrAnteriorRegBDE (dbiTabla* psT,bool *bRD); +extern "C" __declspec(dllexport) DBIResult SelIndBDE (dbiTabla* psT,char* szNombreTag); +extern "C" __declspec(dllexport) DBIResult BuscarValorExactoBDE (dbiTabla *psT,char *pszValor,bool *bRD); +extern "C" __declspec(dllexport) DBIResult BuscarValorAproxBDE (dbiTabla *psT,char *pszValor,bool *bRD); +extern "C" __declspec(dllexport) DBIResult BlanquearRegBDE (dbiTabla* psT); +extern "C" __declspec(dllexport) DBIResult AnadirRegBDE (dbiTabla* psT); +extern "C" __declspec(dllexport) DBIResult LeerCampoBDE (dbiTabla* psT,int nInd,char *pszValor,bool *bVacio); +extern "C" __declspec(dllexport) DBIResult LeerCampoNBDE (dbiTabla* psT,char* szNombre,char *pszValor,bool *bVacio); +extern "C" __declspec(dllexport) DBIResult ModificarCampoBDE (dbiTabla* psT,int nInd,char *pszValor); +extern "C" __declspec(dllexport) DBIResult ModificarCampoNBDE (dbiTabla* psT,char *pszNombre,char *pszValor); +extern "C" __declspec(dllexport) DBIResult DuplicarRegBDE (dbiTabla* psT); +extern "C" __declspec(dllexport) DBIResult EliminarBorradosTablaBDE (dbiTabla *psT,hDBIDb hBaseDatos); +extern "C" __declspec(dllexport) DBIResult VaciarTablaBDE (dbiTabla *psT,hDBIDb hBaseDatos); +extern "C" __declspec(dllexport) DBIResult ReindexarTablaBDE (dbiTabla *psT); +extern "C" __declspec(dllexport) DBIResult CopiarTablaBDE (char *pszNomOrigTable,char *pszNomDestTable,hDBIDb hBaseDatos); +extern "C" __declspec(dllexport) DBIResult RenombrarTablaBDE (char *pszNomOldTable,char *pszNomNewTable,hDBIDb hBaseDatos); +extern "C" __declspec(dllexport) DBIResult BorrarTablaBDE (char *pszNomTable,hDBIDb hBaseDatos); +extern "C" __declspec(dllexport) DBIResult CopiarEstruTablaBDE (dbiTabla *psT,char *pszNomDestTabla,hDBIDb hBaseDatos); +extern "C" __declspec(dllexport) DBIResult CopiarATextoBDE (dbiTabla* psT,char *pszNomText,hDBIDb hBaseDatos); +extern "C" __declspec(dllexport) DBIResult AnadirDesdeTextoBDE (dbiTabla* psT,char *pszNomText,hDBIDb hBaseDatos); +extern "C" __declspec(dllexport) DBIResult SelecReintBloqueoBDE (int nSegundos); +extern "C" __declspec(dllexport) int ConseguirLongitud(dbiTabla* psT,char *pszCampo); +extern "C" __declspec(dllexport) void LeerArrayCampoBDE(dbiTabla* psT,char* pszCampo,char **CampoN, BYTE byRango); +extern "C" __declspec(dllexport) void EscribirArrayCampoBDE(dbiTabla *psT,char *pszCampo,char **pszsCampoN, BYTE byRango); +extern "C" __declspec(dllexport) void CopiarCampo (dbiTabla *pTDestino,char *pszCampoDes,dbiTabla *pTOrigen,char *pszCampoOri); diff --git a/Esergui -BDE utilizando API/BDEDLL/BDEMONTREL.lib b/Esergui -BDE utilizando API/BDEDLL/BDEMONTREL.lib new file mode 100644 index 0000000..0ed4320 Binary files /dev/null and b/Esergui -BDE utilizando API/BDEDLL/BDEMONTREL.lib differ diff --git a/Esergui -BDE utilizando API/EserguiBDE/BDEMONTREL.bpr b/Esergui -BDE utilizando API/EserguiBDE/BDEMONTREL.bpr new file mode 100644 index 0000000..6d0f0a6 --- /dev/null +++ b/Esergui -BDE utilizando API/EserguiBDE/BDEMONTREL.bpr @@ -0,0 +1,179 @@ +# --------------------------------------------------------------------------- +!if !$d(BCB) +BCB = $(MAKEDIR)\.. +!endif + +# --------------------------------------------------------------------------- +# IDE SECTION +# --------------------------------------------------------------------------- +# The following section of the project makefile is managed by the BCB IDE. +# It is recommended to use the IDE to change any of the values in this +# section. +# --------------------------------------------------------------------------- + +VERSION = BCB.04.04 +# --------------------------------------------------------------------------- +PROJECT = BDEMONTREL.dll +OBJFILES = BDEMONTREL.obj +RESFILES = +RESDEPEN = $(RESFILES) +LIBFILES = +LIBRARIES = +SPARELIBS = Vcl40.lib +PACKAGES = Vcl40.bpi Vclx40.bpi vcljpg40.bpi bcbsmp40.bpi Qrpt40.bpi Vcldb40.bpi \ + ibsmp40.bpi vcldbx40.bpi TeeUI40.bpi teedb40.bpi tee40.bpi nmfast40.bpi \ + dclocx40.bpi +DEFFILE = +# --------------------------------------------------------------------------- +PATHCPP = .; +PATHASM = .; +PATHPAS = .; +PATHRC = .; +DEBUGLIBPATH = $(BCB)\lib\debug +RELEASELIBPATH = $(BCB)\lib\release +USERDEFINES = +SYSDEFINES = _RTLDLL;NO_STRICT;USEPACKAGES +# --------------------------------------------------------------------------- +CFLAG1 = -I$(BCB)\include;$(BCB)\include\vcl -WD -Od -Hc -H=$(BCB)\lib\vcl40.csm -w -Ve \ + -r- -a8 -k -y -v -vi- -c -b- -w-par -w-inl -Vx -tWM \ + -D$(SYSDEFINES);$(USERDEFINES) +PFLAGS = -U$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) \ + -I$(BCB)\include;$(BCB)\include\vcl -$YD -$W -$O- -v -JPHNE -M +RFLAGS = -i$(BCB)\include;$(BCB)\include\vcl +AFLAGS = /i$(BCB)\include /i$(BCB)\include\vcl /mx /w2 /zd +LFLAGS = -L$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) -aa -Tpd -x -Gn -Gi -v +# --------------------------------------------------------------------------- +ALLOBJ = c0d32.obj Memmgr.Lib $(PACKAGES) sysinit.obj $(OBJFILES) +ALLRES = $(RESFILES) +ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mti.lib +# --------------------------------------------------------------------------- +!ifdef IDEOPTIONS + +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=3082 +CodePage=1252 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication= +RemoteHost= +RemotePath= +RemoteDebug=0 + +[Compiler] +InMemoryExe=0 +ShowInfoMsgs=0 + +!endif + +# --------------------------------------------------------------------------- +# MAKE SECTION +# --------------------------------------------------------------------------- +# This section of the project file is not used by the BCB IDE. It is for +# the benefit of building from the command-line using the MAKE utility. +# --------------------------------------------------------------------------- + +.autodepend +# --------------------------------------------------------------------------- +!if !$d(BCC32) +BCC32 = bcc32 +!endif + +!if !$d(CPP32) +CPP32 = cpp32 +!endif + +!if !$d(DCC32) +DCC32 = dcc32 +!endif + +!if !$d(TASM32) +TASM32 = tasm32 +!endif + +!if !$d(LINKER) +LINKER = ilink32 +!endif + +!if !$d(BRCC32) +BRCC32 = brcc32 +!endif + +# --------------------------------------------------------------------------- +!if $d(PATHCPP) +.PATH.CPP = $(PATHCPP) +.PATH.C = $(PATHCPP) +!endif + +!if $d(PATHPAS) +.PATH.PAS = $(PATHPAS) +!endif + +!if $d(PATHASM) +.PATH.ASM = $(PATHASM) +!endif + +!if $d(PATHRC) +.PATH.RC = $(PATHRC) +!endif +# --------------------------------------------------------------------------- +$(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) + $(BCB)\BIN\$(LINKER) @&&! + $(LFLAGS) + + $(ALLOBJ), + + $(PROJECT),, + + $(ALLLIB), + + $(DEFFILE), + + $(ALLRES) +! +# --------------------------------------------------------------------------- +.pas.hpp: + $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } + +.pas.obj: + $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } + +.cpp.obj: + $(BCB)\BIN\$(BCC32) $(CFLAG1) -n$(@D) {$< } + +.c.obj: + $(BCB)\BIN\$(BCC32) $(CFLAG1) -n$(@D) {$< } + +.c.i: + $(BCB)\BIN\$(CPP32) $(CFLAG1) -n. {$< } + +.cpp.i: + $(BCB)\BIN\$(CPP32) $(CFLAG1) -n. {$< } + +.asm.obj: + $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ + +.rc.res: + $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< +# --------------------------------------------------------------------------- diff --git a/Esergui -BDE utilizando API/EserguiBDE/BDEMONTREL.cpp b/Esergui -BDE utilizando API/EserguiBDE/BDEMONTREL.cpp new file mode 100644 index 0000000..62e1393 --- /dev/null +++ b/Esergui -BDE utilizando API/EserguiBDE/BDEMONTREL.cpp @@ -0,0 +1,1639 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop +//--------------------------------------------------------------------------- +#include "stdlib.h" +#include "stdio.h" +#include "dos.h" +#include "alloc.h" +#include "BDEMONTREL.h" + +char FicheroError[DIM_FICHEROTXT]=""; + +//--------------------------------------------------------------------------- +// Important note about DLL memory management when your DLL uses the +// static version of the RunTime Library: +// +// If your DLL exports any functions that pass String objects (or structs/ +// classes containing nested Strings) as parameter or function results, +// you will need to add the library MEMMGR.LIB to both the DLL project and +// any other projects that use the DLL. You will also need to use MEMMGR.LIB +// if any other projects which use the DLL will be perfomring new or delete +// operations on any non-TObject-derived classes which are exported from the +// DLL. Adding MEMMGR.LIB to your project will change the DLL and its calling +// EXE's to use the BORLNDMM.DLL as their memory manager. In these cases, +// the file BORLNDMM.DLL should be deployed along with your DLL. +// +// To avoid using BORLNDMM.DLL, pass string information using "char *" or +// ShortString parameters. +// +// If your DLL uses the dynamic version of the RTL, you do not need to +// explicitly add MEMMGR.LIB as this will be done implicitly for you +//--------------------------------------------------------------------------- +int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) +{ + return 1; +} +//=============================================================== +// Funcion: +// IndCampo (dbiTabla* psT,char *pszCampo); +// +// Entrada: psT - Puntero a la tabla. +// szCampo - Nombre del campo descriptor. +// +// Devuelve: 1..N - Numero del campo descriptor . +// 0 - Campo desconocido. +// +// Description: +// Devuelve el numero del campo descriptor de entrada. +//================================================================ + +int IndCampo (dbiTabla* psT,char *pszCampo) +{ + int nI; + + nI = 0; + while ((nI < psT->curProps.iFields) && strcmp ((psT->pFldArray+nI)->szName,pszCampo)) + nI++; + if (nI == psT->curProps.iFields) + nI = -1; + nI++; + + return (nI); +} + +//=============================================================== +// Function: +// LIBError (char *pszDescError,char *pszContext1,char *pszContext2); +// +// Input: pszDescError - Descripcion error +// pszContext1 - Contexto 1 +// pszContext2 - Contexto 2 +// +// Description: +// Visualiza una ventana con informacion sobre el error de libreria. +// En la version grafica se grabara en logger y se +// presentara una ventana no bloqueante. +//================================================================ +/* +void LIBError (char *pszDescError,char *pszContext1,char *pszContext2) +{ +/* char szDes [TAMAX_BUFFER_TXT + 1]; + char szHora[TAMAX_HORA+1]; + char szFecha[TAMAX_FECHA+1]; + + CapturaFechaHora(szFecha,szHora); + Formatea (szDes,sizeof(szDes), + "%s. 1) %s. 2) %s", + pszDescError,pszContext1,pszContext2); + ExcepcionHistoricoTxt(szFecha,szHora,"Error","LIBDBI",szDes,NULL,NULL,NULL,NULL,NULL); + Formatea (szDes,sizeof(szDes), + "%s\n1) %s\n2) %s", + pszDescError,pszContext1,pszContext2); + poAplicacion->MessageBox(szDes,"Error librería DBI",MB_OK); +}*/ + +//=============================================================== +// Funcion: +// DBIError(DBIResult CodError); +// +// Entrada: CodError - Codigo del error +// +// Descripcion: +// Visualiza una ventana con informacion sobre el error DBI. +// En la version grafica se grabara en logger y se +// presentara una ventana no bloqueante. +//================================================================ +void DBIError (DBIResult CodError) +{ + DBIResult rslt; + DBIErrInfo ErrInfo; + DBIMSG ErrDesc; + char szDes [TAM_MAX_CADENA]; + + rslt = DbiGetErrorInfo(TRUE,ErrInfo); + if (rslt == DBIERR_NONE) + { + if (CodError == ErrInfo.iError) + { + sprintf (szDes, + "Error Info %s (%d,%d:%d). 1) %s. 2) %s. 3) %s. 4) %s", + ErrInfo.szErrCode,CodError,ErrCat(CodError),ErrCode(CodError), + ErrInfo.szContext[1],ErrInfo.szContext[2],ErrInfo.szContext[3],ErrInfo.szContext[4]); + if(strcmp(FicheroError,"")) + GenerarError(szDes); + } + else + { + rslt = DbiGetErrorString(CodError,ErrDesc); + if (rslt == DBIERR_NONE) + { + sprintf(szDes,"Error String %s (%d,%d:%d)", + ErrDesc,CodError,ErrCat(CodError),ErrCode(CodError)); + if(strcmp(FicheroError,"")) + GenerarError(szDes); + } + else + { + if(strcmp(FicheroError,"")) + GenerarError("Error Dbidif sin información"); + } + } + } + else + { + if(strcmp(FicheroError,"")) + GenerarError("Error Dbidif sin información"); + } +} + +//=============================================================== +// Funcion: +// AnsiToNativo (char *pszValorAnsi); +// +// Entrada: +// pszValorAnsi - Valor Ansi a convertir. +// +// Devuelve: +// Valor convertido +// +// Descripcion: +// Convierte una cadena ANSI al lenguaje nativo de la +// base de datos. Una cadena ANSI es, por ejemplo, la +// definida internamente en un fichero fuente. +//================================================================ + +DBIResult AnsiToNativo (char *pszAnsi,char *pszNativo) +{ + DBIResult rslt; + void *pLdObj; + int bDataLoss; + + rslt = DbiGetLdObj(NULL,pLdObj); + if (rslt == DBIERR_NONE) + rslt = DbiAnsiToNative(pLdObj,pszNativo,pszAnsi,0,bDataLoss); + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// InicializarBDE(char *pszIniFile) +// +// Entrada: pszIniFile - Nombre fichero de configuracion con extension .CFG +// +// Devuelve: DBIResult +// +// Descripcion: +// Inicializa IDAPI indicada. +//=============================================================== + +DBIResult InicializarBDE(char *pszIniFile) +{ + DBIResult rslt; + DBIEnv envr; + + strcpy (envr.szWorkDir,""); + strcpy (envr.szIniFile,pszIniFile); + strcpy (envr.szLang,""); + strcpy (envr.szClientName,""); + envr.bForceLocalInit = FALSE; + + rslt = DbiInit(&envr); + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return rslt; +} +//=============================================================== +// Funcion: +// ConectarBDE(char *pszBaseDatos,hDBIDb *hBaseDatos) +// +// Entrada: pszBaseDatos - Nombre base de datos. +// hDBIDb *hBaseDatos - Puntero a la base de Datos +// +// Devuelve: DBIResult +// +// Descripcion: +// Inicializa IDAPI indicada. +//=============================================================== + +DBIResult ConectarBDE(char *pszBaseDatos,hDBIDb *hBaseDatos) +{ + DBIResult rslt; + + rslt = DbiOpenDatabase(pszBaseDatos,NULL,dbiREADWRITE,dbiOPENSHARED, + NULL,0,NULL,NULL,*hBaseDatos); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return rslt; +} +//=============================================================== +// Funcion: +// DesconectarBDE (hDBIDb hBaseDatos) +// +// Entrada: hDBIDb hBaseDatos - Base de Datos +// +// Devuelve: DBIResult. +// +// Descripcion: +// Cierra la Database. +//================================================================ +DBIResult DesconectarBDE (hDBIDb hBaseDatos) +{ + DBIResult rslt; + rslt = DbiCloseDatabase(hBaseDatos); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return rslt; +} +//=============================================================== +// Funcion: +// FinalizarBDE (void) +// +// Devuelve: DBIResult. +// +// Descripcion: +// Finaliza el IDAPI. +//================================================================ + +DBIResult FinalizarBDE (void) +{ + DBIResult rslt; + rslt = DbiExit(); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// CargarDirDbf(char *pszDir); +// +// Entrada: char *pszDir - puntero al directorio de la base de datos +// hDBIDb hBaseDatos - Nombre de la base de datos +// +// Devuelve: DBIResult. +// +// Descripcion: +// Carga en pszDir el directorio donde se encuentran los +// dbf para esta base de datos +//================================================================ + +DBIResult CargarDirBDE (char *pszDir,hDBIDb hBaseDatos) +{ + DBIResult rslt; + + rslt = DbiGetDirectory(hBaseDatos,TRUE,pszDir); + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return rslt; +} + +//=============================================================== +// Funcion: +// AbrirTablaBDE (dbiTabla *psT, char *pszNombreTabla,char *pszNombreTag,bool bExclusivo); +// +// Entrada: psT - Puntero a la tabla. +// pszNombreTabla - Nombre de la tabla (sin extensión). +// pszNombreTag - Nombre indice de apertura (en orden natural sera NULL). +// bExclusivo - TRUE si se abre en exclusiva. +// +// Devuelve: DBIResult. +// +// Descripcion: +// Abre la tabla indicada, con indice o no activo, +// en modo exclusivo o no y se posiciona en el primer registro. +//================================================================ + +DBIResult AbrirTablaBDE (dbiTabla *psT, char *pszNombreTabla,char *pszNombreTag,bool bExclusivo,hDBIDb hBaseDatos) +{ + int iReproceso; + char szNombreIndice [DBIMAXTBLNAMELEN+1]; + DBIResult rslt; + DBIShareMode eModo; + + psT->bTablaAbierta = FALSE; + iReproceso = DEF_MAXREPOPENTABLE; + (bExclusivo ? eModo = dbiOPENEXCL : eModo = dbiOPENSHARED); + *szNombreIndice = 0; + if (pszNombreTag) + { + strcpy (szNombreIndice,pszNombreTabla); + strcat (szNombreIndice,DEF_MDXEXT); + } + + do + { + rslt = DbiOpenTable (hBaseDatos,pszNombreTabla,szDBASE,szNombreIndice,pszNombreTag, + 0,dbiREADWRITE,eModo,xltNONE,FALSE,NULL,psT->hCur); + if (rslt == DBIERR_NONE) + { + DbiGetCursorProps (psT->hCur, psT->curProps); + psT->pRecBuf = (PByte) malloc (psT->curProps.iRecBufSize); + if (psT->pRecBuf) + { + psT->pFldArray = (pFLDDesc) malloc (sizeof(FLDDesc) * psT->curProps.iFields); + if (psT->pFldArray) + { + DbiGetFieldDescs (psT->hCur,psT->pFldArray); + DbiSetProp(psT->hCur,curSOFTDELETEON,TRUE); + DbiGetNextRecord (psT->hCur,dbiNOLOCK,psT->pRecBuf,NULL); + psT->bTablaAbierta = TRUE; + } + else + { + rslt = DBIERR_NOMEMORY; + free (psT->pRecBuf); + DbiCloseCursor (psT->hCur); + } + } + else + { + rslt = DBIERR_NOMEMORY; + DbiCloseCursor (psT->hCur); + } + } + else + if (rslt == DBIERR_FILEBUSY) + { + iReproceso--; + Sleep (RETARDO_ABRIR_TABLA); + } + } + while (iReproceso && (rslt == DBIERR_FILEBUSY)); + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// CerrarTablaBDE (dbiTabla* psT); +// +// Entrada: psT - Puntero a la tabla. +// +// Devuelve: DBIResult +// +// Descripcion: +// Cierra la tabla indicada. +//================================================================ + +DBIResult CerrarTablaBDE (dbiTabla* psT) +{ + DBIResult rslt; + + rslt = DBIERR_NONE; + if (psT->bTablaAbierta) + { + free (psT->pFldArray); + free (psT->pRecBuf); + rslt = DbiCloseCursor (psT->hCur); + psT->bTablaAbierta = FALSE; + } + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// ContarRegBDE (dbiTabla* psT,UINT32 *nRN) +// +// Entrada: psT - Puntero a la tabla. +// +// Salida nRN - Puntero al numero de registros. +// +// Devuelve: DBIResult +// +// Descripcion: +// Devuelve el numero de registros en la tabla. +//================================================================ + +DBIResult ContarRegBDE (dbiTabla* psT,int *nRN) +{ + DBIResult rslt; + + rslt = DbiGetRecordCount(psT->hCur,*nRN); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// NumRegBDE (dbiTabla* psT); +// +// Entrada: psT - Puntero a la tabla. +// +// Salida nRN - Puntero al numero del registro. +// +// Devuelve: DBIResult +// +// Descripcion: +// Devuelve el ordinal del registro en curso +//================================================================ + +DBIResult NumRegBDE (dbiTabla* psT,int *nRN) +{ + DBIResult rslt; + + rslt = DbiGetRecord(psT->hCur,dbiNOLOCK,psT->pRecBuf,&psT->recProps); + if (rslt == DBIERR_NONE) + *nRN = (int) psT->recProps.iPhyRecNum; + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// IrRegBDE (dbiTabla* psT,int nNumRec,bool *bRD); +// +// Entrada: psT - Puntero a la tabla. +// nNumRec - Numero de registro. +// bRD - TRUE, si esta borrado. +// +// Devuelve: DBIResult +// +// Descripcion: +// Se posiciona en el registro indicado +//================================================================ + +DBIResult IrRegBDE (dbiTabla* psT,int nNumRec,bool *bRD) +{ + DBIResult rslt; + + rslt = DbiSetToRecordNo (psT->hCur,nNumRec); + if (rslt == DBIERR_NONE) + { + rslt = DbiGetRecord(psT->hCur,dbiNOLOCK,psT->pRecBuf,&psT->recProps); + if (rslt == DBIERR_NONE) + { + if (bRD) + *bRD = psT->recProps.bDeleteFlag; + } + } + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// EstaRegBorBDE (dbiTabla* psT,bool *bRD); +// +// Entrada: psT - Puntero a la tabla. +// +// Salida bRD - Puntero al dato. +// +// Devuelve: DBIResult +// +// Descripcion: +// Devuelve si el registro en curso está marcado para borrar. +//================================================================ + +DBIResult EstaRegBorBDE (dbiTabla* psT,bool *bRD) +{ + DBIResult rslt; + + rslt = DbiGetRecord(psT->hCur,dbiNOLOCK,psT->pRecBuf,&psT->recProps); + if (rslt == DBIERR_NONE) + { + if (bRD) + *bRD = psT->recProps.bDeleteFlag; + } + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// BorrarRegBDE (dbiTabla* psT); +// +// Entrada: psT - Puntero a la tabla. +// +// Devuelve: DBIResult +// +// Descripcion: +// Marca el registro en curso para borrar. +//================================================================ + +DBIResult BorrarRegBDE (dbiTabla* psT) +{ + DBIResult rslt; + + rslt = DbiDeleteRecord(psT->hCur,psT->pRecBuf); + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// RecRegBorBDE (dbiTabla* psT); +// +// Entrada: psT - Puntero a la tabla. +// +// Devuelve: DBIResult +// +// Descripcion: +// Desmarca el registro en curso para borrar. +//================================================================ + +DBIResult RecRegBorBDE (dbiTabla* psT) +{ + DBIResult rslt; + + rslt = DbiUndeleteRecord(psT->hCur); + if(rslt != DBIERR_NONE && rslt!=DBIERR_NA)//10756 El Reg no esta borrado + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// VerBorradosBDE (dbiTabla* psT,bool bON); +// +// Entrada: psT - Puntero a la tabla. +// bON - TRUE, los registros marcados son utilizables. +// +// Devuelve: DBIResult +// +// Descripcion: +// Cambia la propiedad SET DELETED +//================================================================ + +DBIResult VerBorradosBDE (dbiTabla* psT,bool bON) +{ + DBIResult rslt; + + rslt = DbiSetProp(psT->hCur,curSOFTDELETEON,bON); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// IrPrimerRegBDE (dbiTabla* psT,bool *bRD); +// +// Entrada: psT - Puntero a la tabla. +// +// Devuelve: DBIResult +// +// Descripcion: +// Se posiciona en el primer registro +//================================================================ + +DBIResult IrPrimerRegBDE (dbiTabla* psT,bool *bRD) +{ + DBIResult rslt; + + rslt = DbiSetToBegin (psT->hCur); + if (rslt == DBIERR_NONE) + { + rslt = DbiGetNextRecord (psT->hCur,dbiNOLOCK,psT->pRecBuf,&psT->recProps); + if (rslt == DBIERR_NONE) + { + if (bRD) + *bRD = psT->recProps.bDeleteFlag; + } + } + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// IrUltimoRegBDE (dbiTabla* psT,bool *bRD); +// +// Entrada: psT - Puntero a la tabla. +// +// Devuelve: DBIResult +// +// Descripcion: +// Se posiciona en el ultimo registro +//================================================================ + +DBIResult IrUltimoRegBDE (dbiTabla* psT,bool *bRD) +{ + DBIResult rslt; + + rslt = DbiSetToEnd (psT->hCur); + if (rslt == DBIERR_NONE) + { + rslt = DbiGetPriorRecord (psT->hCur,dbiNOLOCK,psT->pRecBuf,&psT->recProps); + if (rslt == DBIERR_NONE) + { + if (bRD) + *bRD = psT->recProps.bDeleteFlag; + } + } + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// IrSiguienteRegBDE (dbiTabla* psT,bool *bRD); +// +// Entrada: psT - Puntero a la tabla. +// +// Devuelve: DBIResult +// +// Descripcion: +// Se posiciona en el siguiente registro de la tabla. +//================================================================ + +DBIResult IrSiguienteRegBDE (dbiTabla* psT,bool *bRD) +{ + DBIResult rslt; + + rslt = DbiGetNextRecord (psT->hCur,dbiNOLOCK,psT->pRecBuf,&psT->recProps); + if (rslt == DBIERR_NONE) + { + if (bRD) + *bRD = psT->recProps.bDeleteFlag; + } + + if(rslt != DBIERR_NONE && rslt!=DBIERR_EOF)//8706 Fin de registros + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// IrAnteriorRegBDE (dbiTabla* psT,bool *bRD); +// +// Entrada: psT - Puntero a la tabla. +// +// Devuelve: DBIResult +// +// Descripcion: +// Se posiciona en el siguiente registro de la tabla. +//================================================================ + +DBIResult IrAnteriorRegBDE (dbiTabla* psT,bool *bRD) +{ + DBIResult rslt; + + rslt = DbiGetPriorRecord (psT->hCur,dbiNOLOCK,psT->pRecBuf,&psT->recProps); + if (rslt == DBIERR_NONE) + { + if (bRD) + *bRD = psT->recProps.bDeleteFlag; + } + if(rslt != DBIERR_NONE && rslt!=DBIERR_BOF)//8705 Principio de registros + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// SelIndBDE (dbiTabla* psT,char* szNombreTag); +// +// Entrada: psT - Puntero a la tabla. +// szNombreIndice - Nombre del Indice en el que se quiere buscar. +// +// Devuelve: DBIResult +// +// Descripcion: +// Selecciona el indice en la tabla indicada. +//================================================================ + +DBIResult SelIndBDE (dbiTabla* psT,char* szNombreTag) +{ + char szNombreIndice [DBIMAXTBLNAMELEN+1]; + DBIResult rslt; + + strcpy (szNombreIndice,psT->curProps.szName); + strcat (szNombreIndice,DEF_MDXEXT); + rslt = DbiSwitchToIndex (psT->hCur,szNombreIndice,szNombreTag,NULL,false); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// BuscarValorExactoBDE(dbiTabla *psT,char *pszValor,bool *bRD); +// +// Entrada: psT - Puntero a la tabla. +// szValor - Valor del Indice a encontrar. +// +// Devuelve: DBIResult +// +// Descripcion: +// Busca un valor índice exacto en la tabla y se posiciona en el +// registro correspondiente. +//================================================================ + +DBIResult BuscarValorExactoBDE (dbiTabla *psT,char *pszValor,bool *bRD) +{ + DBIResult rslt; + + rslt = DbiSetToKey (psT->hCur,keySEARCHEQ,true,0,0,(PByte)pszValor); + if (rslt == DBIERR_NONE) + { + rslt = DbiGetNextRecord (psT->hCur,dbiNOLOCK,psT->pRecBuf,&psT->recProps); + if (rslt == DBIERR_NONE) + { + if (bRD) + *bRD = psT->recProps.bDeleteFlag; + } + } + + if(rslt != DBIERR_NONE && rslt!=DBIERR_RECNOTFOUND)//8710 no encontro busqueda + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// BuscarValorAproxBDE (dbiTabla *psT,char *pszValor,bool *bRD); +// +// Entrada: psT - Puntero a la tabla. +// szValor - Valor del Indice a encontrar. +// +// Devuelve: DBIResult +// +// Descripcion: +// Busca un valor índice aproximado en la tabla y se posiciona en el +// registro correspondiente. +//================================================================ + +DBIResult BuscarValorAproxBDE (dbiTabla *psT,char *pszValor,bool *bRD) +{ + DBIResult rslt; + + rslt = DbiSetToKey (psT->hCur,keySEARCHGEQ,true,0,0,(PByte) pszValor); + if (rslt == DBIERR_NONE) + { + rslt = DbiGetNextRecord (psT->hCur,dbiNOLOCK,psT->pRecBuf,&psT->recProps); + if (rslt == DBIERR_NONE) + { + if (bRD) + *bRD = psT->recProps.bDeleteFlag; + } + } + + if(rslt != DBIERR_NONE && rslt!=DBIERR_RECNOTFOUND) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// BlanquearRegBDE (dbiTabla* psT); +// +// Entrada: psT - Puntero a la tabla. +// +// Devuelve: DBIResult +// +// Descripcion: +// Blanquea el registro seleccionado. +//================================================================ + +DBIResult BlanquearRegBDE (dbiTabla* psT) +{ + DBIResult rslt; + + rslt = DbiInitRecord (psT->hCur,psT->pRecBuf); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// AnadirRegBDE (dbiTabla* psT); +// +// Entrada: psT - Puntero a la tabla. +// +// Devuelve: DBIResult +// +// Descripcion: +// Añade un nuevo registro en blanco en la tabla. +//================================================================ + +DBIResult AnadirRegBDE (dbiTabla* psT) +{ + DBIResult rslt; + + rslt = DbiInitRecord (psT->hCur,psT->pRecBuf); + if (rslt == DBIERR_NONE) + { + rslt = DbiAppendRecord (psT->hCur,psT->pRecBuf); + } + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// LeerCampoBDE (dbiTabla* psT,int nInd,char *pszValor,bool *bVacio); +// +// Entrada: psT - Puntero a la tabla. +// nInd - Indice del campo que se quiere leer. +// szValor - Valor del campo leido. Opcional. +// nLon - sizeof (szValorCampo). Opcional. +// bVacio - TRUE, si campo vacio. Opcional. +// +// Devuelve: DBIResult +// +// Descripcion: +// Lee un campo de la tabla indicada. +//================================================================ + +DBIResult LeerCampoBDE (dbiTabla* psT,int nInd,char *pszValor, bool *bVacio) +{ + DBIResult rslt; + int nV,nLon; + + nLon=psT->pFldArray[nInd-1].iLen; + memset (pszValor,0,nLon+1); + rslt = DbiGetField (psT->hCur,(unsigned short)nInd,psT->pRecBuf,(PByte)pszValor,nV); + if (rslt == DBIERR_NONE && bVacio) + *bVacio = (nV == 1); + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// LeerCampoNBDE (dbiTabla* psT,char* szNombre,char *pszValor,bool *bVacio); +// +// Entrada: psT - Puntero a la tabla. +// szCampo - Nombre del campo que se quiere leer. +// szValor - Valor del campo leido. Opcional. +// nLon - sizeof (szValorCampo). Opcional. +// bVacio - TRUE, si campo vacio. Opcional. +// +// Devuelve: DBIResult +// +// Descripcion: +// Lee un campo de la tabla indicada. +//================================================================ + +DBIResult LeerCampoNBDE (dbiTabla* psT,char* szCampo,char *pszValor,bool *bVacio) +{ + return (LeerCampoBDE (psT,IndCampo(psT,szCampo),pszValor,bVacio)); +} + +//=============================================================== +// Funcion: +// ModificarCampoBDE (dbiTabla* psT,int nInd,char *pszValor); +// +// Entrada: psT - Puntero a la tabla. +// nInd - Indice del campo que se quiere escribir. +// szValor - Valor del campo escrito. NULL si se quiere limpiar. +// +// Devuelve: DBIResult +// +// Descripcion: +// Modifica un campo en la tabla indicada. +//================================================================ + +DBIResult ModificarCampoBDE (dbiTabla* psT,int nInd,char *pszValor) +{ + DBIResult rslt; + int nLon; + char *sValor; + + nLon=psT->pFldArray[nInd-1].iLen; + sValor=(char*)malloc(nLon); + memset (sValor,' ',nLon); + if(nLon>(int)strlen(pszValor)) + strncpy (sValor,pszValor,strlen(pszValor)); + else + strncpy (sValor,pszValor,nLon); + + rslt = DbiPutField (psT->hCur,(unsigned short)nInd,psT->pRecBuf,(PByte)sValor); + if (rslt == DBIERR_NONE) + rslt = DbiModifyRecord (psT->hCur,psT->pRecBuf,TRUE); + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + free(sValor); + + return (rslt); +} + +//=============================================================== +// Funcion: +// ModificarCampoNBDE (dbiTabla* psT,char* szNombre,char* pszValor); +// +// Input: psT - Puntero a la tabla. +// szNombre - Nombre del campo que se quiere escribir. +// szValor - Valor del campo escrito. NULL si se quiere limpiar. +// +// Return: DBIResult +// +// Description: +// Modifica un campo en la tabla indicada. +//================================================================ + +DBIResult ModificarCampoNBDE (dbiTabla* psT,char *pszNombre,char *pszValor) +{ + return (ModificarCampoBDE (psT,IndCampo(psT,pszNombre),pszValor)); +} + +//=============================================================== +// Funcion: +// DuplicarRegBDE (dbiTabla* psT); +// +// Entrada: psT - Puntero a la tabla. +// +// Devuelve: DBIResult +// +// Descripcion: +// Duplica un registro +//================================================================ + +DBIResult DuplicarRegBDE (dbiTabla* psT) +{ + DBIResult rslt; + char *psReg; + + psReg = (char *) malloc (psT->curProps.iRecBufSize); + if (psT->pRecBuf) + { + memcpy (psReg,psT->pRecBuf,psT->curProps.iRecBufSize); + rslt = AnadirRegBDE (psT); + if (rslt == DBIERR_NONE) + { + memcpy (psT->pRecBuf,psReg,psT->curProps.iRecBufSize); + rslt = DbiModifyRecord (psT->hCur,psT->pRecBuf,TRUE); + } + free (psReg); + } + else + rslt = DBIERR_NOMEMORY; + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// EliminarBorradosTablaBDE (dbiTabla *psT); +// +// Entrada: psT - Puntero a la tabla +// +// Devuelve: DBIResult +// +// Descripcion: +// Empaqueta la tabla indicada. +//================================================================ + +DBIResult EliminarBorradosTablaBDE (dbiTabla *psT,hDBIDb hBaseDatos) +{ + DBIResult rslt; + + rslt = DbiPackTable(hBaseDatos,psT->hCur,NULL,NULL,TRUE); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// VaciarTablaBDE (dbiTabla *psT); +// +// Entrada: psT - Puntero a la tabla +// +// Devuelve: DBIResult +// +// Descripcion: +// Vacía la tabla indicada. +//================================================================ + +DBIResult VaciarTablaBDE (dbiTabla *psT,hDBIDb hBaseDatos) +{ + DBIResult rslt; + + rslt = DbiEmptyTable(hBaseDatos,psT->hCur,NULL,NULL); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// ReindexarTablaBDE (dbiTabla *psT); +// +// Entrada: psT- Puntero a latabla +// +// Devuevle: DBIResult +// +// Descripcion: +// Reindexa la tabla indicada. +//================================================================ + +DBIResult ReindexarTablaBDE (dbiTabla *psT) +{ + DBIResult rslt; + + rslt = DbiRegenIndexes(psT->hCur); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// CopiarTablaBDE (dbiTabla *psT,char *pszNomDestTable); +// +// Entrada: tabla +// +// Devuelve: DBIResult +// +// Descripcion: +// Copia la tabla indicada. +//================================================================ + +DBIResult CopiarTablaBDE (char *pszNomOrigTable,char *pszNomDestTable,hDBIDb hBaseDatos) +{ + DBIResult rslt; + + rslt = DbiCopyTable (hBaseDatos,TRUE,pszNomOrigTable,szDBASE,pszNomDestTable); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// RenombrarTablaBDE (char *pszNomOldTable,char *pszNomNewTable); +// +// Entrada: tabla +// +// Devuelve: DBIResult +// +// Descripcion: +// Renombra la tabla indicada. +//================================================================ + +DBIResult RenombrarTablaBDE (char *pszNomOldTable,char *pszNomNewTable,hDBIDb hBaseDatos) +{ + DBIResult rslt; + + rslt = DbiRenameTable (hBaseDatos,pszNomOldTable,szDBASE,pszNomNewTable); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// BorrarTablaBDE (char *pszNomTable); +// +// Entrada: tabla +// +// Devuelve: DBIResult +// +// Descripcion: +// Renombra la tabla indicada. +//================================================================ + +DBIResult BorrarTablaBDE (char *pszNomTable,hDBIDb hBaseDatos) +{ + DBIResult rslt; + + rslt = DbiDeleteTable (hBaseDatos,pszNomTable,szDBASE); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// CopiarEstruTablaBDE (dbiTabla *psT,char *pszNomDestTable); +// +// Entrada: tabla +// +// Devuelve: DBIResult +// +// Descripcion: +// Genera una tabla con la estructura de la tabla indicada. +//================================================================ + +DBIResult CopiarEstruTablaBDE (dbiTabla *psT,char *pszNomDestTabla,hDBIDb hBaseDatos) +{ + DBIResult rslt; + CRTblDesc DescTabla; + pIDXDesc pIndArray; + + pIndArray = (pIDXDesc) malloc (sizeof(IDXDesc) * psT->curProps.iIndexes); + if (pIndArray) + { + rslt = DbiGetIndexDescs (psT->hCur,pIndArray); + if (rslt == DBIERR_NONE) + { + memset (&DescTabla,0,sizeof(CRTblDesc)); + strcpy (DescTabla.szTblName,pszNomDestTabla); + strcpy (DescTabla.szTblType,szDBASE); + + DescTabla.iFldCount = psT->curProps.iFields; + DescTabla.pfldDesc = psT->pFldArray; + + DescTabla.iIdxCount = psT->curProps.iIndexes; + DescTabla.pidxDesc = pIndArray; + + rslt = DbiCreateTable (hBaseDatos,TRUE,DescTabla); + } + + free (pIndArray); + } + else + rslt = DBIERR_NOMEMORY; + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// CopiarATextoBDE (dbiTabla* psT,char *pszNomText); +// +// Entrada: psT - Puntero a la tabla. +// pszNomText - Nombre fichero texto +// +// Devuelve: DBIResult +// +// Descripcion: +// Copia una tabla a un fichero texto. +//================================================================ + +DBIResult CopiarATextoBDE (dbiTabla* psT,char *pszNomText,hDBIDb hBaseDatos) +{ + DBIResult rslt; + CRTblDesc DescTxt; + hDBICur hTxtCur; + pFLDDesc pTxtFld; + int NumReg = 0; + + memset (&DescTxt,0,sizeof (CRTblDesc)); + + strcpy (DescTxt.szTblName,pszNomText); + strcpy (DescTxt.szTblType,szASCII); + + rslt = DbiCreateTable (hBaseDatos,TRUE,DescTxt); + if (rslt == DBIERR_NONE) + { + rslt = DbiOpenTable (hBaseDatos,pszNomText,"ASCIIDRV",NULL,NULL,0,dbiREADWRITE, + dbiOPENSHARED,xltFIELD,FALSE,NULL,hTxtCur); + if (rslt == DBIERR_NONE) + { + pTxtFld = (pFLDDesc) malloc (psT->curProps.iFields * sizeof(FLDDesc)); + if (pTxtFld) + { + rslt = DbiTranslateRecordStructure (szDBASE,psT->curProps.iFields,psT->pFldArray, + szASCII,NULL,pTxtFld,0); + if (rslt == DBIERR_NONE) + { + rslt = DbiSetFieldMap (hTxtCur,psT->curProps.iFields,pTxtFld); + if (rslt == DBIERR_NONE) + { + rslt = DbiSetToBegin (psT->hCur); + if (rslt == DBIERR_NONE) + { + rslt = DbiSetToBegin (hTxtCur); + if (rslt == DBIERR_NONE) + rslt = DbiBatchMove(NULL,psT->hCur,NULL,hTxtCur,batchAPPEND, + 0,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL, + NULL,NULL,FALSE,FALSE,NumReg,TRUE); + } + } + } + free (pTxtFld); + } + else + rslt = DBIERR_NOMEMORY; + + DbiCloseCursor (hTxtCur); + } + } + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// AnadirDesdeTextoBDE (dbiTabla* psT,char *pszNomText); +// +// Entrada: psT - Puntero a la tabla. +// pszNomText - Nombre fichero texto +// +// Devuelve: DBIResult +// +// Descripcion: +// Copia a una tabla desde un fichero texto. +//================================================================ + +DBIResult AnadirDesdeTextoBDE (dbiTabla* psT,char *pszNomText,hDBIDb hBaseDatos) +{ + DBIResult rslt; + hDBICur hTxtCur; + pFLDDesc pTxtFld; + int NumReg = 0; + + rslt = DbiOpenTable (hBaseDatos,pszNomText,"ASCIIDRV",NULL,NULL,0,dbiREADWRITE, + dbiOPENSHARED,xltFIELD,FALSE,NULL,hTxtCur); + if (rslt == DBIERR_NONE) + { + pTxtFld = (pFLDDesc) malloc (psT->curProps.iFields * sizeof(FLDDesc)); + if (pTxtFld) + { + rslt = DbiTranslateRecordStructure (szDBASE,psT->curProps.iFields,psT->pFldArray, + szASCII,NULL,pTxtFld,0); + if (rslt == DBIERR_NONE) + { + rslt = DbiSetFieldMap (hTxtCur,psT->curProps.iFields,pTxtFld); + if (rslt == DBIERR_NONE) + { + rslt = DbiSetToBegin (psT->hCur); + if (rslt == DBIERR_NONE) + { + rslt = DbiSetToBegin (hTxtCur); + if (rslt == DBIERR_NONE) + rslt = DbiBatchMove(NULL,hTxtCur,NULL,psT->hCur,batchAPPEND, + 0,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL, + NULL,NULL,FALSE,FALSE,NumReg,TRUE); + } + } + } + free (pTxtFld); + } + else + rslt = DBIERR_NOMEMORY; + + DbiCloseCursor (hTxtCur); + } + + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// SelecReintBloqueoBDE (int nSegundos); +// +// Entrada: nSegundos - Nº de segundos de reintento +// +// Devuelve: DBIResult +// +// Descripcion: +// Actualiza el numero de segundos de reintento por bloqueo. +// No tiene aplicacion en las aperturas de tabla. +//================================================================ + +DBIResult SelecReintBloqueoBDE (int nSegundos) +{ + DBIResult rslt; + + rslt = DbiSetLockRetry ((unsigned short) nSegundos); + if(rslt != DBIERR_NONE) + DBIError (rslt); + + return (rslt); +} + +//=============================================================== +// Funcion: +// void GenerarError(char *Error) +// +// Entrada: char *Error - Cadena del Error producido +// +// Descripcion: +// Genera Errores en el fichero de nombre a eleccion por el usuario +// +//================================================================ + +void GenerarError(char *Error) +{ + FILE *fichero; + char szHora[DIM_HORA+1]; + char szFecha[DIM_FECHA+1]; + + CapturarFechaHora(szFecha,szHora); + + if(strcmp(FicheroError,"")) + { + if( (fichero=fopen(FicheroError,"at"))!=NULL) + { + fputs(szFecha,fichero); + fputc(' ',fichero); + fputs(szHora,fichero); + fputc(' ',fichero); + fputs(Error,fichero); + fputc('\n',fichero); + fclose(fichero); + } + } +} + +//=============================================================== +// Funcion: +// void CapturarFechaHora(char *pszFecha,char *pszHora) +// +// Entrada: +// char *pszFecha - Puntero a char para la Fecha +// char *pszHora - Puntero a char para la Hora +// +// Descripcion: +// Formatea la fecha y hora actual +// +//================================================================ + +void CapturarFechaHora(char *pszFecha,char *pszHora) +{ + struct date sfecha; + struct time shora; + + getdate(&sfecha); + sprintf(pszFecha,"%02d/%02d/%4d",sfecha.da_day,sfecha.da_mon,sfecha.da_year); + + gettime(&shora); + sprintf(pszHora,"%02d:%02d:%02d",shora.ti_hour,shora.ti_min,shora.ti_sec); +} + +//=============================================================== +// Funcion: +// bool ComprobarNomFichError(char *Nombre) +// +// Entrada: +// char *Nombre - Nombre del fichero de Error +// +// Devuelve: +// bool - Si es correcto true sino false +// +// Descripcion: +// Comprueba si el nombre del fichero de Error es correcto +// +//================================================================ + +bool ComprobarNomFichError(char *Nombre) +{ + bool bcorrecto; + if (strlen(Nombre)<49) + { + strcpy(FicheroError,Nombre); + bcorrecto=true; + } + else + bcorrecto=false; + + return bcorrecto; +} + +//=============================================================== +// Funcion: +// char * ReservarMemoria(dbiTabla* psT,char *pszCampo) +// +// Entrada: +// dbiTabla* psT - Puntero a la tabla. +// char *pszCampo - Puntero al Campo. +// +// Devuelve: +// char * - Direccion de la zona de memoria reservada +// +// Descripcion: +// Reserva memoria a la variable con respecto al campo +// +//================================================================ + +char * ReservarMemoria(dbiTabla* psT,char *pszCampo) +{ + int CantidadMemoria; + char *Memoria; + + CantidadMemoria=ConseguirLongitud(psT,pszCampo); + if(CantidadMemoria) + { + //Reservamos memoria + Memoria=(char *)malloc(CantidadMemoria+1); + memset(Memoria,0,CantidadMemoria+1); + if(Memoria==NULL) + GenerarError("Error No hay memoria disponible"); + } + else Memoria=NULL; + + return Memoria; +} + +//=============================================================== +// Funcion: +// void LiberarMemoria(char *Memoria) +// +// Entrada: +// char *Memoria - Variable a liberar. +// +// Descripcion: +// Libera memoria de la variable con respecto al campo +// +//================================================================ + +void LiberarMemoria(char *Memoria) +{ + if(Memoria) + free(Memoria); + Memoria=NULL; +} + +//=============================================================== +// Funcion: +// int ConseguirLongitud(dbiTabla* psT,char *pszCampo) +// +// Entrada: +// dbiTabla* psT - Puntero a la tabla. +// char *pszCampo - Puntero al Campo. +// +// Devuelve: +// int - Longitud del Campo +// +// Descripcion: +// Consigue la longitud del campo deseado +// +//================================================================ + +int ConseguirLongitud(dbiTabla* psT,char *pszCampo) +{ + int nLon,indice; + + //Inicializamos longitud + nLon=0; + //Buscamos el indice del campo + indice=IndCampo(psT,pszCampo); + if(indice) + { + //Miramos cuanto mide el campo + nLon=psT->pFldArray[indice-1].iLen; + } + + return nLon; +} + +//=============================================================== +// Funcion: +// void LeerArrayCampoBDE(dbiTabla *psT,char *pszCampo,char **pszsCampoN, BYTE byRango) +// +// Entrada: +// dbiTabla* psT - Puntero a la tabla. +// char *pszCampo - Puntero al Campo. +// char **pszsCampoN - Variable de Array[byRango] +// BYTE byRango - Numero del Array a[9] seria 9 +// +// Descripcion: +// Lee un Array de campo +// +//================================================================ + +void LeerArrayCampoBDE(dbiTabla *psT,char *pszCampo,char **pszsCampoN, BYTE byRango) +{ + int ni; + char *pszNombreCampo; + + if(byRango + +#define DEF_MDXEXT ".MDX" +#define DEF_MAXREPOPENTABLE 15 + +#define TAMANO_DATE_DBF 8 + +#define DSCERR_NOINITDBI "Librería no inicializada" +#define DSCERR_NOMEMRECBUF "Insuficiente memoria buffer tabla" +#define DSCERR_NOMEMDESCFLD "Insuficiente memoria campos tabla" + +#define DIM_FECHA 10 +#define DIM_HORA 8 +#define DIM_FICHEROTXT 50 + +#define NUMERO_MAXIMO_ARRAY 99 + +#define BDE_FIN_FICHERO DBIERR_EOF +#define BDE_SIN_ERROR DBIERR_NONE + +typedef struct +{ + hDBICur hCur; + PBYTE pRecBuf; + CURProps curProps; + RECProps recProps; + pFLDDesc pFldArray; + bool bTablaAbierta; +} dbiTabla; + +extern "C" __declspec(dllexport) void LiberarMemoria(char *Memoria); +extern "C" __declspec(dllexport) char * ReservarMemoria(dbiTabla* psT,char *pszCampo); +extern "C" __declspec(dllexport) bool ComprobarNomFichError(char *Nombre); +extern "C" __declspec(dllexport) void CapturarFechaHora(char *pszFecha,char *pszHora); +extern "C" __declspec(dllexport) void GenerarError(char *Error); +extern "C" __declspec(dllexport) int IndCampo (dbiTabla* psT,char* pszCampo); +extern "C" __declspec(dllexport) DBIResult AnsiToNativo (char *pszAnsi,char *pszNativo); +extern "C" __declspec(dllexport) DBIResult InicializarBDE(char *pszIniFile); +extern "C" __declspec(dllexport) DBIResult ConectarBDE(char *pszBaseDatos,hDBIDb *hBaseDatos); +extern "C" __declspec(dllexport) DBIResult DesconectarBDE (hDBIDb hBaseDatos); +extern "C" __declspec(dllexport) DBIResult FinalizarBDE (void); +extern "C" __declspec(dllexport) DBIResult CargarDirBDE (char *pszDir,hDBIDb hBaseDatos); +extern "C" __declspec(dllexport) DBIResult AbrirTablaBDE (dbiTabla *psT, char *pszNombreTabla,char *pszNombreTag,bool bExclusivo,hDBIDb hBaseDatos); +extern "C" __declspec(dllexport) DBIResult CerrarTablaBDE (dbiTabla* psT); +extern "C" __declspec(dllexport) DBIResult ContarRegBDE (dbiTabla* psT,int *nRN); +extern "C" __declspec(dllexport) DBIResult NumRegBDE (dbiTabla* psT,int *nRN); +extern "C" __declspec(dllexport) DBIResult IrRegBDE (dbiTabla* psT,int nNumRec,bool *bRD); +extern "C" __declspec(dllexport) DBIResult EstaRegBorBDE (dbiTabla* psT,bool *bRD); +extern "C" __declspec(dllexport) DBIResult BorrarRegBDE (dbiTabla* psT); +extern "C" __declspec(dllexport) DBIResult RecRegBorBDE (dbiTabla* psT); +extern "C" __declspec(dllexport) DBIResult VerBorradosBDE (dbiTabla* psT,bool bON); +extern "C" __declspec(dllexport) DBIResult IrPrimerRegBDE (dbiTabla* psT,bool *bRD); +extern "C" __declspec(dllexport) DBIResult IrUltimoRegBDE (dbiTabla* psT,bool *bRD); +extern "C" __declspec(dllexport) DBIResult IrSiguienteRegBDE (dbiTabla* psT,bool *bRD); +extern "C" __declspec(dllexport) DBIResult IrAnteriorRegBDE (dbiTabla* psT,bool *bRD); +extern "C" __declspec(dllexport) DBIResult SelIndBDE (dbiTabla* psT,char* szNombreTag); +extern "C" __declspec(dllexport) DBIResult BuscarValorExactoBDE (dbiTabla *psT,char *pszValor,bool *bRD); +extern "C" __declspec(dllexport) DBIResult BuscarValorAproxBDE (dbiTabla *psT,char *pszValor,bool *bRD); +extern "C" __declspec(dllexport) DBIResult BlanquearRegBDE (dbiTabla* psT); +extern "C" __declspec(dllexport) DBIResult AnadirRegBDE (dbiTabla* psT); +extern "C" __declspec(dllexport) DBIResult LeerCampoBDE (dbiTabla* psT,int nInd,char *pszValor,bool *bVacio); +extern "C" __declspec(dllexport) DBIResult LeerCampoNBDE (dbiTabla* psT,char* szNombre,char *pszValor,bool *bVacio); +extern "C" __declspec(dllexport) DBIResult ModificarCampoBDE (dbiTabla* psT,int nInd,char *pszValor); +extern "C" __declspec(dllexport) DBIResult ModificarCampoNBDE (dbiTabla* psT,char *pszNombre,char *pszValor); +extern "C" __declspec(dllexport) DBIResult DuplicarRegBDE (dbiTabla* psT); +extern "C" __declspec(dllexport) DBIResult EliminarBorradosTablaBDE (dbiTabla *psT,hDBIDb hBaseDatos); +extern "C" __declspec(dllexport) DBIResult VaciarTablaBDE (dbiTabla *psT,hDBIDb hBaseDatos); +extern "C" __declspec(dllexport) DBIResult ReindexarTablaBDE (dbiTabla *psT); +extern "C" __declspec(dllexport) DBIResult CopiarTablaBDE (char *pszNomOrigTable,char *pszNomDestTable,hDBIDb hBaseDatos); +extern "C" __declspec(dllexport) DBIResult RenombrarTablaBDE (char *pszNomOldTable,char *pszNomNewTable,hDBIDb hBaseDatos); +extern "C" __declspec(dllexport) DBIResult BorrarTablaBDE (char *pszNomTable,hDBIDb hBaseDatos); +extern "C" __declspec(dllexport) DBIResult CopiarEstruTablaBDE (dbiTabla *psT,char *pszNomDestTabla,hDBIDb hBaseDatos); +extern "C" __declspec(dllexport) DBIResult CopiarATextoBDE (dbiTabla* psT,char *pszNomText,hDBIDb hBaseDatos); +extern "C" __declspec(dllexport) DBIResult AnadirDesdeTextoBDE (dbiTabla* psT,char *pszNomText,hDBIDb hBaseDatos); +extern "C" __declspec(dllexport) DBIResult SelecReintBloqueoBDE (int nSegundos); +extern "C" __declspec(dllexport) int ConseguirLongitud(dbiTabla* psT,char *pszCampo); +extern "C" __declspec(dllexport) void LeerArrayCampoBDE(dbiTabla* psT,char* pszCampo,char **CampoN, BYTE byRango); +extern "C" __declspec(dllexport) void EscribirArrayCampoBDE(dbiTabla *psT,char *pszCampo,char **pszsCampoN, BYTE byRango); +extern "C" __declspec(dllexport) void CopiarCampo (dbiTabla *pTDestino,char *pszCampoDes,dbiTabla *pTOrigen,char *pszCampoOri); diff --git a/Esergui -BDE utilizando API/EserguiBDE/BDEMONTREL.lib b/Esergui -BDE utilizando API/EserguiBDE/BDEMONTREL.lib new file mode 100644 index 0000000..0ed4320 Binary files /dev/null and b/Esergui -BDE utilizando API/EserguiBDE/BDEMONTREL.lib differ diff --git a/Esergui -BDE utilizando API/EserguiBDE/Dialogo.cpp b/Esergui -BDE utilizando API/EserguiBDE/Dialogo.cpp new file mode 100644 index 0000000..e7dbd6e --- /dev/null +++ b/Esergui -BDE utilizando API/EserguiBDE/Dialogo.cpp @@ -0,0 +1,1458 @@ +//--------------------------------------------------------------------------- +// DIALOGO CON EL BUR BROWN +//--------------------------------------------------------------------------- +#include +#include "Dialogo.h" +#include "Principal.h" + +//--------------------------------------------------------------------------- +#pragma hdrstop +#pragma package(smart_init) + +//--------------------------------------------------------------------------- +DWORD DWContadorID,DWAUTID,DWPSEID,DWPSSID,DWALBID; +BYTE byTiempoEsperaAUT; +BYTE byTiempoEsperaPSE; +BYTE byTiempoEsperaPSS; +BYTE byTiempoEsperaALB; +BYTE byTiempoEsperaRespOCA; +char *pszPeriodicaBBDIA[NUM_PERIODICA_AUT]; + +//--------------------------------------------------------------------------- +// void DialogoAutorizacion(hDBIDb Form1->hBaseDatos) +// Entrada: +// hDBIDb Form1->hBaseDatos:Puntero a la Base de Datos +//--------------------------------------------------------------------------- +void DialogoAutorizacion(void) +{ + FILE *pTransfer; + TRAPERDat sTRAPERIODICADat[NUM_MAXIMO_PERIODICA]; + TRAOCADat sTRAOCASIONALDat; + BYTE byi,byj,byEstado,byNumPer; + DatosAutorizacion sDatos; + + char sSentencia[TAM_MAXIMO_OCASIONAL]; + char sNumeroEle[3]; + char *pszMensaje; + char cServidor,cReferencia,cReferenciaTemp,cDatoCorrecto; + char cDiez[2],cTrece[2]; + char sDatoTecleado[NUM_MAX_TECLAS]; + long lDesplazamiento; + int nValorPERBBDIA,nError; + bool bRespuestaPER; + bool bFinalizaAUT,bTipoEntrada,bRepetido; + + //Inicializamos variables + cDiez[0]=10; + cDiez[1]=0; + cTrece[0]=13; + cTrece[1]=0; + byEstado=0; + cServidor='1'; + cReferencia=1; + nValorPERBBDIA=0; + + //Leemos la estructura de la periodica + Transfer->LeerEstructura(sTRAPERIODICADat,&sTRAOCASIONALDat); + + //Obtenemos el Servidor con el que vamos a trabajar + byNumPer=0; + while(strcmp(sTRAPERIODICADat[byNumPer].cTipoIDTRAPER,"BBRAUT") && byNumPerEscribirOcasional(sSentencia,NUM_OCASIONAL); + while( !EsperarRespuestaOcasional(cServidor,"BBRAUT") ); + + //Inicializamos el caracter y esperamos a que sea la respuesta correcta + memset(pszPeriodicaBBDIA[0],0,sTRAPERIODICADat[byNumPer].lTamPeriodicaTRAPERDat); + cReferenciaTemp=0; + cDatoCorrecto='0'; + + //Mientras la referencia o el dato no sean los correctos + while( (cReferenciaTemp!=cReferencia || cDatoCorrecto!='S') && byTiempoEsperaAUT) + { + //Nos situamos en la posicion del Bur Brown de Autorizacion + fseek(pTransfer, lDesplazamiento, SEEK_SET); + //Leemos el caracter de referencia + fread(pszPeriodicaBBDIA[0],sTRAPERIODICADat[byNumPer].lTamPeriodicaTRAPERDat,1,pTransfer); + cReferenciaTemp=*(pszPeriodicaBBDIA[0]+UBICACION_REFERENCIA); + cDatoCorrecto=*(pszPeriodicaBBDIA[0]+UBICACION_DATO_CORRECTO); + } + + if(byTiempoEsperaAUT) + { + //Ponemos por defecto el Numero de Elemento de Cisterna + strcpy(sNumeroEle,NUM_ELE_CIS_TAR); + memset(sNumeroEle,0,2); + //Obtenemos el valor de la respuesta + if(bTipoEntrada) + { + nValorPERBBDIA=atoi(pszPeriodicaBBDIA[0]+UBICACION_DATO_LEIDO_TAR); + memcpy(sNumeroEle,pszPeriodicaBBDIA[0]+UBICACION_ELEMENTO_TAR,2); + } + else + nValorPERBBDIA=atoi(pszPeriodicaBBDIA[0]+UBICACION_DATO_LEIDO_TEC); + + //Comprobamos si la respuesta es Correcta + if( !strstr(pszPeriodicaBBDIA[0]+UBICACION_DATO_LEIDO_TEC,"F") && nValorPERBBDIA>0 && nValorPERBBDIA<10000 && strstr(sNumeroEle,NUM_ELE_CIS_TAR) ) + { + bRespuestaPER=true; + //Comprobamos la Cisterna + Formatea(sDatoTecleado,NUM_MAX_TECLAS,"%04d",nValorPERBBDIA); + nError=Autorizacion->ComprobarCisterna(sDatoTecleado,Form1->hBaseDatos); + //Si fue correcto pasamos al siguiente estado + if(nError==AUT_CIS_CORRECTO) + byEstado=1; + else + MostrarResultado(cServidor,"BBRAUT",nError); + } + else if( !strstr(sNumeroEle,NUM_ELE_CIS_TAR) ) + MostrarResultado(cServidor,"BBRAUT",TAR_CIS_INVALIDA); + else + { + if( strstr(pszPeriodicaBBDIA[0]+UBICACION_DATO_LEIDO_TEC,"F5") ) + MostrarResultado(cServidor,"BBRAUT",DIA_CANCELADO); + else if( strstr(pszPeriodicaBBDIA[0]+UBICACION_DATO_LEIDO_TEC,"F") ) + MostrarResultado(cServidor,"BBRAUT",TEC_FUNCION_INVALIDA); + else + MostrarResultado(cServidor,"BBRAUT",ENT_TECLADO_INVALIDA); + } + } + } + + break; + +//************************************SEGUNDA PARTE DEL DIALOGO****************************/ + + case 1: + + //Inicializamos la sentencia + memset(sSentencia,0,TAM_MAXIMO_OCASIONAL); + memset(sDatoTecleado,0,NUM_MAX_TECLAS); + + //Conseguimos la referencia + ConseguirReferencia(&cReferencia); + + //Peticion del codigo del Conductor + if(bTipoEntrada) + Formatea(sSentencia,TAM_MAXIMO_OCASIONAL,"%c%s%s%c%s%s",cServidor,"BBRAUT",BB_ENTRADA_TARJETA,cReferencia,"14","Intro Tarj Con"); + else + Formatea(sSentencia,TAM_MAXIMO_OCASIONAL,"%c%s%s%c%s%s",cServidor,"BBRAUT",BB_ENTRADA_TECLADO,cReferencia,"13","Intro Cod Con"); + + do + Transfer->EscribirOcasional(sSentencia,NUM_OCASIONAL); + while( !EsperarRespuestaOcasional(cServidor,"BBRAUT") ); + + //Inicializamos el caracter y esperamos a que sea la respuesta correcta + memset(pszPeriodicaBBDIA[1],0,sTRAPERIODICADat[byNumPer].lTamPeriodicaTRAPERDat); + cReferenciaTemp=0; + cDatoCorrecto='0'; + byTiempoEsperaAUT=30; + + while( (cReferenciaTemp!=cReferencia || cDatoCorrecto!='S') && byTiempoEsperaAUT) + { + //Nos situamos en la posicion del Bur Brown de Autorizacion + fseek(pTransfer, lDesplazamiento, SEEK_SET); + //Leemos el caracter de referencia + fread(pszPeriodicaBBDIA[1], sTRAPERIODICADat[byNumPer].lTamPeriodicaTRAPERDat , 1, pTransfer); + cReferenciaTemp=*(pszPeriodicaBBDIA[1]+UBICACION_REFERENCIA); + cDatoCorrecto=*(pszPeriodicaBBDIA[1]+UBICACION_DATO_CORRECTO); + } + + //Si no paso el tiempo de espera + if(byTiempoEsperaAUT) + { + //Ponemos por defecto el Numero de Elemento de Cisterna + strcpy(sNumeroEle,NUM_ELE_CON_TAR); + memset(sNumeroEle,0,2); + //Obtenemos el tamaño de la respuesta + if(bTipoEntrada) + { + nValorPERBBDIA=atoi(pszPeriodicaBBDIA[1]+UBICACION_DATO_LEIDO_TAR); + memcpy(sNumeroEle,pszPeriodicaBBDIA[1]+UBICACION_ELEMENTO_TAR,2); + } + else + nValorPERBBDIA=atoi(pszPeriodicaBBDIA[1]+UBICACION_DATO_LEIDO_TEC); + + //Comprobamos si la respuesta es Correcta + if( !strstr(pszPeriodicaBBDIA[1]+UBICACION_DATO_LEIDO_TEC,"F") && nValorPERBBDIA>0 && nValorPERBBDIA<10000 && strstr(sNumeroEle,NUM_ELE_CON_TAR) ) + { + bRespuestaPER=true; + //Comprobamos el Conductor + Formatea(sDatoTecleado,NUM_MAX_TECLAS,"%04d",nValorPERBBDIA); + nError=Autorizacion->ComprobarConductor(sDatoTecleado,Form1->hBaseDatos); + //Si fue correcto pasamos al siguiente estado + if(nError==AUT_CON_CORRECTO) + byEstado=2; + else + MostrarResultado(cServidor,"BBRAUT",nError); + } + else if( !strstr(sNumeroEle,NUM_ELE_CIS_TAR) ) + MostrarResultado(cServidor,"BBRAUT",TAR_CON_INVALIDA); + else if( strstr(pszPeriodicaBBDIA[1]+UBICACION_DATO_LEIDO_TEC,"F5") ) + { + MostrarResultado(cServidor,"BBRAUT",DIA_CANCELADO); + byEstado=0; + } + else + { + if( strstr(pszPeriodicaBBDIA[1]+UBICACION_DATO_LEIDO_TEC,"F") ) + MostrarResultado(cServidor,"BBRAUT",TEC_FUNCION_INVALIDA); + else + MostrarResultado(cServidor,"BBRAUT",ENT_TECLADO_INVALIDA); + } + } + else + { + MostrarResultado(cServidor,"BBRAUT",SUP_TIEMPO_ENT_TECLADO); + byEstado=0; + } + + break; + +//************************************TERCERA PARTE DEL DIALOGO****************************/ + + case 2: + + //Inicializamos las variables + memset(sSentencia,0,TAM_MAXIMO_OCASIONAL); + + //Conseguimos la referencia + ConseguirReferencia(&cReferencia); + + //Peticion del codigo de Tractor + Autorizacion->LeerEstructura(&sDatos); + pszMensaje = (char *) malloc ( sizeof("Tractor ") + sizeof(sDatos.pszMatriculaTraCis) ); + strcpy(pszMensaje,"TRAC. "); + StrCat(pszMensaje,sDatos.pszMatriculaTraCis); + Formatea(sSentencia,TAM_MAXIMO_OCASIONAL,"%c%s%s%c%s%s",cServidor,"BBRAUT",BB_ENTRADA_TECLADO,cReferencia,"16",pszMensaje); + do + Transfer->EscribirOcasional(sSentencia,NUM_OCASIONAL); + while( !EsperarRespuestaOcasional(cServidor,"BBRAUT") ); + + free(pszMensaje); + + //Guardamos el valor adecuado + memset(pszPeriodicaBBDIA[2],0,sTRAPERIODICADat[byNumPer].lTamPeriodicaTRAPERDat); + cReferenciaTemp=0; + cDatoCorrecto='0'; + byTiempoEsperaAUT=30; + + while( (cReferenciaTemp!=cReferencia || cDatoCorrecto!='S') && byTiempoEsperaAUT) + { + //Nos situamos en la posicion del Bur Brown de Autorizacion + fseek(pTransfer, lDesplazamiento, SEEK_SET); + //Leemos el caracter de referencia + fread(pszPeriodicaBBDIA[2], sTRAPERIODICADat[byNumPer].lTamPeriodicaTRAPERDat, 1, pTransfer); + cReferenciaTemp=*(pszPeriodicaBBDIA[2]+UBICACION_REFERENCIA); + cDatoCorrecto=*(pszPeriodicaBBDIA[2]+UBICACION_DATO_CORRECTO); + } + + //Si no paso el tiempo de espera + if(byTiempoEsperaAUT) + { + //Comprobamos si la respuesta es Correcta + if( strstr(pszPeriodicaBBDIA[2]+UBICACION_DATO_LEIDO_TEC,"F4") ) + { + bRespuestaPER=true; + //Comprobamos el Tractor + nError=Autorizacion->ComprobarTractor(sDatos.pszMatriculaTraCis,NULL,Form1->hBaseDatos); + //Si fue correcto pasamos al siguiente estado + if(nError==AUT_TRA_CORRECTO) + byEstado=3; + else + MostrarResultado(cServidor,"BBRAUT",nError); + } + else if (strstr(pszPeriodicaBBDIA[2]+UBICACION_DATO_LEIDO_TEC,"F8") ) + { + //Inicializamos las variables + memset(sSentencia,0,TAM_MAXIMO_OCASIONAL); + memset(sDatoTecleado,0,NUM_MAX_TECLAS); + + //Pedimos por codigo por teclado + ConseguirReferencia(&cReferencia); + //Pedimos memoria para el mensaje + pszMensaje = (char *) malloc ( sizeof("Intro Cod Tract") ); + strcpy(pszMensaje,"Intro Cod Tract"); + Formatea(sSentencia,TAM_MAXIMO_OCASIONAL,"%c%s%s%c%s%s",cServidor,"BBRAUT",BB_ENTRADA_TECLADO,cReferencia,"15",pszMensaje); + do + Transfer->EscribirOcasional(sSentencia,NUM_OCASIONAL); + while( !EsperarRespuestaOcasional(cServidor,"BBRAUT") ); + + //Liberamos mensaje + free(pszMensaje); + + //Guardamos el valor adecuado + memset(pszPeriodicaBBDIA[2],0,sTRAPERIODICADat[byNumPer].lTamPeriodicaTRAPERDat); + cReferenciaTemp=0; + cDatoCorrecto='0'; + byTiempoEsperaAUT=30; + + while( (cReferenciaTemp!=cReferencia || cDatoCorrecto!='S') && byTiempoEsperaAUT) + { + //Nos situamos en la posicion del Bur Brown de Autorizacion + fseek(pTransfer, lDesplazamiento, SEEK_SET); + //Leemos el caracter de referencia + fread(pszPeriodicaBBDIA[2], sTRAPERIODICADat[byNumPer].lTamPeriodicaTRAPERDat, 1, pTransfer); + cReferenciaTemp=*(pszPeriodicaBBDIA[2]+UBICACION_REFERENCIA); + cDatoCorrecto=*(pszPeriodicaBBDIA[2]+UBICACION_DATO_CORRECTO); + } + + //Si no paso el tiempo de espera + if(byTiempoEsperaAUT) + { + //Obtenemos el tamaño de la respuesta + nValorPERBBDIA=atoi(pszPeriodicaBBDIA[2]+UBICACION_DATO_LEIDO_TEC); + + if( !strstr(pszPeriodicaBBDIA[2]+UBICACION_DATO_LEIDO_TEC,"F") && nValorPERBBDIA>0 && nValorPERBBDIA<1000 ) + { + bRespuestaPER=true; + //Comprobamos el Conductor + Formatea(sDatoTecleado,NUM_MAX_TECLAS,"%03d",nValorPERBBDIA); + nError=Autorizacion->ComprobarTractor(NULL,sDatoTecleado,Form1->hBaseDatos); + //Si fue correcto pasamos al siguiente estado + if(nError==AUT_TRA_CORRECTO) + byEstado=3; + else + MostrarResultado(cServidor,"BBRAUT",nError); + } + else + MostrarResultado(cServidor,"BBRAUT",TEC_FUNCION_INVALIDA); + } + else + { + MostrarResultado(cServidor,"BBRAUT",SUP_TIEMPO_ENT_TECLADO); + byEstado=0; + } + } + else if (strstr(pszPeriodicaBBDIA[2]+UBICACION_DATO_LEIDO_TEC,"F5") ) + { + MostrarResultado(cServidor,"BBRAUT",DIA_CANCELADO); + byEstado=0; + } + else + { + if (strstr(pszPeriodicaBBDIA[2]+UBICACION_DATO_LEIDO_TEC,"F1") ) + MostrarResultado(cServidor,"BBRAUT",TEC_FUNCION_INVALIDA); + else + MostrarResultado(cServidor,"BBRAUT",ENT_TECLADO_INVALIDA); + } + } + else + { + MostrarResultado(cServidor,"BBRAUT",SUP_TIEMPO_ENT_TECLADO); + byEstado=0; + } + + break; + +//************************************CUARTA PARTE DEL DIALOGO*****************************/ + + case 3: + + //Inicializamos las variables + memset(sSentencia,0,TAM_MAXIMO_OCASIONAL); + memset(sDatoTecleado,0,NUM_MAX_TECLAS); + + //Conseguimos la referencia + ConseguirReferencia(&cReferencia); + + //Peticion del codigo de Suministrador + Formatea(sSentencia,TAM_MAXIMO_OCASIONAL,"%c%s%s%c%s%s",cServidor,"BBRAUT",BB_ENTRADA_TECLADO,cReferencia,"13","Intro Cod Sum"); + do + Transfer->EscribirOcasional(sSentencia,NUM_OCASIONAL); + while( !EsperarRespuestaOcasional(cServidor,"BBRAUT") ); + + //Guardamos el valor adecuado + memset(pszPeriodicaBBDIA[3],0,sTRAPERIODICADat[byNumPer].lTamPeriodicaTRAPERDat); + cReferenciaTemp=0; + cDatoCorrecto='0'; + byTiempoEsperaAUT=30; + + while( (cReferenciaTemp!=cReferencia || cDatoCorrecto!='S') && byTiempoEsperaAUT) + { + //Nos situamos en la posicion del Bur Brown de Autorizacion + fseek(pTransfer, lDesplazamiento, SEEK_SET); + //Leemos el caracter de referencia + fread(pszPeriodicaBBDIA[3], sTRAPERIODICADat[byNumPer].lTamPeriodicaTRAPERDat, 1, pTransfer); + cReferenciaTemp=*(pszPeriodicaBBDIA[3]+UBICACION_REFERENCIA); + cDatoCorrecto=*(pszPeriodicaBBDIA[3]+UBICACION_DATO_CORRECTO); + } + + //Si no paso el tiempo de espera + if(byTiempoEsperaAUT) + { + //Obtenemos el tamaño de la respuesta + nValorPERBBDIA=atoi(pszPeriodicaBBDIA[3]+UBICACION_DATO_LEIDO_TEC); + + //Comprobamos si la respuesta es Correcta + if( !strstr(pszPeriodicaBBDIA[3]+UBICACION_DATO_LEIDO_TEC,"F") && nValorPERBBDIA>0 && nValorPERBBDIA<10 ) + { + bRespuestaPER=true; + //Comprobamos el Suministrador + Formatea(sDatoTecleado,NUM_MAX_TECLAS,"%01d",nValorPERBBDIA); + nError=Autorizacion->ComprobarSuministrador(sDatoTecleado,Form1->hBaseDatos); + //Si fue correcto pasamos al siguiente estado + if(nError==AUT_SUM_CORRECTO) + byEstado=4; + else + MostrarResultado(cServidor,"BBRAUT",nError); + } + else if( strstr(pszPeriodicaBBDIA[3]+UBICACION_DATO_LEIDO_TEC,"F5") ) + { + MostrarResultado(cServidor,"BBRAUT",DIA_CANCELADO); + byEstado=0; + } + else + { + if( strstr(pszPeriodicaBBDIA[3]+UBICACION_DATO_LEIDO_TEC,"F") ) + MostrarResultado(cServidor,"BBRAUT",TEC_FUNCION_INVALIDA); + else + MostrarResultado(cServidor,"BBRAUT",ENT_TECLADO_INVALIDA); + } + } + else + { + MostrarResultado(cServidor,"BBRAUT",SUP_TIEMPO_ENT_TECLADO); + byEstado=0; + } + + break; + +//************************************QUINTA PARTE DEL DIALOGO*****************************/ + + case 4: + + //Inicializamos el numero de pedidos + byi=4; + byTiempoEsperaAUT=30; + bFinalizaAUT=false; + + while(byTiempoEsperaAUT && !bFinalizaAUT) + { + //Inicializamos la respuesta correcta + bRespuestaPER=false; + byTiempoEsperaAUT=30; + //Mientras no haya respuesta correcta o timeout + while( !bRespuestaPER && byTiempoEsperaAUT ) + { + //Inicializamos las variables + memset(sSentencia,0,TAM_MAXIMO_OCASIONAL); + memset(sDatoTecleado,0,NUM_MAX_TECLAS); + + //Conseguimos la referencia + ConseguirReferencia(&cReferencia); + + //Peticion del numero de Pedido + //Formateamos la sentencia + Formatea(sSentencia,TAM_MAXIMO_OCASIONAL,"%c%s%s%c%s%s",cServidor,"BBRAUT",BB_ENTRADA_TECLADO,cReferencia,"16","Intro Num Pedido"); + do + Transfer->EscribirOcasional(sSentencia,NUM_OCASIONAL); + while( !EsperarRespuestaOcasional(cServidor,"BBRAUT") ); + + //Guardamos el valor adecuado + memset(pszPeriodicaBBDIA[byi],0,sTRAPERIODICADat[byNumPer].lTamPeriodicaTRAPERDat); + cReferenciaTemp=0; + cDatoCorrecto='0'; + byTiempoEsperaAUT=30; + + while( (cReferenciaTemp!=cReferencia || cDatoCorrecto!='S') && byTiempoEsperaAUT) + { + //Nos situamos en la posicion del Bur Brown de Autorizacion + fseek(pTransfer, lDesplazamiento, SEEK_SET); + //Leemos el caracter de referencia + fread(pszPeriodicaBBDIA[byi], sTRAPERIODICADat[byNumPer].lTamPeriodicaTRAPERDat, 1, pTransfer); + cReferenciaTemp=*(pszPeriodicaBBDIA[byi]+UBICACION_REFERENCIA); + cDatoCorrecto=*(pszPeriodicaBBDIA[byi]+UBICACION_DATO_CORRECTO); + } + + //Si no paso el tiempo de espera + if(byTiempoEsperaAUT) + { + //Obtenemos el tamaño de la respuesta + nValorPERBBDIA=atoi(pszPeriodicaBBDIA[byi]+UBICACION_DATO_LEIDO_TEC); + + //Comprobamos si la respuesta es Correcta + if( !strstr(pszPeriodicaBBDIA[byi]+UBICACION_DATO_LEIDO_TEC,"F") && nValorPERBBDIA>0 && nValorPERBBDIA<10000000000 ) + { + bRespuestaPER=true; + //Comprobamos el Pedido + itoa(nValorPERBBDIA,sDatoTecleado,10); + nError=Autorizacion->ComprobarPedidos(sDatoTecleado,Form1->hBaseDatos); + //Si fue correcto pasamos al siguiente estado + if(nError==AUT_ORC_CORRECTO) + { + bRepetido=false; + for(byj=4;byj4) + MostrarResultado(cServidor,"BBRAUT",OPERACION_OK); + else + { + MostrarResultado(cServidor,"BBRAUT",AUT_SIN_PED_SELECCIONADOS); + bFinalizaAUT=false; + bRespuestaPER=false; + } + } + else if( strstr(pszPeriodicaBBDIA[byi]+UBICACION_DATO_LEIDO_TEC,"F5") ) + MostrarResultado(cServidor,"BBRAUT",DIA_CANCELADO); + } + } + } + else + MostrarResultado(cServidor,"BBRAUT",SUP_TIEMPO_ENT_TECLADO); + } + } + + byEstado=0; + + break; + } + +//************************************TERMINAMOS LA FUNCION********************************/ + + } + //Cerramos el fichero + fclose(pTransfer); + Sleep(100); + } +} + +//--------------------------------------------------------------------------- +void DialogoPesoEntrada(void) +{ + //Bucle infinito + while(1) + { + Sleep(100); + } +} + +//--------------------------------------------------------------------------- +void DialogoPesoSalida(void) +{ + //Bucle infinito + while(1) + { + Sleep(100); + } +} + +//--------------------------------------------------------------------------- +void DialogoAlbaran(void) +{ + //Bucle infinito + while(1) + { + Sleep(100); + } +} + +//--------------------------------------------------------------------------- +bool ComprobarTecladoTarjeta(void) +{ + dbiTabla TPrm; + bool bTipoEntrada; + char *pszTipoEntrada; + + //Damos por defecto que es Tarjeta + bTipoEntrada=true; + + //Reservamos memoria para la Tolerancia + AbrirTablaBDE(&TPrm,"SIMICPRM",NULL,false,Form1->hBaseDatos); + pszTipoEntrada=ReservarMemoria(&TPrm,"PRMTACPRM"); + LeerCampoNBDE(&TPrm,"PRMTACPRM",pszTipoEntrada,NULL); + CerrarTablaBDE(&TPrm); + + if( !strcmp(pszTipoEntrada,"T") ) + bTipoEntrada=false; + + return bTipoEntrada; +} + +//--------------------------------------------------------------------------- +void Temporizador(void) +{ + //Inicializamos los contadores de tiempo + byTiempoEsperaAUT=0; + byTiempoEsperaPSE=0; + byTiempoEsperaPSS=0; + byTiempoEsperaALB=0; + byTiempoEsperaRespOCA=0; + //4 lineas temporales + byTiempoEsperaPSE=30; + byTiempoEsperaPSS=20; + byTiempoEsperaALB=10; + + while(1) + { + if(byTiempoEsperaAUT) + byTiempoEsperaAUT--; + if(byTiempoEsperaPSE) + byTiempoEsperaPSE--; + if(byTiempoEsperaPSS) + byTiempoEsperaPSS--; + if(byTiempoEsperaALB) + byTiempoEsperaALB--; + if(byTiempoEsperaRespOCA) + byTiempoEsperaRespOCA--; + //Los 4 Form son temporales para ver que funciona + Form1->Edit2->Text=byTiempoEsperaAUT; + Form1->Edit3->Text=byTiempoEsperaPSE; + Form1->Edit4->Text=byTiempoEsperaPSS; + Form1->Edit5->Text=byTiempoEsperaALB; + Sleep(TIEMPO_CONTADOR_SEGUNDO); + } +} + +//--------------------------------------------------------------------------- +BYTE CargarThreads(void) +{ + BYTE byValorDevuelto; + + //Inicializamos las variables + byValorDevuelto=0; + + //Inicializamos el Thread de contadores del Dialogo + Form1->HDContadores=CreateThread( 0, 0, (LPTHREAD_START_ROUTINE) Temporizador, 0, 0, &DWContadorID); + if(Form1->HDContadores==0) + byValorDevuelto=THREAD_CONT_NO_INICIADO; + + //Inicializamos el Thread de Autorizacion + Form1->HDAUT=CreateThread( 0, 0, (LPTHREAD_START_ROUTINE) DialogoAutorizacion, 0, 0, &DWAUTID); + if(Form1->HDAUT==0) + byValorDevuelto=THREAD_AUT_NO_INICIADO; + + //Inicializamos el Thread del Peso de Entrada + Form1->HDPSE=CreateThread( 0, 0, (LPTHREAD_START_ROUTINE) DialogoPesoEntrada, 0, 0, &DWPSEID); + if(Form1->HDPSE==0) + byValorDevuelto=THREAD_PSE_NO_INICIADO; + + //Inicializamos el Thread del Peso de Salida + Form1->HDPSS=CreateThread( 0, 0, (LPTHREAD_START_ROUTINE) DialogoPesoSalida, 0, 0, &DWPSSID); + if(Form1->HDPSS==0) + byValorDevuelto=THREAD_PSS_NO_INICIADO; + + //Inicializamos el Thread del Albaran + Form1->HDALB=CreateThread( 0, 0, (LPTHREAD_START_ROUTINE) DialogoAlbaran, 0, 0, &DWALBID); + if(Form1->HDALB==0) + byValorDevuelto=THREAD_ALB_NO_INICIADO; + + return byValorDevuelto; +} + +//--------------------------------------------------------------------------- +void TerminarThread(HANDLE ThreadID) +{ + bool bResult; + BYTE byi; + DWORD dwEstado; + + if(ThreadID!=NULL) + { + bResult = GetExitCodeThread(ThreadID,&dwEstado); + if(bResult && (dwEstado == STILL_ACTIVE) ) + { + if(ThreadID==Form1->HDAUT) + { + //Pedimos memoria para la Periodica + for(byi=0;byiEscribirOcasional(sSentencia,NUM_OCASIONAL); + while( !EsperarRespuestaOcasional(cServidor,pszTipoID) ); + +} + +//-------------------------------------------------------------------------------------------- +void ConseguirReferencia(char *cReferencia) +{ + (*cReferencia)++; + if( (*cReferencia)==100 ) + (*cReferencia)=1; +} + +//-------------------------------------------------------------------------------------------- +bool EsperarRespuestaOcasional(char cServidor,char *pszTipoId) +{ + bool bRespuestaOCA,bRespuestaOk; + char sTexto[TAM_MAXIMO_OCASIONAL]; + char sRespuestaOCA[TAM_MAXIMO_OCASIONAL];//Estructura de la respuesta + + //Inicializamos las variables + memset(sRespuestaOCA,0,TAM_MAXIMO_OCASIONAL); + memset(sTexto,0,TAM_MAXIMO_OCASIONAL); + bRespuestaOCA=false; + bRespuestaOk=false; + + //Asignamos la respuesta que esperamos + sRespuestaOCA[0]=cServidor; + memcpy(sRespuestaOCA+1,pszTipoId,6); + sRespuestaOCA[7]='S'; + byTiempoEsperaRespOCA=2; + + //Mientras la Respuesta no sea ok + while(!bRespuestaOk && byTiempoEsperaRespOCA) + { + //Mientras no haya respuesta leemos + while(!bRespuestaOCA && byTiempoEsperaRespOCA) + { + Transfer->LeerOcasional(sTexto,NUM_OCASIONAL); + if(strcmp(sTexto,"")) + bRespuestaOCA=true; + } + //Si la respuesta fue correcta + if( !memcmp(sRespuestaOCA,sTexto,7)) + bRespuestaOk=true; + } + + return bRespuestaOk; +} + +//-------------------------------------------------------------------------------------------- +void MostrarResultado(char cServidor,char *sTipoID,int nResultado) +{ + char cDiez[2],cTrece[2],sTamano[3],cReferencia; + char sSentencia[TAM_MAXIMO_OCASIONAL]; + char *pszMensaje; + bool bEntro; + + //Inicializamos variables + cDiez[0]=10; + cDiez[1]=0; + cTrece[0]=13; + cTrece[1]=0; + cReferencia=1; + bEntro=true; + + //En funcion del Resultado enviamo una cadena + switch(nResultado) + { + + case AUT_CIS_VALOR_NO_ENCONTRADO: + + pszMensaje = (char *) malloc ( sizeof("CISTERNA")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("NO EXISTE") ); + strcpy(pszMensaje,"CISTERNA"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"NO EXISTE"); + strcpy(sTamano,"19"); + + break; + + case AUT_CIS_BORRADO: + + pszMensaje = (char *) malloc ( sizeof("CISTERNA BORRADA") ); + strcpy(pszMensaje,"CISTERNA BORRADA"); + strcpy(sTamano,"16"); + + break; + + case AUT_CIS_TARJETA_CADUCADA: + + pszMensaje = (char *) malloc ( sizeof("CADUCADA TARJETA")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("TRANSPORTE") ); + strcpy(pszMensaje,"CADUCADA TARJETA"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"TRANSPORTE"); + strcpy(sTamano,"28"); + + break; + + case AUT_CIS_ADR_CADUCADO: + + pszMensaje = (char *) malloc ( sizeof("A.D.R. CADUCADO") ); + strcpy(pszMensaje,"A.D.R. CADUCADO"); + strcpy(sTamano,"15"); + + break; + + case AUT_CIS_ITV_CADUCADO: + + pszMensaje = (char *) malloc ( sizeof("I.T.V. CADUCADO") ); + strcpy(pszMensaje,"I.T.V. CADUCADO"); + strcpy(sTamano,"15"); + + break; + + case AUT_CIS_SEGURO_CADUCADO: + + pszMensaje = (char *) malloc ( sizeof("POLIZA SEGURO")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("CADUCADA") ); + strcpy(pszMensaje,"POLIZA SEGURO"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"CADUCADA"); + strcpy(sTamano,"23"); + + break; + + case AUT_EST_CIS_YA_DENTRO: + + pszMensaje = (char *) malloc ( sizeof("CISTERNA YA")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("AUTORIZADA") ); + strcpy(pszMensaje,"CISTERNA YA"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"AUTORIZADA"); + strcpy(sTamano,"23"); + + break; + + case AUT_CON_VALOR_NO_ENCONTRADO: + + pszMensaje = (char *) malloc ( sizeof("CONDUCTOR")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("NO EXISTE") ); + strcpy(pszMensaje,"CONDUCTOR"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"NO EXISTE"); + strcpy(sTamano,"20"); + + break; + + case AUT_CON_BORRADO: + + pszMensaje = (char *) malloc ( sizeof("CONDUCTOR") + sizeof(cDiez) + sizeof(cTrece) + sizeof("BORRADO") ); + strcpy(pszMensaje,"CONDUCTOR"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"BORRADO"); + strcpy(sTamano,"18"); + + break; + + case AUT_CON_CARNET_CADUCADO: + + pszMensaje = (char *) malloc ( sizeof("CARNET CADUCADO") ); + strcpy(pszMensaje,"CARNET CADUCADO"); + strcpy(sTamano,"15"); + + break; + + case AUT_CON_ADR_CADUCADO: + + pszMensaje = (char *) malloc ( sizeof("A.D.R. CADUCADO") ); + strcpy(pszMensaje,"A.D.R. CADUCADO"); + strcpy(sTamano,"15"); + + break; + + case AUT_EST_CON_YA_DENTRO: + + pszMensaje = (char *) malloc ( sizeof("CONDUCTOR YA")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("AUTORIZADO") ); + strcpy(pszMensaje,"CONDUCTOR YA"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"AUTORIZADO"); + strcpy(sTamano,"24"); + + break; + + case AUT_TRA_VALOR_NO_ENCONTRADO: + + pszMensaje = (char *) malloc ( sizeof("TRACTOR")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("NO EXISTE") ); + strcpy(pszMensaje,"TRACTOR"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"NO EXISTE"); + strcpy(sTamano,"18"); + + break; + + case AUT_TRA_BORRADO: + + pszMensaje = (char *) malloc ( sizeof("TRACTOR BORRADO") ); + strcpy(pszMensaje,"TRACTOR BORRADO"); + strcpy(sTamano,"15"); + + break; + + case AUT_TRA_TARJETA_CADUCADA: + + pszMensaje = (char *) malloc ( sizeof("CADUCADA TARJETA")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("TRANSPORTE") ); + strcpy(pszMensaje,"CADUCADA TARJETA"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"TRANSPORTE"); + strcpy(sTamano,"28"); + + break; + + case AUT_TRA_ADR_CADUCADO: + + pszMensaje = (char *) malloc ( sizeof("A.D.R. CADUCADO") ); + strcpy(pszMensaje,"A.D.R. CADUCADO"); + strcpy(sTamano,"15"); + + break; + + case AUT_TRA_ITV_CADUCADO: + + pszMensaje = (char *) malloc ( sizeof("I.T.V. CADUCADO") ); + strcpy(pszMensaje,"I.T.V. CADUCADO"); + strcpy(sTamano,"15"); + + break; + + case AUT_TRA_SEGURO_CADUCADO: + + pszMensaje = (char *) malloc ( sizeof("CADUCADA POLIZA")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("SEGURO") ); + strcpy(pszMensaje,"CADUCADA POLIZA"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"SEGURO"); + strcpy(sTamano,"23"); + + break; + + case AUT_EST_TRA_YA_DENTRO: + + pszMensaje = (char *) malloc ( sizeof("TRACTOR YA")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("AUTORIZADO") ); + strcpy(pszMensaje,"TRACTOR YA"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"AUTORIZADO"); + strcpy(sTamano,"22"); + + break; + + case AUT_SUM_VALOR_NO_ENCONTRADO: + + pszMensaje = (char *) malloc ( sizeof("SUMINISTRADOR")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("NO EXISTE") ); + strcpy(pszMensaje,"SUMINISTRADOR"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"NO EXISTE"); + strcpy(sTamano,"24"); + + break; + + case AUT_SUM_BORRADO: + + pszMensaje = (char *) malloc ( sizeof("SUMINISTRADOR") + sizeof(cDiez) + sizeof(cTrece) + sizeof("BORRADO") ); + strcpy(pszMensaje,"SUMINISTRADOR"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"BORRADO"); + strcpy(sTamano,"22"); + + break; + + case AUT_ORC_PEDIDO_DUPLICADO: + + pszMensaje = (char *) malloc ( sizeof("PED. DUPLICADO") ); + strcpy(pszMensaje,"PED. DUPLICADO"); + strcpy(sTamano,"14"); + + break; + + case AUT_ORC_VALOR_NO_ENCONTRADO: + + pszMensaje = (char *) malloc ( sizeof("PED. NO EXISTE") ); + strcpy(pszMensaje,"PED. NO EXISTE"); + strcpy(sTamano,"14"); + + break; + + case AUT_ORC_BORRADO: + + pszMensaje = (char *) malloc ( sizeof("PED. BORRADO") ); + strcpy(pszMensaje,"PED. BORRADO"); + strcpy(sTamano,"12"); + + break; + + case AUT_ORC_ESTADO_ACABADO: + + pszMensaje = (char *) malloc ( sizeof("PED.") + sizeof(cDiez) + sizeof(cTrece) + sizeof("NO PENDIENTE") ); + strcpy(pszMensaje,"PED."); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"NO PENDIENTE"); + strcpy(sTamano,"18"); + + break; + + case AUT_ORC_OTRO_SUMINISTRADOR: + + pszMensaje = (char *) malloc ( sizeof("PED. OTRO") + sizeof(cDiez) + sizeof(cTrece) + sizeof("SUMINISTRADOR") ); + strcpy(pszMensaje,"PED. OTRO"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"SUMINISTRADOR"); + strcpy(sTamano,"24"); + + break; + + case AUT_ORC_OTRA_CISTERNA: + + pszMensaje = (char *) malloc ( sizeof("PED.") + sizeof(cDiez) + sizeof(cTrece) + sizeof("OTRA CISTERNA") ); + strcpy(pszMensaje,"PED."); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"OTRA CISTERNA"); + strcpy(sTamano,"19"); + + break; + + case AUT_ORC_FECHA_MENOR_QUE_HOY: + + pszMensaje = (char *) malloc ( sizeof("PED. CADUCADO") ); + strcpy(pszMensaje,"PED. CADUCADO"); + strcpy(sTamano,"13"); + + break; + + case AUT_SIN_PED_SELECCIONADOS: + + pszMensaje = (char *) malloc ( sizeof("SIN PEDIDO")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("SELECCIONADO") ); + strcpy(pszMensaje,"SIN PEDIDO"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"SELECCIONADO"); + strcpy(sTamano,"24"); + + break; + + case AUT_SUP_NUM_MAX_PED: + + pszMensaje = (char *) malloc ( sizeof("SUPERADO NUMERO")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("PEDIDO MAXIMO") ); + strcpy(pszMensaje,"SUPERADO NUMERO"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"MAXIMO DE PEDIDO"); + strcpy(sTamano,"33"); + + break; + + case AUT_PED_YA_INTRODUCIDO: + + pszMensaje = (char *) malloc ( sizeof("PEDIDO")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("YA INTRODUCIDO") ); + strcpy(pszMensaje,"PEDIDO"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"YA INTRODUCIDO"); + strcpy(sTamano,"22"); + + break; + + case PEE_ESTADO_NO_AUTORIZADO: + + pszMensaje = (char *) malloc ( sizeof("ESTADO")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("NO AUTORIZADO") ); + strcpy(pszMensaje,"ESTADO"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"NO AUTORIZADO"); + strcpy(sTamano,"21"); + + break; + + case PEE_PESO_FUERA_DE_TOLERANCIA: + + pszMensaje = (char *) malloc ( sizeof("PESO FUERA DE")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("TOLERANCIA") ); + strcpy(pszMensaje,"PESO FUERA DE"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"TOLERANCIA"); + strcpy(sTamano,"25"); + + break; + + case PEE_TRACTOR_NO_ENCONTRADO: + + pszMensaje = (char *) malloc ( sizeof("TRACTOR")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("NO ENCONTRADO") ); + strcpy(pszMensaje,"TRACTOR"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"NO ENCONTRADO"); + strcpy(sTamano,"22"); + + break; + + case PEE_CISTERNA_NO_ENCONTRADA: + + pszMensaje = (char *) malloc ( sizeof("CISTERNA")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("NO ENCONTRADA") ); + strcpy(pszMensaje,"CISTERNA"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"NO ENCONTRADA"); + strcpy(sTamano,"23"); + + break; + + case PEE_CISTERNA_SIN_ORDEN: + + pszMensaje = (char *) malloc ( sizeof("CISTERNA")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("SIN ORDEN") ); + strcpy(pszMensaje,"CISTERNA"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"SIN ORDEN"); + strcpy(sTamano,"19"); + + break; + + case PEE_CONDUCTOR_NO_ENCONTRADO: + + pszMensaje = (char *) malloc ( sizeof("CONDUCTOR")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("NO ENCONTRADO") ); + strcpy(pszMensaje,"CONDUCTOR"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"NO ENCONTRADO"); + strcpy(sTamano,"24"); + + break; + + case PES_CISTERNA_SIN_ORDEN: + + pszMensaje = (char *) malloc ( sizeof("CISTERNA")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("SIN ORDEN") ); + strcpy(pszMensaje,"CISTERNA"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"SIN ORDEN"); + strcpy(sTamano,"19"); + + break; + + case PES_ESTADO_NO_CARGADO: + + pszMensaje = (char *) malloc ( sizeof("ESTADO")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("NO CARGADO") ); + strcpy(pszMensaje,"ESTADO"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"NO CARGADO"); + strcpy(sTamano,"18"); + + break; + + case PES_PESO_FUERA_DE_TOLERANCIA: + + pszMensaje = (char *) malloc ( sizeof("PESO FUERA DE")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("TOLERANCIA") ); + strcpy(pszMensaje,"PESO FUERA DE"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"TOLERANCIA"); + strcpy(sTamano,"25"); + + break; + + case PES_CISTERNA_NO_ENCONTRADA: + + pszMensaje = (char *) malloc ( sizeof("CISTERNA")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("NO ENCONTRADA") ); + strcpy(pszMensaje,"CISTERNA"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"NO ENCONTRADA"); + strcpy(sTamano,"23"); + + break; + + case PES_TRACTOR_NO_ENCONTRADO: + + pszMensaje = (char *) malloc ( sizeof("TRACTOR")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("NO ENCONTRADO") ); + strcpy(pszMensaje,"TRACTOR"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"NO ENCONTRADO"); + strcpy(sTamano,"22"); + + break; + + case ALB_CAR_NO_ENCONTRADA: + + pszMensaje = (char *) malloc ( sizeof("CARGA")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("NO ENCONTRADA") ); + strcpy(pszMensaje,"CARGA"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"NO ENCONTRADA"); + strcpy(sTamano,"20"); + + break; + + case ALB_ESTADO_NO_AUTORIZADO: + + pszMensaje = (char *) malloc ( sizeof("ESTADO")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("NO AUTORIZADO") ); + strcpy(pszMensaje,"ESTADO"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"NO AUTORIZADO"); + strcpy(sTamano,"21"); + + break; + + case TAR_CIS_INVALIDA: + + pszMensaje = (char *) malloc ( sizeof("TARJETA CISTERNA")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("INVALIDA") ); + strcpy(pszMensaje,"TARJETA CISTERNA"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"INVALIDA"); + strcpy(sTamano,"26"); + + break; + + case TAR_CON_INVALIDA: + + pszMensaje = (char *) malloc ( sizeof("TARJETA COND.")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("INVALIDA") ); + strcpy(pszMensaje,"TARJETA COND."); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"INVALIDA"); + strcpy(sTamano,"23"); + + break; + + case TEC_FUNCION_INVALIDA: + + pszMensaje = (char *) malloc ( sizeof("TECLAS FUNCION")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("INVALIDAS") ); + strcpy(pszMensaje,"TECLAS FUNCION"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"INVALIDAS"); + strcpy(sTamano,"25"); + + break; + + case ENT_TECLADO_INVALIDA: + + pszMensaje = (char *) malloc ( sizeof("ENTRADA TECLADO")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("INVALIDA") ); + strcpy(pszMensaje,"ENTRADA TECLADO"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"INVALIDA"); + strcpy(sTamano,"25"); + + break; + + case SUP_TIEMPO_ENT_TECLADO: + + pszMensaje = (char *) malloc ( sizeof("SUPERADO TIEMPO")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("ENTRADA DATO") ); + strcpy(pszMensaje,"SUPERADO TIEMPO"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"ENTRADA DATO"); + strcpy(sTamano,"29"); + + break; + + case DIA_CANCELADO: + + pszMensaje = (char *) malloc ( sizeof("DIALOGO")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("CANCELADO") ); + strcpy(pszMensaje,"DIALOGO"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"CANCELADO"); + strcpy(sTamano,"18"); + + break; + + case OPERACION_OK: + + pszMensaje = (char *) malloc ( sizeof("OPERACION OK") ); + strcpy(pszMensaje,"OPERACION OK"); + strcpy(sTamano,"12"); + + break; + + default: + bEntro=false; + } + + if(bEntro) + { + //Conseguimos la referencia + ConseguirReferencia(&cReferencia); + + //Formateamos la sentencia + Formatea(sSentencia,TAM_MAXIMO_OCASIONAL,"%c%s%s%c%s%s",cServidor,sTipoID,BB_MENSAJE_BLOQUEO,cReferencia,sTamano,pszMensaje); + do + Transfer->EscribirOcasional(sSentencia,NUM_OCASIONAL); + while( !EsperarRespuestaOcasional(cServidor,sTipoID) ); + + Sleep(TIEMPO_MENSAJE_PANTALLA); + free(pszMensaje); + } +} +//----------------------------------------------------------------------- +void AnimacionMontrel(char cServidor,char *sTipoID,char cReferencia) +{ + int ni,nj; + char sMontrel[7]; + char *pszMensaje; + char sSentencia[TAM_MAXIMO_OCASIONAL]; + char cDiez[2],cTrece[2]; + + //Inicializamos variables + cDiez[0]=10; + cDiez[1]=0; + cTrece[0]=13; + cTrece[1]=0; + nj=0; + strcpy(sMontrel,"MONTREL"); + pszMensaje = (char *) malloc (16); + memset(pszMensaje,0,16); + + while(nj<7) + { + ni=14; + while(ni>=nj) + { + memset(pszMensaje+nj,' ',(14-nj)); + memcpy(pszMensaje+ni,sMontrel+nj,1); + //Formateamos la sentencia + Formatea(sSentencia,TAM_MAXIMO_OCASIONAL,"%c%s%s%c%s%s",cServidor,sTipoID,BB_MENSAJE_BLOQUEO,cReferencia,"14",pszMensaje); + Transfer->EscribirOcasional(sSentencia,NUM_OCASIONAL); + Sleep(200); + ni--; + } + EsperarRespuestaOcasional(cServidor,"BBRAUT"); + nj++; + + } + + free(pszMensaje); + + //Creamos el mensaje + pszMensaje = (char *) malloc ( sizeof("MONTREL")+ sizeof(cDiez) + sizeof(cTrece) + sizeof("ING. ELECTRICA") ); + strcpy(pszMensaje,"MONTREL"); + StrCat(pszMensaje,cDiez); + StrCat(pszMensaje,cTrece); + StrCat(pszMensaje,"ING. ELECTRICA"); + //Formateamos la sentencia + Formatea(sSentencia,TAM_MAXIMO_OCASIONAL,"%c%s%s%c%s%s",cServidor,sTipoID,BB_MENSAJE_BLOQUEO,cReferencia,"23",pszMensaje); + //Mientras no recibamos una respuesta correcta + do + Transfer->EscribirOcasional(sSentencia,NUM_OCASIONAL); + while(!EsperarRespuestaOcasional(cServidor,"BBRAUT")); + + free(pszMensaje); +} diff --git a/Esergui -BDE utilizando API/EserguiBDE/Dialogo.h b/Esergui -BDE utilizando API/EserguiBDE/Dialogo.h new file mode 100644 index 0000000..4c30f73 --- /dev/null +++ b/Esergui -BDE utilizando API/EserguiBDE/Dialogo.h @@ -0,0 +1,88 @@ +//---------------------------------------------------------------------- +#ifndef DialogoH +#define DialogoH +#endif + +//----------------------CODIGOS DEL BURR BROWN-------------------------- +#define BB_VACIA_BUFFER "*3" +#define BB_PARA_COMUNICA "*4" +#define BB_REANUDA_COMUNICA "*5" +#define BB_DEF_TECLA_FUNCION "*6" +#define BB_ENTRADA_TARJETA "*11" +#define BB_ENTRADA_TECLADO "*12" +#define BB_MENSAJE_BLOQUEO "*13" +#define BB_MENSAJE_SCROLL "*14" +#define BB_ENTRADA_SECRETO "*15" +#define BB_CAMBIA_A_TARJETA "*21" +#define BB_CAMBIA_A_TECLADO "*22" +#define BB_CAM_TEC_TARJ_DES "*23" + +//----------------------VARIABLES GLOBALES------------------------------ +#define NUM_MAX_CAR_TEC_FUNCION 100 +#define NUM_OCASIONAL 1 +#define NUM_PERIODICA_AUT 13 +#define TIEMPO_MENSAJE_PANTALLA 12000 //Milesimas de segundos +#define TIEMPO_CONTADOR_SEGUNDO 1000 //Milesimas de segundos + +//----------------------DEFINICION DE FUNCIONES ------------------------ +#define F1 "01" +#define F2 "02" +#define F3 "03" +#define F4 "04" +#define F5 "05" +#define F6 "06" +#define F7 "07" +#define F8 "08" + +//-----------CODIGOS DEL NUMERO DE ELEMENTOS DE LA TARJETA-------------- +#define NUM_ELE_CIS_TAR "01" +#define NUM_ELE_TRA_TAR "02" +#define NUM_ELE_CON_TAR "03" + +//----------------POSICIONES DE LA RESPUESTA PERIODICA------------------ +#define UBICACION_DATO_CORRECTO 4 +#define UBICACION_REFERENCIA 5 +#define UBICACION_DATO_LEIDO_TEC 6 +#define UBICACION_DATO_LEIDO_TAR 12 +#define UBICACION_ELEMENTO_TAR 10 + +//----------------------ERRORES DE LOS THREADS-------------------------- +#define THREAD_CONT_NO_INICIADO 1 +#define THREAD_AUT_NO_INICIADO 2 +#define THREAD_PSE_NO_INICIADO 3 +#define THREAD_PSS_NO_INICIADO 4 +#define THREAD_ALB_NO_INICIADO 5 + +//----------------------Declaracion de Funciones------------------------ +void Temporizador(void); +void DialogoAutorizacion(void); +void DialogoPesoEntrada(void); +void DialogoPesoSalida(void); +void DialogoAlbaran(void); +void ConseguirReferencia(char *cReferencia); +bool ComprobarTecladoTarjeta(void); +bool EsperarRespuestaOcasional(char cServidor,char *pszTipoId); +void DefinirTeclasFuncion(char cServidor,char *pszTipoID,char *Tecla,char *Mensaje,char cReferencia); +void MostrarResultado(char cServidor,char *sTipoID,int nResultado); +void AnimacionMontrel(char cServidor,char *sTipoID,char cReferencia); + +//----------------------Estructura del Dialogo------------------------------- +typedef struct +{ + char sCodigoCisDIA[4]; + char sCodigoConDIA[4]; + char sMatriculaTraDIA[11]; + char cCodigoSumDIA; + BYTE byNumeroPedidoDIA[9]; +}DIA; + +//----------------------VARIABLES EXTERNAS----------------------------------- +extern BYTE CargarThreads(void); +extern void TerminarThread(HANDLE ThreadID); +extern void DialogoAutorizacion(void); +extern void DialogoPesoEntrada(void); +extern void DialogoPesoSalida(void); +extern void DialogoAlbaran(void); +extern void Temporizador(void); +extern bool ComprobarTecladoTarjeta(void); + diff --git a/Esergui -BDE utilizando API/EserguiBDE/Drivers.dat b/Esergui -BDE utilizando API/EserguiBDE/Drivers.dat new file mode 100644 index 0000000..5ace343 --- /dev/null +++ b/Esergui -BDE utilizando API/EserguiBDE/Drivers.dat @@ -0,0 +1,9 @@ +SERVER 0000 0000 0001 +BASEPE 0001 0011 0016 +PLCDRV 0066 0130 0257 +VEGDRV 0018 0146 0144 +HELDRV 0129 0038 0038 +BBRDRV 0040 0025 0026 +VALDRV 0020 0130 0023 +TAQENT 0010 0090 0090 +ACCDRV 0045 0090 0014 diff --git a/Esergui -BDE utilizando API/EserguiBDE/ESERGUISA.bpr b/Esergui -BDE utilizando API/EserguiBDE/ESERGUISA.bpr new file mode 100644 index 0000000..ba586bc --- /dev/null +++ b/Esergui -BDE utilizando API/EserguiBDE/ESERGUISA.bpr @@ -0,0 +1,181 @@ +# --------------------------------------------------------------------------- +!if !$d(BCB) +BCB = $(MAKEDIR)\.. +!endif + +# --------------------------------------------------------------------------- +# IDE SECTION +# --------------------------------------------------------------------------- +# The following section of the project makefile is managed by the BCB IDE. +# It is recommended to use the IDE to change any of the values in this +# section. +# --------------------------------------------------------------------------- + +VERSION = BCB.04.04 +# --------------------------------------------------------------------------- +PROJECT = ESERGUISA.exe +OBJFILES = ESERGUISA.obj Principal.obj Esergui.obj Report.obj Dialogo.obj +RESFILES = ESERGUISA.res +RESDEPEN = $(RESFILES) Principal.dfm Report.dfm +LIBFILES = BDEMONTREL.lib +LIBRARIES = +SPARELIBS = Vcl40.lib Qrpt40.lib vclx40.lib vcldb40.lib +PACKAGES = Vcl40.bpi Vclx40.bpi vcljpg40.bpi bcbsmp40.bpi Qrpt40.bpi Vcldb40.bpi \ + ibsmp40.bpi vcldbx40.bpi TeeUI40.bpi teedb40.bpi tee40.bpi nmfast40.bpi \ + dclocx40.bpi +DEFFILE = +# --------------------------------------------------------------------------- +PATHCPP = .; +PATHASM = .; +PATHPAS = .; +PATHRC = .; +DEBUGLIBPATH = $(BCB)\lib\debug +RELEASELIBPATH = $(BCB)\lib\release +USERDEFINES = +SYSDEFINES = _RTLDLL;NO_STRICT;USEPACKAGES +# --------------------------------------------------------------------------- +CFLAG1 = -I"..\..\..\Archivos de programa\Borland\CBuilder4\Projects";$(BCB)\include;$(BCB)\include\vcl \ + -Od -Hc -H=$(BCB)\lib\vcl40.csm -w -Ve -r- -a8 -k -y -v -vi- -c -b- -w-par \ + -w-inl -Vx -tW -tWM -D$(SYSDEFINES);$(USERDEFINES) +PFLAGS = -U"..\..\..\Archivos de programa\Borland\CBuilder4\Projects";$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) \ + -I"..\..\..\Archivos de programa\Borland\CBuilder4\Projects";$(BCB)\include;$(BCB)\include\vcl \ + -$YD -$W -$O- -v -JPHNE -M +RFLAGS = -i"..\..\..\Archivos de programa\Borland\CBuilder4\Projects";$(BCB)\include;$(BCB)\include\vcl +AFLAGS = /i$(BCB)\include /i$(BCB)\include\vcl /mx /w2 /zd +LFLAGS = -L"..\..\..\Archivos de programa\Borland\CBuilder4\Projects";$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) \ + -aa -Tpe -x -Gn -v +# --------------------------------------------------------------------------- +ALLOBJ = c0w32.obj Memmgr.Lib $(PACKAGES) sysinit.obj $(OBJFILES) +ALLRES = $(RESFILES) +ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mti.lib +# --------------------------------------------------------------------------- +!ifdef IDEOPTIONS + +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=3082 +CodePage=1252 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication= +RemoteHost= +RemotePath= +RemoteDebug=0 + +[Compiler] +InMemoryExe=0 +ShowInfoMsgs=0 + +!endif + +# --------------------------------------------------------------------------- +# MAKE SECTION +# --------------------------------------------------------------------------- +# This section of the project file is not used by the BCB IDE. It is for +# the benefit of building from the command-line using the MAKE utility. +# --------------------------------------------------------------------------- + +.autodepend +# --------------------------------------------------------------------------- +!if !$d(BCC32) +BCC32 = bcc32 +!endif + +!if !$d(CPP32) +CPP32 = cpp32 +!endif + +!if !$d(DCC32) +DCC32 = dcc32 +!endif + +!if !$d(TASM32) +TASM32 = tasm32 +!endif + +!if !$d(LINKER) +LINKER = ilink32 +!endif + +!if !$d(BRCC32) +BRCC32 = brcc32 +!endif + +# --------------------------------------------------------------------------- +!if $d(PATHCPP) +.PATH.CPP = $(PATHCPP) +.PATH.C = $(PATHCPP) +!endif + +!if $d(PATHPAS) +.PATH.PAS = $(PATHPAS) +!endif + +!if $d(PATHASM) +.PATH.ASM = $(PATHASM) +!endif + +!if $d(PATHRC) +.PATH.RC = $(PATHRC) +!endif +# --------------------------------------------------------------------------- +$(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) + $(BCB)\BIN\$(LINKER) @&&! + $(LFLAGS) + + $(ALLOBJ), + + $(PROJECT),, + + $(ALLLIB), + + $(DEFFILE), + + $(ALLRES) +! +# --------------------------------------------------------------------------- +.pas.hpp: + $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } + +.pas.obj: + $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } + +.cpp.obj: + $(BCB)\BIN\$(BCC32) $(CFLAG1) -n$(@D) {$< } + +.c.obj: + $(BCB)\BIN\$(BCC32) $(CFLAG1) -n$(@D) {$< } + +.c.i: + $(BCB)\BIN\$(CPP32) $(CFLAG1) -n. {$< } + +.cpp.i: + $(BCB)\BIN\$(CPP32) $(CFLAG1) -n. {$< } + +.asm.obj: + $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ + +.rc.res: + $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< +# --------------------------------------------------------------------------- diff --git a/Esergui -BDE utilizando API/EserguiBDE/ESERGUISA.cpp b/Esergui -BDE utilizando API/EserguiBDE/ESERGUISA.cpp new file mode 100644 index 0000000..862ddad --- /dev/null +++ b/Esergui -BDE utilizando API/EserguiBDE/ESERGUISA.cpp @@ -0,0 +1,26 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop +USERES("ESERGUISA.res"); +USEFORM("Principal.cpp", Form1); +USEUNIT("Esergui.cpp"); +USELIB("BDEMONTREL.lib"); +USEFORM("Report.cpp", QuickReport1); /* TQuickRep: DesignClass */ +USEUNIT("Dialogo.cpp"); +//--------------------------------------------------------------------------- +WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) +{ + try + { + Application->Initialize(); + Application->CreateForm(__classid(TForm1), &Form1); + Application->CreateForm(__classid(TQuickReport1), &QuickReport1); + Application->Run(); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + return 0; +} +//--------------------------------------------------------------------------- diff --git a/Esergui -BDE utilizando API/EserguiBDE/ESERGUISA.exe b/Esergui -BDE utilizando API/EserguiBDE/ESERGUISA.exe new file mode 100644 index 0000000..26b95de Binary files /dev/null and b/Esergui -BDE utilizando API/EserguiBDE/ESERGUISA.exe differ diff --git a/Esergui -BDE utilizando API/EserguiBDE/ESERGUISA.res b/Esergui -BDE utilizando API/EserguiBDE/ESERGUISA.res new file mode 100644 index 0000000..21b593b Binary files /dev/null and b/Esergui -BDE utilizando API/EserguiBDE/ESERGUISA.res differ diff --git a/Esergui -BDE utilizando API/EserguiBDE/Elemento.dat b/Esergui -BDE utilizando API/EserguiBDE/Elemento.dat new file mode 100644 index 0000000..c5820b0 --- /dev/null +++ b/Esergui -BDE utilizando API/EserguiBDE/Elemento.dat @@ -0,0 +1,71 @@ +1 99 SER 001 1 SERVER 001 002 A +2 99 SER 002 1 SERVER 001 002 A +2 12 PLC 001 1 PLCDRV 100 001 A +2 10 BBR PEN 1 BBRDRV 050 001 A +2 13 BAS ENT 1 BASEPE 010 001 A +2 10 BBR PSA 1 BBRDRV 050 004 A +2 14 BAS SAL 1 BASEPE 010 001 A +2 01 BBR AUT 1 BBRDRV 050 002 A +2 10 BBR SAL 1 BBRDRV 050 003 A +2 11 HEL 01I 1 HELDRV 020 001 A +2 24 HEL 02I 1 HELDRV 020 003 A +2 10 HEL 03I 1 HELDRV 020 005 A +2 17 HEL 04I 1 HELDRV 020 007 A +2 19 HEL 05I 1 HELDRV 020 009 A +2 11 VEG 011 1 VEGDRV 020 001 B +2 11 VEG 012 1 VEGDRV 020 002 B +2 11 VEG 013 1 VEGDRV 020 003 B +2 11 VEG 014 1 VEGDRV 020 004 B +2 24 VEG 021 1 VEGDRV 020 005 B +2 24 VEG 022 1 VEGDRV 020 006 B +2 24 VEG 023 1 VEGDRV 020 007 B +2 24 VEG 024 1 VEGDRV 020 008 B +2 10 VEG 031 1 VEGDRV 020 009 B +2 10 VEG 032 1 VEGDRV 020 010 B +2 10 VEG 033 1 VEGDRV 020 011 B +2 10 VEG 034 1 VEGDRV 020 012 B +2 17 VEG 041 1 VEGDRV 020 013 B +2 17 VEG 042 1 VEGDRV 020 014 B +2 17 VEG 043 1 VEGDRV 020 015 B +2 17 VEG 044 1 VEGDRV 020 016 B +2 19 VEG 051 1 VEGDRV 020 017 B +2 19 VEG 052 1 VEGDRV 020 018 B +2 19 VEG 053 1 VEGDRV 020 019 B +2 19 VEG 054 1 VEGDRV 020 020 B +2 19 VEG 055 1 VEGDRV 020 021 B +2 20 VAL 001 1 VALDRV 020 001 A +2 20 VAL 002 1 VALDRV 020 002 A +2 20 VAL 003 1 VALDRV 020 003 A +2 20 VAL 004 1 VALDRV 020 004 A +2 20 VAL 005 1 VALDRV 020 005 A +2 20 VAL 006 1 VALDRV 020 006 A +2 20 VAL 007 1 VALDRV 020 007 A +2 20 VAL 008 1 VALDRV 020 008 A +2 20 VAL 009 1 VALDRV 020 009 A +2 20 VAL 010 1 VALDRV 020 010 A +2 20 VAL 011 1 VALDRV 020 011 A +2 20 VAL 012 1 VALDRV 020 012 A +2 20 VAL 013 1 VALDRV 020 013 A +2 20 VAL 014 1 VALDRV 020 014 A +2 20 VAL 015 1 VALDRV 020 015 A +2 20 VAL 016 1 VALDRV 020 016 A +2 20 VAL 017 1 VALDRV 020 017 A +2 20 VAL 018 1 VALDRV 020 018 A +2 20 VAL 019 1 VALDRV 020 019 A +2 20 VAL 020 1 VALDRV 020 020 A +2 15 TAQ 011 1 TAQENT 020 011 A +2 15 TAQ 012 1 TAQENT 020 012 A +2 15 TAQ 013 1 TAQENT 020 013 A +2 15 TAQ 014 1 TAQENT 020 014 A +2 15 TAQ 015 1 TAQENT 020 015 A +2 15 TAQ 016 1 TAQENT 020 016 A +2 15 TAQ 017 1 TAQENT 020 017 A +2 15 TAQ 018 1 TAQENT 020 018 A +2 15 TAQ 021 1 TAQENT 020 021 A +2 15 TAQ 022 1 TAQENT 020 022 A +2 15 TAQ 023 1 TAQENT 020 023 A +2 15 TAQ 024 1 TAQENT 020 024 A +2 15 TAQ 025 1 TAQENT 020 025 A +2 15 TAQ 026 1 TAQENT 020 026 A +2 21 ACC PA1 1 ACCDRV 100 001 A +2 21 ACC PA2 1 ACCDRV 100 002 A diff --git a/Esergui -BDE utilizando API/EserguiBDE/Enraf.dat b/Esergui -BDE utilizando API/EserguiBDE/Enraf.dat new file mode 100644 index 0000000..34890a5 --- /dev/null +++ b/Esergui -BDE utilizando API/EserguiBDE/Enraf.dat @@ -0,0 +1,31 @@ +TAQ 111 T-11 +TAQ 101 T-101 +TAQ 112 T-12 +TAQ 114 TK-114 +TAQ 373 T-13 +TAQ 360 TK-360 +TAQ 241 TK-241 +TAQ 372 TK-372 +TAQ 113 TK-113 +TAQ 101 TK-101 +TAQ 362 TK-362 +TAQ 363 TK-363 +TAQ 364 TK-364 +TAQ 365 TK-365 +TAQ 371 TK-371 +TAQ 005 TK-005 +TAQ 221 TK-221 +TAQ 231 TK-231 +TAQ 115 TK-115 +TAQ 351 TK-351 +TAQ 352 TK-352 +TAQ 353 TK-353 +TAQ 354 TK-354 +TAQ 355 TK-355 +TAQ 356 TK-356 +TAQ 357 TK-357 +TAQ 358 TK-358 +TAQ 001 TK-001 +TAQ 002 TK-002 +TAQ 003 TK-003 +TAQ 004 TK-004 diff --git a/Esergui -BDE utilizando API/EserguiBDE/Esergui.cpp b/Esergui -BDE utilizando API/EserguiBDE/Esergui.cpp new file mode 100644 index 0000000..7f1ae50 --- /dev/null +++ b/Esergui -BDE utilizando API/EserguiBDE/Esergui.cpp @@ -0,0 +1,3283 @@ +//--------------------------------------------------------------------------- +#include +#include +#include "Esergui.h" +#include "stdlib.h" +#include "stdio.h" +#include +#pragma hdrstop +//--------------------------------------------------------------------------- +// class TAutorizacion +// { +// protected: +// private: // Declaraciones +// DatosAutorizacion sDatos; +// bool ComprobarCaducidad(dbiTabla Tabla,char *Campo); +// unsigned int IndRegORC; +// public: //Declaracion de funciones Locales +// TAutorizacion(void); +// void CapturarFechaGen(char *pszFechaActual); +// int ComprobarEstado(char *Estado,char *Valor,char *Campo,hDBIDb hBaseDatos); +// int ComprobarConductor(char *pszCodConductor,hDBIDb hBaseDatos); +// int ComprobarCisterna(char *pszCodCisterna,hDBIDb hBaseDatos); +// int ComprobarTractor(char *pszMatriculaTra,char *pszInternoTra,hDBIDb hBaseDatos); +// int ComprobarSuministrador(char *pszCodSum,hDBIDb hBaseDatos); +// int ComprobarPedidos(char *pszCodPed,hDBIDb hBaseDatos); +// int CalcularPesoVolCarga(hDBIDb hBaseDatos); +// int ComprobarPesoCarga(hDBIDb hBaseDatos); +// int ComprobarDistribucionCarga(void); +// bool Cabe_Cis (void); +// bool Capacidad_Ok(int n_Prod,int *psnCapacidad_Prod,int *psnCantidad_Prod); +// void ActualizaEstado(char *pszEstado,bool bActualizaOrden,hDBIDb hBaseDatos); +// void BuscarNumeroViaje(hDBIDb hBaseDatos); +// void RellenarSIMICCAR(dbiTabla TCAR); +// void ReservarMemoriaEstructura(hDBIDb hBaseDatos); +// void LiberarEstructura(void); +// void LeerEstructura(DatosAutorizacion *psDat); +// void InicializaEstructura(void); +// }; +//--------------------------------------------------------------------------- + +//--------------------------------------------------------------------------- +// Constructor de la clase Autorizacion +//--------------------------------------------------------------------------- +TAutorizacion::TAutorizacion(void) +{ +} + +//--------------------------------------------------------------------------- +// bool ComprobarCaducidad(dbiTabla Tabla,char *pszCampo); +// +// Entrada: +// Tabla: Tabla con la que se va a trabajar +// Campo: Campo de la tabla a comprobar +// +// Salida: +// true: No ha caducado +// false: Si ha caducado +// +// Descripcion: Comprueba si el carnet de conducir esta caducado +//--------------------------------------------------------------------------- +bool TAutorizacion::ComprobarCaducidad(dbiTabla Tabla,char *pszCampo) +{ + bool bCorrecto; + char szFecha[TAM_FECHA]; + char szFechaCampo[TAM_FECHA]; + //Obtenemos la fecha actual + CapturarFechaGen(szFecha); + //Leemos la fecha de caducidad del carnet + LeerCampoNBDE(&Tabla,pszCampo,szFechaCampo,NULL); + //Comprobamos si el carnet caduco + if((strcmp(szFechaCampo,szFecha))>0) + bCorrecto=true; + else + bCorrecto=false; + //Devolvemos el resultado + return bCorrecto; +} + +//--------------------------------------------------------------------------- +// int ComprobarConductor(char *pszCodConductor,hDBIDb hBaseDatos) +// +// Entrada: +// CodConductor: codigo NMT del conductor +// hBaseDatos: Base de Datos a emplear +// +// Salida: +// Error si lo hubo sino un cero +// +// Descripcion: Comprueba si esta borrada la Tabla SIMICCON, +// si caduco el carnet de conducir y +// si caduco el ADR +//--------------------------------------------------------------------------- +int TAutorizacion::ComprobarConductor(char *pszCodConductor,hDBIDb hBaseDatos) +{ + bool bCorrecto; + int nValorDevuelto; + dbiTabla TConductor; + + //Inicializamos variable de devolucion + nValorDevuelto=AUT_CON_CORRECTO; + + //Abrimos la la tabla de conductor + if(!AbrirTablaBDE(&TConductor,"SIMICCON","CONNTMCON",false,hBaseDatos)) + { + //Busca cadena de entrada + if(!BuscarValorExactoBDE(&TConductor,pszCodConductor,NULL)) + { + //Vemos si esta marcado como borrado + if(!EstaRegBorBDE (&TConductor,&bCorrecto)) + { + sDatos.bBorradoCon=bCorrecto; + if(!bCorrecto) + { + //Almacenamos variables + LeerCampoNBDE(&TConductor,"CONNTMCON",sDatos.pszCodigoCon,NULL); + LeerCampoNBDE(&TConductor,"CONCCACON",sDatos.pszCadCarnetCon,NULL); + LeerCampoNBDE(&TConductor,"CONCADCON",sDatos.pszCadADRCon,NULL); + LeerCampoNBDE(&TConductor,"CONNOMCON",sDatos.pszNombreCon,NULL); + LeerCampoNBDE(&TConductor,"CONNCACON",sDatos.pszCarnetCon,NULL); + LeerCampoNBDE(&TConductor,"CONINTCON",sDatos.pszInternoCon,NULL); + + //Comprobamos si el carnet esta caducado + bCorrecto=ComprobarCaducidad(TConductor,"CONCCACON"); + if(bCorrecto) + { + //Comprobamos si el ADR esta caducado + bCorrecto=ComprobarCaducidad(TConductor,"CONCADCON"); + if(!bCorrecto) + nValorDevuelto=AUT_CON_ADR_CADUCADO; + } + else + nValorDevuelto=AUT_CON_CARNET_CADUCADO; + } + else + nValorDevuelto=AUT_CON_BORRADO; + } + else + nValorDevuelto=ERROR_BDE; + } + else + nValorDevuelto=AUT_CON_VALOR_NO_ENCONTRADO; + } + else + nValorDevuelto=ERROR_BDE; + + if(CerrarTablaBDE(&TConductor) && nValorDevuelto==AUT_CON_CORRECTO) + nValorDevuelto=ERROR_BDE; + //Guardamos el valor del resultado + sDatos.nResultadoCon=nValorDevuelto; + //Devolvemos el resultado + return nValorDevuelto; +} + +//--------------------------------------------------------------------------- +// int ComprobarCisterna(char *pszCodCisterna,hDBIDb hBaseDatos) +// +// Entrada: +// CodCisterna: codigo NMT de la cisterna +// hBaseDatos: Base de Datos a emplear +// +// Salida: +// Error si lo hubo sino un cero +// +// Descripcion: Comprueba si esta borrada la Tabla SIMICCIS, +// Comprueba si la tarjeta de transporte esta caducada +// Comprueba si el ADR esta caducado +// Comprueba si la ITV esta caducada +// Comprueba si el Seguro esta caducado +//--------------------------------------------------------------------------- +int TAutorizacion::ComprobarCisterna(char *pszCodCisterna,hDBIDb hBaseDatos) +{ + bool bCorrecto; + int nValorDevuelto; + dbiTabla TCisterna,TTRP; + + //Inicializamos variable de devolucion + nValorDevuelto=AUT_CIS_CORRECTO; + + //Abrimos la la tabla de Cisterna + if(!AbrirTablaBDE(&TCisterna,"SIMICCIS","CISNTMCIS",false,hBaseDatos)) + { + //Busca cadena de entrada + if(!BuscarValorExactoBDE(&TCisterna,pszCodCisterna,NULL)) + { + //Vemos si esta marcado como borrado + if(!EstaRegBorBDE(&TCisterna,&bCorrecto)) + { + sDatos.bBorradoCis=bCorrecto; + if(!bCorrecto) + { + //Almacenamos variables + LeerCampoNBDE(&TCisterna,"CISNTMCIS",sDatos.pszCodigoCis,NULL); + LeerCampoNBDE(&TCisterna,"CISCTRCIS",sDatos.pszCTRCis,NULL); + LeerCampoNBDE(&TCisterna,"CISCODTRP",sDatos.pszCodTransCis,NULL); + LeerCampoNBDE(&TCisterna,"CISNOMTRP",sDatos.pszNombreTransCis,NULL); + LeerCampoNBDE(&TCisterna,"CISCTTCIS",sDatos.pszCadTarjetaCis,NULL); + LeerCampoNBDE(&TCisterna,"CISCADCIS",sDatos.pszCadADRCis,NULL); + LeerCampoNBDE(&TCisterna,"CISCITCIS",sDatos.pszCadITVCis,NULL); + LeerCampoNBDE(&TCisterna,"CISCASCIS",sDatos.pszCadSeguroCis,NULL); + LeerCampoNBDE(&TCisterna,"CISINTCIS",sDatos.pszInternoCis,NULL); + LeerCampoNBDE(&TCisterna,"CISTARCIS",sDatos.pszTaraCis,NULL); + LeerCampoNBDE(&TCisterna,"CISBRUCIS",sDatos.pszBrutoCis,NULL); + LeerCampoNBDE(&TCisterna,"CISCAMCIS",sDatos.pszCamionCis,NULL); + LeerCampoNBDE(&TCisterna,"CISMATCIS",sDatos.pszMatriculaCis,NULL); + LeerCampoNBDE(&TCisterna,"CISMATTRA",sDatos.pszMatriculaTraCis,NULL); + LeerCampoNBDE(&TCisterna,"CISEJECIS",sDatos.pszNumeroEjesCis,NULL); + LeerArrayCampoBDE(&TCisterna,"CISVOLCIS",sDatos.pszsVolumenCis,NUM_MAXIMO_COMPARTIMENTO); + + //Comprobamos si la Tarjeta Transporte esta caducada + bCorrecto=ComprobarCaducidad(TCisterna,"CISCTTCIS"); + if(bCorrecto) + { + //Comprobamos el ADR + bCorrecto=ComprobarCaducidad(TCisterna,"CISCADCIS"); + if(bCorrecto) + { + //Comprobamos la ITV + bCorrecto=ComprobarCaducidad(TCisterna,"CISCITCIS"); + if(bCorrecto) + { + //Comprobamos el Seguro + bCorrecto=ComprobarCaducidad(TCisterna,"CISCASCIS"); + if(!bCorrecto) + nValorDevuelto=AUT_CIS_SEGURO_CADUCADO; + else + { + //Abrimos la tabla de transportista + if(!AbrirTablaBDE(&TTRP,"SIMICTRP","TRPCODTRP",false,hBaseDatos)) + { + //Busca cadena de entrada + if(!BuscarValorExactoBDE(&TTRP,sDatos.pszCodTransCis,NULL)) + { + LeerCampoNBDE(&TTRP,"TRPCIFTRP",sDatos.pszCIFTRP,NULL); + } + else + nValorDevuelto=AUT_CIF_TRP_NO_ECONTRADO; + } + else + nValorDevuelto=ERROR_BDE; + + //Cerramos la tabla + if(CerrarTablaBDE(&TTRP) && nValorDevuelto==AUT_CIS_CORRECTO) + nValorDevuelto=ERROR_BDE; + } + } + else + nValorDevuelto=AUT_CIS_ITV_CADUCADO; + } + else + nValorDevuelto=AUT_CIS_ADR_CADUCADO; + } + else + nValorDevuelto=AUT_CIS_TARJETA_CADUCADA; + } + else + nValorDevuelto=AUT_CIS_BORRADO; + } + else + nValorDevuelto=ERROR_BDE; + } + else + nValorDevuelto=AUT_CIS_VALOR_NO_ENCONTRADO; + } + else + nValorDevuelto=ERROR_BDE; + + if(CerrarTablaBDE(&TCisterna) && nValorDevuelto==AUT_CIS_CORRECTO) + nValorDevuelto=ERROR_BDE; + //Guardamos el valor del resultado + sDatos.nResultadoCis=nValorDevuelto; + //Devolvemos el resultado + return nValorDevuelto; +} + +//--------------------------------------------------------------------------- +// int ComprobarTractor(char *pszMatriculaTra,char *pszInternoTra,hDBIDb hBaseDatos) +// +// Entrada: +// pszMatriculaTra: Matricula del Tractor +// pszInternoTra: Codigo interno del Tractor +// hBaseDatos: Base de Datos a emplear +// +// Salida: +// Error si lo hubo sino un cero +// +// Descripcion: Comprueba si esta borrada la Tabla SIMICCON, +// si caduco el carnet de conducir y +// si caduco el ADR +//--------------------------------------------------------------------------- +int TAutorizacion::ComprobarTractor(char *pszMatriculaTra,char *pszInternoTra,hDBIDb hBaseDatos) +{ + bool bCorrecto; + int nValorDevuelto; + dbiTabla TTractor; + char *pszIndiceDeBusqueda; + char sCampo[9]; + + //Inicializamos variable de devolucion + nValorDevuelto=AUT_TRA_CORRECTO; + + if(pszMatriculaTra==NULL) + { + strcpy(sCampo,"TRAINTTRA"); + pszIndiceDeBusqueda = (char *) malloc ( StrLen(pszInternoTra) ); + strcpy(pszIndiceDeBusqueda,pszInternoTra); + } + else + { + strcpy(sCampo,"TRAMATTRA"); + pszIndiceDeBusqueda = (char *) malloc ( StrLen(pszMatriculaTra) ); + strcpy(pszIndiceDeBusqueda,pszMatriculaTra); + } + + //Abrimos la la tabla de Tractor + if(!AbrirTablaBDE(&TTractor,"SIMICTRA",sCampo,false,hBaseDatos)) + { + //Busca cadena de entrada + if(!BuscarValorExactoBDE(&TTractor,pszIndiceDeBusqueda,NULL)) + { + //Vemos si esta marcador como borrado + if(!EstaRegBorBDE(&TTractor,&bCorrecto)) + { + sDatos.bBorradoTra=bCorrecto; + if(!bCorrecto) + { + //Almacenamos variables + LeerCampoNBDE(&TTractor,"TRAINTTRA",sDatos.pszInternoTra,NULL); + LeerCampoNBDE(&TTractor,"TRAMATTRA",sDatos.pszMatriculaTra,NULL); + LeerCampoNBDE(&TTractor,"TRACTTTRA",sDatos.pszCadTarjetaTra,NULL); + LeerCampoNBDE(&TTractor,"TRACADTRA",sDatos.pszCadADRTra,NULL); + LeerCampoNBDE(&TTractor,"TRACITTRA",sDatos.pszCadITVTra,NULL); + LeerCampoNBDE(&TTractor,"TRACASTRA",sDatos.pszCadSeguroTra,NULL); + LeerCampoNBDE(&TTractor,"TRATARTRA",sDatos.pszTaraTra,NULL); + LeerCampoNBDE(&TTractor,"TRABRUTRA",sDatos.pszBrutoTra,NULL); + LeerCampoNBDE(&TTractor,"TRAEJETRA",sDatos.pszNumeroEjesTra,NULL); + //Comprobamos si la Tarjeta Transporte esta caducada + bCorrecto=ComprobarCaducidad(TTractor,"TRACTTTRA"); + if(bCorrecto) + { + //Comprobamos el ADR + bCorrecto=ComprobarCaducidad(TTractor,"TRACADTRA"); + if(bCorrecto) + { + //Comprobamos la ITV + bCorrecto=ComprobarCaducidad(TTractor,"TRACITTRA"); + if(bCorrecto) + { + //Comprobamos el Seguro + bCorrecto=ComprobarCaducidad(TTractor,"TRACASTRA"); + if(!bCorrecto) + nValorDevuelto=AUT_TRA_SEGURO_CADUCADO; + } + else + nValorDevuelto=AUT_TRA_ITV_CADUCADO; + } + else + nValorDevuelto=AUT_TRA_ADR_CADUCADO; + } + else + nValorDevuelto=AUT_TRA_TARJETA_CADUCADA; + } + else + nValorDevuelto=AUT_TRA_BORRADO; + } + else + nValorDevuelto=ERROR_BDE; + } + else + nValorDevuelto=AUT_TRA_VALOR_NO_ENCONTRADO; + } + else + nValorDevuelto=ERROR_BDE; + + if(CerrarTablaBDE(&TTractor) && nValorDevuelto==AUT_TRA_CORRECTO) + nValorDevuelto=ERROR_BDE; + //Liberamos memoria + free(pszIndiceDeBusqueda); + //Guardamos el valor del resultado + sDatos.nResultadoTra=nValorDevuelto; + //Devolvemos el resultado + return nValorDevuelto; +} + +//--------------------------------------------------------------------------- +// int ComprobarSuministrador(char *pszCodSum,hDBIDb hBaseDatos) +// +// Entrada: +// CodSum: codigo del Suministrador +// hBaseDatos: Base de Datos a emplear +// +// Salida: +// Error si lo hubo sino un cero +// +// Descripcion: Comprueba si esta borrada la Tabla SIMICSUM, +// si esta marcada como borrado +//--------------------------------------------------------------------------- +int TAutorizacion::ComprobarSuministrador(char *pszCodSum,hDBIDb hBaseDatos) +{ + bool bCorrecto; + int nValorDevuelto; + dbiTabla TSuministrador; + + //Inicializamos variable de devolucion + nValorDevuelto=AUT_SUM_CORRECTO; + + //Abrimos la la tabla Suministrador + if(!AbrirTablaBDE(&TSuministrador,"SIMICSUM","SUMCODSUM",false,hBaseDatos)) + { + //Busca cadena de entrada + if(!BuscarValorExactoBDE(&TSuministrador,pszCodSum,NULL)) + { + //Vemos si esta marcador como borrado + if(!EstaRegBorBDE(&TSuministrador,&bCorrecto)) + { + sDatos.bBorradoSum=bCorrecto; + if(!bCorrecto) + { + //Asignamos valores + LeerCampoNBDE(&TSuministrador,"SUMCODSUM",sDatos.pszCodigoSum,NULL); + LeerCampoNBDE(&TSuministrador,"SUMNOMSUM",sDatos.pszNombreSum,NULL); + nValorDevuelto=AUT_SUM_CORRECTO; + } + else + nValorDevuelto=AUT_SUM_BORRADO; + } + else + nValorDevuelto=ERROR_BDE; + } + else + nValorDevuelto=AUT_SUM_VALOR_NO_ENCONTRADO; + } + else + nValorDevuelto=ERROR_BDE; + + if(CerrarTablaBDE(&TSuministrador) && nValorDevuelto==AUT_SUM_CORRECTO) + nValorDevuelto=ERROR_BDE; + + //Guardamos el valor del resultado + sDatos.nResultadoSum=nValorDevuelto; + + return nValorDevuelto; +} + +//--------------------------------------------------------------------------- +// int ComprobarEstado(char *pszEstado,char *pszValor,char *pszCampo,hDBIDb hBaseDatos) +// +// Entrada: +// Estado: Estado en el que se encuentra +// Valor: Valor a buscar +// Campo: Campo de busqueda +// hBaseDatos: Base de Datos a emplear +// +// Salida: +// Error si lo hubo sino un cero +// +// Descripcion: Comprueba el valor del estado +// +//--------------------------------------------------------------------------- +int TAutorizacion::ComprobarEstado(hDBIDb hBaseDatos) +{ + int nValorDevuelto; + dbiTabla TCAR; + DBIResult Error; + int nNumReg; + char *pszCARINTCIS; + char *pszCARINTCON; + char *pszCARINTTRA; + bool bEncontrado; + bool bBorrado; + + //Inicilizamos las variables + nValorDevuelto=AUT_EST_CORRECTO; + + //Abrimos la tabla SIMICCAR para saber el Estado del proceso + Error=AbrirTablaBDE(&TCAR,"SIMICCAR",NULL,true,hBaseDatos); + if(!Error) + { + //Pedimos memoria para la variable temporal + pszCARINTCIS=ReservarMemoria(&TCAR,"CARINTCIS"); + pszCARINTCON=ReservarMemoria(&TCAR,"CARINTCON"); + pszCARINTTRA=ReservarMemoria(&TCAR,"CARINTTRA"); + //Nos situamos al principio + ContarRegBDE(&TCAR,&nNumReg); + if(nNumReg) + { + //comprobamos hasta el final o encontrado + bEncontrado=false; + while(Error==BDE_SIN_ERROR && bEncontrado==false) + { + //Leemos los campos + LeerCampoNBDE(&TCAR,"CARINTCIS",pszCARINTCIS,NULL); + LeerCampoNBDE(&TCAR,"CARINTCON",pszCARINTCON,NULL); + LeerCampoNBDE(&TCAR,"CARINTTRA",pszCARINTTRA,NULL); + //Comprobamos los campos + if(strcmp(sDatos.pszInternoCis,pszCARINTCIS)) + { + if(strcmp(sDatos.pszInternoCon,pszCARINTCON)) + { + if(strcmp(sDatos.pszInternoTra,pszCARINTTRA)) + bEncontrado=false; + else + { + bEncontrado=true; + nValorDevuelto=AUT_EST_TRA_YA_DENTRO; + } + } + else + { + bEncontrado=true; + nValorDevuelto=AUT_EST_CON_YA_DENTRO; + } + } + else + { + bEncontrado=true; + nValorDevuelto=AUT_EST_CIS_YA_DENTRO; + } + + nValorDevuelto=5; + //Vamos al siguiente registro + Error=IrSiguienteRegBDE(&TCAR,&bBorrado); + } + + if(bEncontrado==false && Error==BDE_FIN_FICHERO)//fin de registro + nValorDevuelto=AUT_EST_CORRECTO; + } + + //Liberamos la memoria pedida + LiberarMemoria(pszCARINTCIS); + LiberarMemoria(pszCARINTCON); + LiberarMemoria(pszCARINTTRA); + } + else + nValorDevuelto=ERROR_BDE; + + //Si no ha habido Errores rellenamos la tabla simiccar + if(nValorDevuelto==AUT_EST_CORRECTO) + RellenarSIMICCAR(TCAR); + + //Cerramos la tabla SIMICCAR + if(CerrarTablaBDE(&TCAR)) + nValorDevuelto=ERROR_BDE; + + return nValorDevuelto; +} + +//--------------------------------------------------------------------------- +// void ReservarMemoriaEstructura(hDBIDb hBaseDatos) +// +// Entrada: +// hDBIDb hBaseDatos: Cabecera de la Base de datos +// +// Descripcion: Reserva Memoria para la Estructura de Autorizacion +// +//--------------------------------------------------------------------------- +void TAutorizacion::ReservarMemoriaEstructura(hDBIDb hBaseDatos) +{ + BYTE byi,byj; + char *pszCadena; + dbiTabla TConductor; + dbiTabla TCisterna; + dbiTabla TTractor; + dbiTabla TSuministrador; + dbiTabla TOrden; + dbiTabla TLinea; + dbiTabla TTRP; + + //Reservamos memoria para el conductor + AbrirTablaBDE(&TConductor,"SIMICCON","CONNTMCON",false,hBaseDatos); + sDatos.pszCadCarnetCon=ReservarMemoria(&TConductor,"CONCCACON"); + sDatos.pszCadADRCon=ReservarMemoria(&TConductor,"CONCADCON"); + sDatos.pszNombreCon=ReservarMemoria(&TConductor,"CONNOMCON"); + sDatos.pszCarnetCon=ReservarMemoria(&TConductor,"CONNCACON"); + sDatos.pszInternoCon=ReservarMemoria(&TConductor,"CONINTCON"); + sDatos.pszCodigoCon=ReservarMemoria(&TConductor,"CONNTMCON"); + CerrarTablaBDE(&TConductor); + + //Reservamos memoria para la cisterna + AbrirTablaBDE(&TCisterna,"SIMICCIS","CISNTMCIS",false,hBaseDatos); + sDatos.pszCodTransCis=ReservarMemoria(&TCisterna,"CISCODTRP"); + sDatos.pszCTRCis=ReservarMemoria(&TCisterna,"CISCTRCIS"); + sDatos.pszNombreTransCis=ReservarMemoria(&TCisterna,"CISNOMTRP"); + sDatos.pszCadTarjetaCis=ReservarMemoria(&TCisterna,"CISCTTCIS"); + sDatos.pszCadADRCis=ReservarMemoria(&TCisterna,"CISCADCIS"); + sDatos.pszCadITVCis=ReservarMemoria(&TCisterna,"CISCITCIS"); + sDatos.pszCadSeguroCis=ReservarMemoria(&TCisterna,"CISCASCIS"); + sDatos.pszInternoCis=ReservarMemoria(&TCisterna,"CISINTCIS"); + sDatos.pszTaraCis=ReservarMemoria(&TCisterna,"CISTARCIS"); + sDatos.pszBrutoCis=ReservarMemoria(&TCisterna,"CISBRUCIS"); + sDatos.pszCamionCis=ReservarMemoria(&TCisterna,"CISCAMCIS"); + sDatos.pszMatriculaCis=ReservarMemoria(&TCisterna,"CISMATCIS"); + sDatos.pszMatriculaTraCis=ReservarMemoria(&TCisterna,"CISMATTRA"); + sDatos.pszCodigoCis=ReservarMemoria(&TCisterna,"CISNTMCIS"); + sDatos.pszNumeroEjesCis=ReservarMemoria(&TCisterna,"CISEJECIS"); + pszCadena=(char *)malloc(strlen("CISVOLCIS")+2); + for(byi=1;byi<(NUM_MAXIMO_COMPARTIMENTO+1);byi++) + { + strcpy(pszCadena,"CISVOLCIS"); + itoa(byi,pszCadena+strlen(pszCadena),10); + sDatos.pszsVolumenCis[byi-1]=ReservarMemoria(&TCisterna,pszCadena); + } + free(pszCadena); + + CerrarTablaBDE(&TCisterna); + + //Reservamos memoria para el Tractor + AbrirTablaBDE(&TTractor,"SIMICTRA","TRAMATTRA",false,hBaseDatos); + sDatos.pszCadTarjetaTra=ReservarMemoria(&TTractor,"TRACTTTRA"); + sDatos.pszCadADRTra=ReservarMemoria(&TTractor,"TRACADTRA"); + sDatos.pszCadITVTra=ReservarMemoria(&TTractor,"TRACITTRA"); + sDatos.pszCadSeguroTra=ReservarMemoria(&TTractor,"TRACASTRA"); + sDatos.pszInternoTra=ReservarMemoria(&TTractor,"TRAINTTRA"); + sDatos.pszTaraTra=ReservarMemoria(&TTractor,"TRATARTRA"); + sDatos.pszBrutoTra=ReservarMemoria(&TTractor,"TRABRUTRA"); + sDatos.pszMatriculaTra=ReservarMemoria(&TTractor,"TRAMATTRA"); + sDatos.pszNumeroEjesTra=ReservarMemoria(&TTractor,"TRAEJETRA"); + CerrarTablaBDE(&TTractor); + + //Reservamos memoria para el Suministrador + AbrirTablaBDE(&TSuministrador,"SIMICSUM","SUMCODSUM",false,hBaseDatos); + sDatos.pszCodigoSum=ReservarMemoria(&TSuministrador,"SUMCODSUM"); + sDatos.pszNombreSum=ReservarMemoria(&TSuministrador,"SUMNOMSUM"); + CerrarTablaBDE(&TSuministrador); + + //Reservamos memoria para el Tranportista + AbrirTablaBDE(&TTRP,"SIMICTRP","TRPCODTRP",false,hBaseDatos); + sDatos.pszCIFTRP=ReservarMemoria(&TTRP,"TRPCIFTRP"); + CerrarTablaBDE(&TTRP); + + //Reservamos memoria para el Pedido + AbrirTablaBDE(&TOrden,"SIMICORC","ORCMATCIS",false,hBaseDatos); + + //Reservamos memoria para el numero de ordenes + for(byi=0;byi=0) + { + //Asignamos valores + strcpy(sDatos.sOrden[byNumeroOrden].pszMatriculaCisOrd,sDatos.pszMatriculaCis); + strcpy(sDatos.sOrden[byNumeroOrden].pszCodigoSumOrd,sDatos.pszCodigoSum); + LeerCampoNBDE(&TOrden,"ORCPEDORC",sDatos.sOrden[byNumeroOrden].pszNumeroOrd,NULL); + LeerCampoNBDE(&TOrden,"ORCNOMDES",sDatos.sOrden[byNumeroOrden].pszNombreDesOrd,NULL); + LeerCampoNBDE(&TOrden,"ORCENTORC",sDatos.sOrden[byNumeroOrden].pszFechaEntOrd,NULL); + LeerCampoNBDE(&TOrden,"ORCFCAORC",sDatos.sOrden[byNumeroOrden].pszFechaCargaOrd,NULL); + LeerCampoNBDE(&TOrden,"ORCCODCLI",sDatos.sOrden[byNumeroOrden].pszCodigoCliOrd,NULL); + LeerCampoNBDE(&TOrden,"ORCCCLDES",sDatos.sOrden[byNumeroOrden].pszCodigoCliDesOrd,NULL); + LeerCampoNBDE(&TOrden,"ORCUNIPRO",sDatos.sOrden[byNumeroOrden].pszUnidadOrd,NULL); + nValorDevuelto=AUT_ORC_CORRECTO; + } + else + nValorDevuelto=AUT_ORC_FECHA_MENOR_QUE_HOY; + } + else + nValorDevuelto=AUT_ORC_OTRA_CISTERNA; + } + else + nValorDevuelto=AUT_ORC_OTRO_SUMINISTRADOR; + } + else + nValorDevuelto=AUT_ORC_ESTADO_ACABADO; + } + else + nValorDevuelto=AUT_ORC_BORRADO; + } + else + nValorDevuelto=ERROR_BDE; + } + else + nValorDevuelto=AUT_ORC_VALOR_NO_ENCONTRADO; + + //Liberamos variables Temporales + LiberarMemoria(pszCodSumTemp); + LiberarMemoria(pszCodCisTemp); + LiberarMemoria(pszEstadoTemp); + LiberarMemoria(pszFechaTemp); + } + else + nValorDevuelto=ERROR_BDE; + + //Cerramos la tabla SIMIORC + if(CerrarTablaBDE(&TOrden) && nValorDevuelto==AUT_ORC_CORRECTO) + nValorDevuelto=ERROR_BDE; + + //almacenamos el valor devuelto + sDatos.sOrden[byNumeroOrden].nResultadoOrd=nValorDevuelto; + + return nValorDevuelto; +} + +//--------------------------------------------------------------------------- +// int CalcularPesoVolCarga(hDBIDb hBaseDatos) +// +// Entrada: +// hDBIDb hBaseDatos: Cabecera de la Base de Datos +// +// Devuelve: +// int nValorDevuelto: Devuelve un codigo de Error si lo hubo +// +// Descripcion: Calcula el peso y el volumen de la carga y dice si es correcto +// +//--------------------------------------------------------------------------- +int TAutorizacion::CalcularPesoVolCarga(hDBIDb hBaseDatos) +{ + DBIResult FinFichero; + dbiTabla TLinea,TProducto; + BYTE byi,byj,byk; + int nValorDevuelto; + char *pszCodProTemp,*pszNumOrcTemp; + char *pszCodAdiTemp[NUM_MAXIMO_ADITIVO]; + bool bBorrado,bVacio,bSalir; + + bVacio=false; + //Inicializamos el Peso total del producto + for(byi=0;byi=5) + LeerCampoNBDE(&TLinea,"PRM5EJPRM",pszPesoPermitido,NULL); + + //Guardamos el peso maximo permitido + nPesoMaximoPermitido=atoi(pszPesoPermitido); + + //Calculamos la capacidad de arrastre del tractor + nCapacidadArrastreTra=atoi(sDatos.pszBrutoTra); + + //Cogemos la cantidad mas restrictiva + if(nPesoMaximoPermitido>nCapacidadArrastreTra) + nPesoMaximoPermitido=nCapacidadArrastreTra; + + //Añadimos al peso total de carga el peso del tractor + nPesoTotalDeCarga=nPesoTotalDeCarga+atoi(sDatos.pszTaraTra); + + //Comprobamos si el tractor puede con todo el peso + sDatos.nSobrePesoTra=nPesoTotalDeCarga-nCapacidadArrastreTra; + if( sDatos.nSobrePesoTra <= 0) + nValorDevuelto=AUT_VIA_CORRECTO; + else + nValorDevuelto=AUT_VIA_PESO_MAYOR_CAP_TRA; + } + else + nValorDevuelto=AUT_VIA_CORRECTO; + } + else + nValorDevuelto=AUT_VIA_PROD_MAYOR_CAP_CIS; + + //Liberamos la memoria pedida para el peso permitido + LiberarMemoria(pszPesoPermitido); + } + else + nValorDevuelto=ERROR_BDE; + + //Cerramos las tablas + if(CerrarTablaBDE(&TLinea) && nValorDevuelto==AUT_VIA_CORRECTO) + nValorDevuelto=ERROR_BDE; + + return nValorDevuelto; +} + +//--------------------------------------------------------------------------- +// int TAutorizacion::ComprobarDistribucionCarga(void) +// +// Devuelve: +// int nValorDevuelto: Devuelve un codigo de Error si lo hubo +// +// Descripcion: +// Comprobamos si se puede repartir la carga en los depositos +// +//--------------------------------------------------------------------------- +int TAutorizacion::ComprobarDistribucionCarga(void) +{ + int nValorDevuelto; + + nValorDevuelto=AUT_VIA_CORRECTO; + + if(Cabe_Cis()) + nValorDevuelto=AUT_VIA_CORRECTO; + else + nValorDevuelto=AUT_VIA_VOL_MAYOR_CAP_CIS; + + return nValorDevuelto; +} + +//--------------------------------------------------------------------------- +// bool TAutorizacion::Capacidad_Ok(int n_Prod,int *psnCapacidad_Prod,int *psnCantidad_Prod) +// +// Devuelve: +// bool: Devuelve si cabe 1, sino 0 +// +// Descripcion: +// Comprobamos si la capacidad del deposito puede admitir la cantidad de producto +// +//--------------------------------------------------------------------------- +bool TAutorizacion::Capacidad_Ok(int n_Prod,int *psnCapacidad_Prod,int *psnCantidad_Prod) +{ + int nP; + + nP = n_Prod - 1 ; + while ((nP >= 0) && (*(psnCapacidad_Prod+nP) >= *(psnCantidad_Prod+nP))) + nP--; + return (nP < 0); +} + +//--------------------------------------------------------------------------- +// bool TAutorizacion::Cabe_Cis(void) +// +// Devuelve: +// bool: Devuelve si cabe 1, sino 0 +// +// Descripcion: +// Comprueba si los productos caben en la cisterna +// +//--------------------------------------------------------------------------- +bool TAutorizacion::Cabe_Cis(void) +{ + BYTE byNumeroLineas,byi,byj; + int nDep,nProd,nSalta; + int nNum_Prod,nNum_Dep; + int nCapacidad_Prod[NUM_MAXIMO_COMPARTIMENTO]; + int nCantidad_Prod[NUM_MAXIMO_COMPARTIMENTO]; + + //Inicializamos la variable + nNum_Prod=0; + byi=0; + byNumeroLineas=0; + for(byj=0;byj<9;byj++) + nCantidad_Prod[byj]=0; + + //Asignamos los volumenes disponibles al Array Capacidad Prod + byj=0; + while(sDatos.sOrden[byi].sLinea[byj].nVolumenPro && byNumeroLineas<9) + { + while(sDatos.sOrden[byi].sLinea[byj].nVolumenPro) + { + nCantidad_Prod[byNumeroLineas]=sDatos.sOrden[byi].sLinea[byj].nVolumenPro; + byNumeroLineas++; + byj++; + } + byj=0; + byi++; + } + + if(byNumeroLineas nNum_Dep) + return (false); + else + { + for(nProd=0;nProd= 0) && !Capacidad_Ok(nNum_Prod,nCapacidad_Prod,nCantidad_Prod)) + { + nDep=nNum_Dep-1; + do + { + nSalta=0; + nCapacidad_Prod[sDatos.nProducto_Dep[nDep]]-=atoi(sDatos.pszsVolumenCis[nDep]); + sDatos.nProducto_Dep[nDep]++; + if (sDatos.nProducto_Dep[nDep] < nNum_Prod) + nCapacidad_Prod[sDatos.nProducto_Dep[nDep]]+=atoi(sDatos.pszsVolumenCis[nDep]); + else + { + sDatos.nProducto_Dep[nDep]=0; + nCapacidad_Prod[0]+=atoi(sDatos.pszsVolumenCis[nDep]); + nDep--; + nSalta=1; + } + } + while ((nDep >= 0) && nSalta); + } + + return (nDep >= 0); + } + } + else + return (false); +} + +//--------------------------------------------------------------------------- +// void TAutorizacion::RellenarSIMICCAR(dbiTabla TCAR) +// +// Entrada: +// dbiTabla TCAR: Cabecera de la Tabla de SIMICCAR +// +// Descripcion: +// Rellenamos la tabla SIMICCAR con los datos de la estructura de Autorizacion +// +//--------------------------------------------------------------------------- +void TAutorizacion::RellenarSIMICCAR(dbiTabla TCAR) +{ + BYTE byi,byj; + char szFecha[TAM_FECHA]; + char szFechaActual[TAM_FECHA]; + char szHora[TAM_HORA]; + char szNumViajeOrd[2]; + char *pszNombreProTemp[NUM_MAXIMO_LINEAS]; + char *pszCodigoProTemp[NUM_MAXIMO_LINEAS]; + char *pszInternoProTemp[NUM_MAXIMO_LINEAS]; + char *pszImpuestoProTemp[NUM_MAXIMO_LINEAS]; + char *pszIndAdiProTemp[NUM_MAXIMO_ADITIVO]; + + //Obtenemos la fecha actual + CapturarFechaHora(szFechaActual,szHora); + CapturarFechaGen(szFecha); + + //Reservamos memoria para las variables temporales + for(byj=0;byjLeerEstructura(&sDatos); + //Abrimos la tabla + if(!AbrirTablaBDE(&TOrden,"SIMICORC","ORCEVCORC",false,hBaseDatos)) + { + //Pedimos memoria + pszFechaViaMat=(char *)malloc(strlen(sDatos.sOrden[0].pszFechaCargaOrd)+strlen(EspacioEnBlanco)+strlen(cNumViaTemp)+strlen(sDatos.pszMatriculaCis)); + //Inicializamos variables + byNumeroOrden=0; + bSalir=false; + while(!bSalir) + { + if(!(*sDatos.sOrden[byNumeroOrden].pszNumeroOrd)) + bSalir=true; + else + { + bSalir=false; + byNumeroViaje=1; + while(byNumeroViaje(nPesoTotalCis+nTolMaxEnt)) || (nPesoBascula<(nPesoTotalCis-nTolMinEnt))) + nValorDevuelto=PEE_PESO_FUERA_DE_TOLERANCIA; + + return nValorDevuelto; +} +//--------------------------------------------------------------------- +//--------------------------------------------------------------------------- +// class TPesoSalida +// { +// protected: +// private: // User declarations +// DatosPesoEntrada sDatosEnt; +// public: +// TPesoSalida(void); +// BYTE PesoSalida(char *pszCodCisterna,char *pszCodTractor,char *pszCodConductor,hDBIDb hBaseDatos); +// BYTE ComprobarCisterna(char *pszNTMCis,hDBIDb hBaseDatos); +// BYTE ComprobarEstado(char *pszCodCisterna,dbiTabla TCAR); +// BYTE ComprobarPeso(char *pszTaraCis,char *pszTaraTra); +// void CambiarEstado(hDBIDb hBaseDatos); +// void ReservarMemoriaEstructura(hDBIDb hBaseDatos); +// void LiberarEstructura(void); +// }; +//--------------------------------------------------------------------------- + +//--------------------------------------------------------------------------- +// Constructor de la clase +//--------------------------------------------------------------------------- +TPesoSalida::TPesoSalida(void) +{ +} + +//--------------------------------------------------------------------------- +// int TPesoSalida::PesoSalida(char *pszCodCisterna,hDBIDb hBaseDatos) +// +// Entrada: +// char *pszCodCisterna: Codigo de la cisterna a comprobar +// hDBIDb hBaseDatos: Cabecera de la Base de Datos +// +// Devuelve: +// int nValorDevuelto: Devuelve un Error si lo hubo +// +// Descripcion: +// Rellena la Estuctura PEsoSalida leyendo de las tablas +// +//--------------------------------------------------------------------------- +int TPesoSalida::PesoSalida(char *pszCodCisterna,hDBIDb hBaseDatos) +{ + dbiTabla TPrm,TCar,TCis,TTra; + int nValorDevuelto; + + //Inicializamos las variables + nValorDevuelto=PES_CORRECTO; + + //Abrimos la tabla de Prm para la tolerancia + if(!AbrirTablaBDE(&TPrm,"SIMICPRM",NULL,false,hBaseDatos)) + { + //Leemos las tolerancias maxima y minima de la entrada y salida + LeerCampoNBDE(&TPrm,"PRMTSSPRM",sDatosSal.pszToleranciaMaxSalPES,NULL); + LeerCampoNBDE(&TPrm,"PRMTISPRM",sDatosSal.pszToleranciaMinSalPES,NULL); + } + //Cerramos la tabla de Prm + if(CerrarTablaBDE(&TPrm)) + nValorDevuelto=ERROR_BDE; + + //Abrimos la tabla TCAR en exclusiva + if(!AbrirTablaBDE(&TCar,"SIMICCAR",NULL,true,hBaseDatos)) + { + //Reservamos memoria y asignamos valor para el codigo de la cisterna + strcpy(sDatosSal.pszCodigoCisPES,pszCodCisterna); + + //Comprobamos el Estado y nos situamos en el registro en cuestion + nValorDevuelto=ComprobarEstado(pszCodCisterna,TCar); + + //Reservamos memoria y asignamos valor para el codigo del tractor + LeerCampoNBDE(&TCar,"CARMATTRA",sDatosSal.pszCodigoTraPES,NULL); + + if(nValorDevuelto==PES_CORRECTO) + { + //Abrimos la tabla de Cisterna + if(!AbrirTablaBDE(&TCis,"SIMICCIS","CISNTMCIS",false,hBaseDatos)) + { + //Buscamos el ntm de la cisterna + if(!BuscarValorExactoBDE(&TCis,pszCodCisterna,NULL)) + { + //Cogemos la Tara de Cisternas + LeerCampoNBDE(&TCis,"CISTARCIS",sDatosSal.pszTaraCisPES,NULL); + LeerCampoNBDE(&TCis,"CISCAMCIS",sDatosSal.pszCamionCisPES,NULL); + + //Comprobamos si es un camion + if( (*sDatosSal.pszCamionCisPES) != 'F' ) + { + //Abrimos la la tabla de Tractor + if(!AbrirTablaBDE(&TTra,"SIMICTRA","TRAMATTRA",false,hBaseDatos)) + { + //Busca cadena de entrada + if(!BuscarValorExactoBDE(&TTra,sDatosSal.pszCodigoTraPES,NULL)) + { + //Cogemos la Tara del Tractor + LeerCampoNBDE(&TTra,"TRATARTRA",sDatosSal.pszTaraTraPES,NULL); + //Comprobamos el Peso + nValorDevuelto=ComprobarPeso(sDatosSal.pszTaraTraPES); + } + else + nValorDevuelto=PES_TRACTOR_NO_ENCONTRADO; + } + else + nValorDevuelto=ERROR_BDE; + + //Cerramos la tabla de TCar + if(CerrarTablaBDE(&TTra)) + nValorDevuelto=ERROR_BDE; + } + else + nValorDevuelto=ComprobarPeso(sDatosSal.pszTaraCisPES); + } + else + nValorDevuelto=PES_CISTERNA_NO_ENCONTRADA; + } + else + nValorDevuelto=ERROR_BDE; + + //Cerramos la tabla de TCar + if(CerrarTablaBDE(&TCis)) + nValorDevuelto=ERROR_BDE; + } + } + else + nValorDevuelto=ERROR_BDE; + + //Cerramos la tabla de TCar + if(CerrarTablaBDE(&TCar)) + nValorDevuelto=ERROR_BDE; + + return nValorDevuelto; +} + +//--------------------------------------------------------------------------- +// void LiberarEstructura(void) +// +// Descripcion: +// Libera la Estuctura de PEsoSalida +// +//--------------------------------------------------------------------------- +void TPesoSalida::LiberarEstructura(void) +{ + //Liberamos las Tolerancias + LiberarMemoria(sDatosSal.pszToleranciaMaxSalPES); + LiberarMemoria(sDatosSal.pszToleranciaMinSalPES); + + //Liberamos variables de la Cisterna + LiberarMemoria(sDatosSal.pszTaraCisPES); + LiberarMemoria(sDatosSal.pszCamionCisPES); + LiberarMemoria(sDatosSal.pszCodigoCisPES); + + //Liberamos variables del Tractor + LiberarMemoria(sDatosSal.pszCodigoTraPES); + LiberarMemoria(sDatosSal.pszTaraTraPES); + + //Liberamos variable del Conductor + LiberarMemoria(sDatosSal.pszCodigoConPES); + + //inicializamos la variable de Error + sDatosSal.nResultadoPesoSalida=0; +} + +//--------------------------------------------------------------------------- +// int ComprobarEstado(char *pszCodCisterna,dbiTabla TCAR) +// +// Entrada: +// char *pszCodCisterna: Codigo de la cisterna +// dbiTabla TCAR: cabecera de la tabla SIMICCAR +// +// Salida: +// int nValorDevuelto: Devuele un Error si lo hubo. +// +// Descripcion: Comprueba el estado de la tabla SIMICCAR +// +//--------------------------------------------------------------------------- +int TPesoSalida::ComprobarEstado(char *pszCodCisterna,dbiTabla TCAR) +{ + int nValorDevuelto; + DBIResult Error; + char *pszCodCisTemp,*pszEstadoTemp; + bool bBorrado; + + //Inicializamos variables + nValorDevuelto=PES_CISTERNA_SIN_ORDEN; + Error=0; + + //Pedimos memoria para la variable temporal + pszCodCisTemp=ReservarMemoria(&TCAR,"CARNTMCIS"); + pszEstadoTemp=ReservarMemoria(&TCAR,"CARESTCAR"); + + //mientras no lleguemos al final de la tabla + while(Error==0) + { + //Si la el codigo de la cisterna coincide vemos su estado + LeerCampoNBDE(&TCAR,"CARNTMCIS",pszCodCisTemp,NULL); + if(!strcmp(pszCodCisTemp,pszCodCisterna)) + { + //Miramos el estado + LeerCampoNBDE(&TCAR,"CARESTCAR",pszEstadoTemp,NULL); + if(!strstr(pszEstadoTemp,CARGADA)) + nValorDevuelto=PES_ESTADO_NO_CARGADO; + else + nValorDevuelto=PES_CORRECTO; + } + //Vamos al siguiente registro + Error=IrSiguienteRegBDE(&TCAR,&bBorrado); + } + + //Liberamos memoria + LiberarMemoria(pszCodCisTemp); + LiberarMemoria(pszEstadoTemp); + + return nValorDevuelto; +} + +//--------------------------------------------------------------------------- +// int ComprobarPeso(char *pszTaraCis) +// +// Entrada: +// char *pszTaraCis: Valor de la Tara de la cisterna +// +// Salida: +// int nValorDevuelto: Devuele un Error si lo hubo. +// +// Descripcion: Comprueba el Peso de la Cisterna +// +//--------------------------------------------------------------------------- +int TPesoSalida::ComprobarPeso(char *pszTaraCis) +{ + int nValorDevuelto; + int nPesoTotalCis,nTolMaxSal,nTolMinSal,nPesoBascula; + + //Inicializamos variable + nPesoBascula=8000; + nValorDevuelto=PES_CORRECTO; + nTolMaxSal=atoi(sDatosSal.pszToleranciaMaxSalPES); + nTolMinSal=atoi(sDatosSal.pszToleranciaMinSalPES); + + //Calculamos el Peso Total de la cisterna + nPesoTotalCis=atoi(pszTaraCis); + + //Comprobamos el peso de la cisterna con el de la bascula teniendo encuenta la tolerancia + if((nPesoBascula>(nPesoTotalCis+nTolMaxSal)) || (nPesoBascula<(nPesoTotalCis-nTolMinSal))) + nValorDevuelto=PES_PESO_FUERA_DE_TOLERANCIA; + + return nValorDevuelto; +} + +//--------------------------------------------------------------------------- +// void ReservarMemoriaEstructura(hDBIDb hBaseDatos) +// +// Entrada: +// hDBIDb hBaseDatos: Cabecera de la Base de datos +// +// Descripcion: Reserva Memoria para la Estructura de PesoSalida +// +//--------------------------------------------------------------------------- +void TPesoSalida::ReservarMemoriaEstructura(hDBIDb hBaseDatos) +{ + dbiTabla TPrm,TCis,TTra,TCon; + + //Reservamos memoria para la tolerancia + AbrirTablaBDE(&TPrm,"SIMICPRM",NULL,false,hBaseDatos); + sDatosSal.pszToleranciaMaxSalPES=ReservarMemoria(&TPrm,"PRMTSSPRM"); + sDatosSal.pszToleranciaMinSalPES=ReservarMemoria(&TPrm,"PRMTISPRM"); + CerrarTablaBDE(&TPrm); + + //Reservamos memoria para la tara de cisterna + AbrirTablaBDE(&TCis,"SIMICCIS","CISNTMCIS",false,hBaseDatos); + sDatosSal.pszTaraCisPES=ReservarMemoria(&TCis,"CISTARCIS"); + sDatosSal.pszCamionCisPES=ReservarMemoria(&TCis,"CISCAMCIS"); + sDatosSal.pszCodigoCisPES=ReservarMemoria(&TCis,"CISNTMCIS"); + CerrarTablaBDE(&TCis); + + //Reservamos memoria para la tara del Tractor + AbrirTablaBDE(&TTra,"SIMICTRA","TRAMATTRA",false,hBaseDatos); + sDatosSal.pszTaraTraPES=ReservarMemoria(&TTra,"TRATARTRA"); + sDatosSal.pszCodigoTraPES=ReservarMemoria(&TTra,"TRAMATTRA"); + CerrarTablaBDE(&TTra); + + //Reservamos memoria para el Conductor + AbrirTablaBDE(&TCon,"SIMICCON","CONNTMCON",false,hBaseDatos); + sDatosSal.pszCodigoConPES=ReservarMemoria(&TCon,"CONNTMCON"); + CerrarTablaBDE(&TCon); +} +//--------------------------------------------------------------------------- +// class TAlbaran +// { +// protected: +// private: +// +// public: +// TAlbaran(void); +// BYTE Albaran(hDBIDb hBaseDatos); +// BYTE ComprobarCisterna(char *pszNTMCis,hDBIDb hBaseDatos); +// BYTE ComprobarEstado(char *pszCodCisterna,dbiTabla TCAR); +// BYTE ComprobarPeso(char *pszTaraCis,char *pszTaraTra); +// void CambiarEstado(hDBIDb hBaseDatos); +// void ReservarMemoriaEstructura(hDBIDb hBaseDatos); +// void LiberarEstructura(void); +// }; +//--------------------------------------------------------------------------- + +//--------------------------------------------------------------------------- +// Constructor de la clase +//--------------------------------------------------------------------------- +TAlbaran::TAlbaran(void) +{ +} + +//--------------------------------------------------------------------------- +// void ReservarMemoriaEstructura(hDBIDb hBaseDatos) +// +// Entrada: +// hDBIDb hBaseDatos: Cabecera de la Base de datos +// +// Descripcion: Reserva Memoria para la Estructura de Albaran +// +//--------------------------------------------------------------------------- +void TAlbaran::ReservarMemoriaEstructura(hDBIDb hBaseDatos) +{ + dbiTabla TCis,TTra,TCon,TSum,TCli,TDes,TCar,TTrp; + BYTE i,j; + + //Pedimos memoria para la Cisterna + AbrirTablaBDE(&TCis,"SIMICCIS","CISNTMCIS",false,hBaseDatos); + for(i=0;iLeerEstructura(&sDatos); + //Abrimos la tabla de Cisterna y actualizamos + if(!AbrirTablaBDE(&TCisterna,"SIMICCIS","CISNTMCIS",false,hBaseDatos)) + { + //Busca cadena de entrada y Modificamos el campo + if(!BuscarValorExactoBDE(&TCisterna,Cis,NULL)) + ModificarCampoNBDE(&TCisterna,"CARESTCAR",pszEstado); + } + //Cerramos la tabla + if(CerrarTablaBDE(&TCisterna)) + ShowMessage("Hubo un error"); + + //Abrimos la tabla de Tractor si la cisterna no es un camion y actualizamos + if( (*sDatos.pszCamionCis) != 'F' ) + { + if(!AbrirTablaBDE(&TTractor,"SIMICTRA","TRAMATTRA",false,hBaseDatos)) + { + //Busca cadena de entrada y Modificamos el campo + if(!BuscarValorExactoBDE(&TTractor,Tra,NULL)) + ModificarCampoNBDE(&TTractor,"TRAESTTRA",pszEstado); + } + //Cerramos la tabla + if(CerrarTablaBDE(&TTractor)) + ShowMessage("Hubo un error"); + } + + //Abrimos la tabla de Conductor y actualizamos + if(!AbrirTablaBDE(&TConductor,"SIMICCON","CONNTMCON",false,hBaseDatos)) + { + //Busca cadena de entrada y Modificamos el campo + if(!BuscarValorExactoBDE(&TConductor,Con,NULL)) + ModificarCampoNBDE(&TConductor,"CONESTCON",pszEstado); + } + //Cerramos la tabla + if(CerrarTablaBDE(&TConductor)) + ShowMessage("Hubo un error"); +} + +//--------------------------------------------------------------------------- +// void CapturarFechaGen(char *pszFechaActual); +// +// Entrada: +// Fechaactual: Variable donde pondremos la fecha actual +// +// Descripcion: Captura la fecha actual con este formato YYYYMMDD +// Donde Y=año M=Mes D=Dia. +//--------------------------------------------------------------------------- +void CapturarFechaGen(char *pszFechaActual) +{ + char szFecha[TAM_FECHA]; + char szHora[TAM_HORA]; + + CapturarFechaHora(szFecha,szHora); + memcpy(pszFechaActual,szFecha+6,4); + memcpy(pszFechaActual+4,szFecha+3,2); + memcpy(pszFechaActual+6,szFecha,2); +} + +//--------------------------------------------------------------------------- +// class TTransfer +// { +// protected: +// private: // User declarations +// ELEDat sELEDat; +// DRVDat sDRVDat; +// TRAPERDat sTRAPERDat[NUM_MAX_PER]; +// TRAOCADat sTRAOCADat; +// public: +// TTransfer(void); +// int RellenarEstructuraTransfer(void); +// void LeerEstructura(TRAPERDat *pTRAPERDat,TRAOCADat *pTRAOCADat); +// void InicializarEstructuraTransfer(void); +// }; +//--------------------------------------------------------------------------- + +//--------------------------------------------------------------------------- +// Constructor de la clase +//--------------------------------------------------------------------------- + +TTransfer::TTransfer(void) +{ +} + +//--------------------------------------------------------------------------- +// int RellenarEstructuraTransfer(void) +// +// Devuelve: Codigo de Error +// +// Descripcion: Rellena la Estructura del fichero transfer +// +//--------------------------------------------------------------------------- + +int TTransfer::RellenarEstructuraTransfer(void) +{ + FILE *pElemento,*pDriver; + BYTE byNumPer,byi; + bool bEncontrado; + int nValorDevuelto; + + //Inicializamos las variables + for(byi=0;byi +#pragma hdrstop + +//--------------------------------------------------------------------------- +#include "Principal.h" +#include "Dialogo.h" + +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TForm1 *Form1; +TAutorizacion *Autorizacion; +TPesoEntrada *PesoEntrada; +TPesoSalida *PesoSalida; +TAlbaran *Albaran; +TTransfer *Transfer; + +//--------------------------------------------------------------------------- +__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) +{ + //Pedimos memoria para la clase Autorizacion + Autorizacion = new TAutorizacion(); + //Pedimos memoria para la clase Peso Entrada + PesoEntrada = new TPesoEntrada(); + //Pedimos memoria para la clase Peso Salida + PesoSalida = new TPesoSalida(); + //Pedimos memoria para la clase de Albaran + Albaran = new TAlbaran(); + //Pedimos memoria para la clase de Transfer + Transfer = new TTransfer(); +} + +//--------------------------------------------------------------------------- +__fastcall TForm1::~TForm1() +{ + //liberamos las clases + delete Autorizacion; + delete PesoEntrada; + delete PesoSalida; + delete Albaran; + delete Transfer; +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::Salir1Click(TObject *Sender) +{ + Close(); +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::ConductorClick(TObject *Sender) +{ + int nError; + + //Mostramos el Label y Edit + Label1->Visible=true; + Edit1->Visible=true; + Edit1->MaxLength=4; + Edit1->SetFocus(); + + //Asignamos a la opcion la de conductor + byOpcion=OpConductor; + + if(strcmp(sDatoTecleado,"")) + { + //Comprobamos el Conductor + nError=Autorizacion->ComprobarConductor(sDatoTecleado,hBaseDatos);//"1151" + if(nError!=AUT_CON_CORRECTO) + MuestraError(nError); + else + { + MuestraLista("CONDUCTOR"); + ShowMessage("Fue todo correcto"); + } + } +} + +//--------------------------------------------------------------------------- +void TForm1::MuestraError(int Error) +{ + char scadena[100]; + + strcpy(scadena,"Se produjo un Error: "); + switch(Error) + { + case 1: + strcat(scadena,"AUT_CON_VALOR_NO_ENCONTRADO"); + break; + case 2: + strcat(scadena,"AUT_CON_BORRADO"); + break; + case 3: + strcat(scadena,"AUT_CON_CARNET_CADUCADO"); + break; + case 4: + strcat(scadena,"AUT_CON_ADR_CADUCADO"); + break; + case 5: + strcat(scadena,"AUT_CON_EN_PROCESO"); + break; + case 6: + strcat(scadena,"AUT_CIS_VALOR_NO_ENCONTRADO"); + break; + case 7: + strcat(scadena,"AUT_CIS_BORRADO"); + break; + case 8: + strcat(scadena,"AUT_CIS_TARJETA_CADUCADA"); + break; + case 9: + strcat(scadena,"AUT_CIS_ADR_CADUCADO"); + break; + case 10: + strcat(scadena,"AUT_CIS_ITV_CADUCADO"); + break; + case 11: + strcat(scadena,"AUT_CIS_SEGURO_CADUCADO"); + break; + case 12: + strcat(scadena,"AUT_TRA_VALOR_NO_ENCONTRADO"); + break; + case 13: + strcat(scadena,"AUT_TRA_BORRADO"); + break; + case 14: + strcat(scadena,"AUT_TRA_TARJETA_CADUCADA"); + break; + case 15: + strcat(scadena,"AUT_TRA_ADR_CADUCADO"); + break; + case 16: + strcat(scadena,"AUT_TRA_ITV_CADUCADO"); + break; + case 17: + strcat(scadena,"AUT_TRA_SEGURO_CADUCADO"); + break; + case 18: + strcat(scadena,"AUT_SUM_VALOR_NO_ENCONTRADO"); + break; + case 19: + strcat(scadena,"AUT_SUM_BORRADO"); + break; + case 20: + strcat(scadena,"AUT_ORC_VALOR_NO_ENCONTRADO"); + break; + case 21: + strcat(scadena,"AUT_ORC_BORRADO"); + break; + case 22: + strcat(scadena,"AUT_ORC_ESTADO_ACABADO"); + break; + case 23: + strcat(scadena,"AUT_ORC_SUM_OTRA_ORDEN"); + break; + case 24: + strcat(scadena,"AUT_ORC_CIS_OTRA_ORDEN"); + break; + case 25: + strcat(scadena,"AUT_ORC_FECHA_MENOR_QUE_HOY"); + break; + case 26: + strcat(scadena,"AUT_ORL_VALOR_NO_ENCONTRADO"); + break; + case 27: + strcat(scadena,"AUT_PRO_VALOR_NO_ENCONTRADO"); + break; + case 28: + strcat(scadena,"AUT_PRM_PROD_MAYOR_PERMITIDO"); + break; + case 29: + strcat(scadena,"AUT_PRM_PROD_MAYOR_CAP_CIS"); + break; + case 30: + strcat(scadena,"AUT_PRM_PESO_MAYOR_CAP_TRA"); + break; + + + case 250: + strcat(scadena,"ERROR_INTERNO"); + break; + + } + ShowMessage(scadena); +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::FormCreate(TObject *Sender) +{ + ComprobarNomFichError("PruebaError.txt"); + //Generamos un Error de prueba en el fichero pruebaError.txt + GenerarError("Prueba de Error"); + //Inicializamos el BDE + InicializarBDE("IDAPI.CFG"); + //Conectamos al BDE + ConectarBDE("ESERGUI",&hBaseDatos); + //Pedimos memoria para sus variables + Autorizacion->ReservarMemoriaEstructura(hBaseDatos); + //Pedimos memoria para las variables de peso entrada + PesoEntrada->ReservarMemoriaEstructura(hBaseDatos); + //Pedimos memoria para las variables de peso entrada + PesoSalida->ReservarMemoriaEstructura(hBaseDatos); + //Pedimos memoria para las variables de Albaranes + Albaran->ReservarMemoriaEstructura(hBaseDatos); + //Inicializamos variable + Transfer->InicializarEstructuraTransfer(); + //Inicializamos el codigo de teclado + strcpy(sDatoTecleado,""); + byOpcion=0; + bTodos=false; + //Inicializamos los HANDLE de los Threads + HDAUT=NULL; + HDPSE=NULL; + HDPSS=NULL; + HDALB=NULL; + HDContadores=NULL; +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) +{ + //Finalizamos los Threads + TerminarThread(HDAUT); + TerminarThread(HDPSE); + TerminarThread(HDPSS); + TerminarThread(HDALB); + TerminarThread(HDContadores); + //Liberamos la memoria de las variables de la estructura + Autorizacion->LiberarEstructura(); + //Liberamos memoria de Peso de entrada + PesoEntrada->LiberarEstructura(); + //Liberamos memoria de Peso de salida + PesoSalida->LiberarEstructura(); + //Liberamos memoria del Albaran + Albaran->LiberarEstructura(); + //Desconectamoel el BDE + DesconectarBDE (hBaseDatos); + //Finalizamos el BDE + FinalizarBDE(); +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::InformacionEstructura1Click(TObject *Sender) +{ + BYTE i; + int POSX,POSY; + char scadena[50]; + DatosAutorizacion sDatos; + + Autorizacion->LeerEstructura(&sDatos); + //Cargamos Paneles de campo + for(i=0;iParent=this; + Panel[i]->Top=0; + Panel[i]->Left=i*100; + Panel[i]->Width=100; + Panel[i]->Height=20; + Panel[i]->Enabled=true; + Panel[i]->Visible=true; + switch(i) + { + case 0: strcpy(scadena,"CONDUCTOR"); + break; + case 1: strcpy(scadena,"CISTERNA"); + break; + case 2: strcpy(scadena,"TRACTOR"); + break; + case 3: strcpy(scadena,"SUMINISTRADOR"); + break; + case 4: strcpy(scadena,"PEDIDOS"); + break; + } + Panel[i]->Caption=scadena; + } + //Cargamos clases + for(i=i;i<(N_TABLA+N_CAMPO);i++) + { + //Cargamos los paneles y le damos la posicion y el tamaño + Panel[i] = new TPanel(this); + Panel[i]->Parent=this; + if((i-N_TABLA)Left=POSX; + Panel[i]->Top=POSY; + + + Panel[i]->Width=100; + Panel[i]->Height=20; + Panel[i]->Enabled=true; + Panel[i]->Visible=true; + //Copiamos scadenas en los paneles segun corresponda + switch(i) + { + //Paneles del conductor + case N_TABLA: + strcpy(scadena,sDatos.pszCodigoCon); + break; + case (N_TABLA+1): + strcpy(scadena,sDatos.pszCadCarnetCon); + break; + case (N_TABLA+2): + strcpy(scadena,sDatos.pszCadADRCon); + break; + case (N_TABLA+3): + strcpy(scadena,sDatos.pszNombreCon); + break; + case (N_TABLA+4): + strcpy(scadena,sDatos.pszCarnetCon); + break; + case (N_TABLA+5): + strcpy(scadena,sDatos.pszInternoCon); + break; + case (N_TABLA+6): + BoolACadena(sDatos.bBorradoCon,scadena); + break; + case (N_TABLA+7): + itoa(sDatos.nResultadoCon,scadena,10); + break; + + //Paneles de la cisterna + case (N_TABLA+8): + strcpy(scadena,sDatos.pszCodigoCis); + break; + case (N_TABLA+9): + strcpy(scadena,sDatos.pszCadTarjetaCis); + break; + case (N_TABLA+10): + strcpy(scadena,sDatos.pszCadADRCis); + break; + case (N_TABLA+11): + strcpy(scadena,sDatos.pszCadITVCis); + break; + case (N_TABLA+12): + strcpy(scadena,sDatos.pszCadSeguroCis); + break; + case (N_TABLA+13): + strcpy(scadena,sDatos.pszInternoCis); + break; + case (N_TABLA+14): + strcpy(scadena,sDatos.pszTaraCis); + break; + case (N_TABLA+15): + strcpy(scadena,sDatos.pszBrutoCis); + break; + case (N_TABLA+16): + strcpy(scadena,sDatos.pszsVolumenCis[0]); + break; + case (N_TABLA+17): + strcpy(scadena,sDatos.pszsVolumenCis[1]); + break; + case (N_TABLA+18): + strcpy(scadena,sDatos.pszsVolumenCis[2]); + break; + case (N_TABLA+19): + strcpy(scadena,sDatos.pszsVolumenCis[3]); + break; + case (N_TABLA+20): + strcpy(scadena,sDatos.pszsVolumenCis[4]); + break; + case (N_TABLA+21): + strcpy(scadena,sDatos.pszsVolumenCis[5]); + break; + case (N_TABLA+22): + strcpy(scadena,sDatos.pszsVolumenCis[6]); + break; + case (N_TABLA+23): + strcpy(scadena,sDatos.pszsVolumenCis[7]); + break; + case (N_TABLA+24): + strcpy(scadena,sDatos.pszsVolumenCis[8]); + break; + case (N_TABLA+25): + strcpy(scadena,sDatos.pszCamionCis); + break; + case (N_TABLA+26): + BoolACadena(sDatos.bBorradoCon,scadena); + break; + case (N_TABLA+27): + itoa(sDatos.nResultadoCis,scadena,10); + break; + + //Paneles del tractor + case (N_TABLA+28): + strcpy(scadena,sDatos.pszMatriculaTra); + break; + case (N_TABLA+29): + strcpy(scadena,sDatos.pszCadTarjetaTra); + break; + case (N_TABLA+30): + strcpy(scadena,sDatos.pszCadADRTra); + break; + case (N_TABLA+31): + strcpy(scadena,sDatos.pszCadITVTra); + break; + case (N_TABLA+32): + strcpy(scadena,sDatos.pszCadSeguroTra); + break; + case (N_TABLA+33): + strcpy(scadena,sDatos.pszInternoTra); + break; + case (N_TABLA+34): + strcpy(scadena,sDatos.pszTaraTra); + break; + case (N_TABLA+35): + strcpy(scadena,sDatos.pszBrutoTra); + break; + case (N_TABLA+36): + BoolACadena(sDatos.bBorradoCon,scadena); + break; + case (N_TABLA+37): + itoa(sDatos.nResultadoTra,scadena,10); + break; + + //Paneles del Suministrador + case (N_TABLA+38): + strcpy(scadena,sDatos.pszCodigoSum); + break; + case (N_TABLA+39): + strcpy(scadena,sDatos.pszNombreSum); + break; + case (N_TABLA+40): + BoolACadena(sDatos.bBorradoSum,scadena); + break; + case (N_TABLA+41): + itoa(sDatos.nResultadoSum,scadena,10); + break; + + //Paneles de los Pedidos + case (N_TABLA+42): + strcpy(scadena,sDatos.sOrden[0].pszMatriculaCisOrd); + break; + case (N_TABLA+43): + strcpy(scadena,sDatos.sOrden[0].pszCodigoSumOrd); + break; + case (N_TABLA+44): + strcpy(scadena,sDatos.sOrden[0].pszNumeroOrd); + break; + case (N_TABLA+45): + strcpy(scadena,sDatos.sOrden[0].pszNombreDesOrd); + break; + case (N_TABLA+46): + itoa(sDatos.sOrden[0].nResultadoOrd,scadena,10); + break; + + } + Panel[i]->Caption=scadena; + } + //liberamos clases + ShowMessage("Estos son los resultados"); + for(i=0;i<(N_TABLA+N_CAMPO);i++) + delete Panel[i]; +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::CisternaClick(TObject *Sender) +{ + int nError; + + //Mostramos el Label y Edit + Label1->Visible=true; + Edit1->Visible=true; + Edit1->MaxLength=4; + Edit1->SetFocus(); + + //Asignamos a la opcion la de conductor + byOpcion=OpCisterna; + + if(strcmp(sDatoTecleado,"")) + { + nError=Autorizacion->ComprobarCisterna(sDatoTecleado,hBaseDatos);//"0602" + if(nError!=AUT_CIS_CORRECTO) + MuestraError(nError); + else + { + MuestraLista("CISTERNA"); + ShowMessage("Fue todo correcto"); + } + } +} + +//--------------------------------------------------------------------------- +void TForm1::BoolACadena(bool bVariable,char *pscadena) +{ + if(bVariable) + strcpy(pscadena,"true"); + else + strcpy(pscadena,"false"); +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::TractorClick(TObject *Sender) +{ + int nError; + + //Mostramos el Label y Edit + Label1->Visible=true; + Edit1->Visible=true; + Edit1->MaxLength=10; + Edit1->SetFocus(); + + //Asignamos a la opcion la de conductor + byOpcion=OpTractor; + + if(strcmp(sDatoTecleado,"")) + { + nError=Autorizacion->ComprobarTractor(sDatoTecleado,NULL,hBaseDatos);//"NA-0664-AL" + if(nError!=AUT_TRA_CORRECTO) + MuestraError(nError); + else + { + MuestraLista("TRACTOR"); + ShowMessage("Fue todo correcto"); + } + } +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::SuministradorClick(TObject *Sender) +{ + int nError; + + //Mostramos el Label y Edit + Label1->Visible=true; + Edit1->Visible=true; + Edit1->MaxLength=1; + Edit1->SetFocus(); + + //Asignamos a la opcion la de conductor + byOpcion=OpSuministrador; + + if(strcmp(sDatoTecleado,"")) + { + nError=Autorizacion->ComprobarSuministrador(sDatoTecleado,hBaseDatos);//"1" + if(nError!=AUT_SUM_CORRECTO) + MuestraError(nError); + else + { + MuestraLista("SUMINISTRADOR"); + ShowMessage("Fue todo correcto"); + } + } +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::PedidosClick(TObject *Sender) +{ + int nError; + + //Mostramos el Label y Edit + Label1->Visible=true; + Edit1->Visible=true; + Edit1->MaxLength=5; + Edit1->SetFocus(); + + //Asignamos a la opcion la de conductor + byOpcion=OpPedidos; + + if(strcmp(sDatoTecleado,"")) + { + nError=Autorizacion->ComprobarPedidos(sDatoTecleado,hBaseDatos);//"10000" + if(nError!=AUT_ORC_CORRECTO) + MuestraError(nError); + else + { + MuestraLista("PEDIDO"); + ShowMessage("Fue todo correcto"); + } + } +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::TodosClick(TObject *Sender) +{ + + bTodos=true; + + if(!byOpcion) + ConductorClick(Sender); + else if(byOpcion==OpConductor) + CisternaClick(Sender); + else if(byOpcion==OpCisterna) + TractorClick(Sender); + else if(byOpcion==OpTractor) + SuministradorClick(Sender); + else if(byOpcion==OpSuministrador) + { + PedidosClick(Sender); + bTodos=false; + } +} + +//--------------------------------------------------------------------------- +void TForm1::MuestraLista(char *cadena) +{ + int i,j; + char scadena[100]; + DatosAutorizacion sDatos; + + ListBox1->Clear(); + Autorizacion->LeerEstructura(&sDatos); + + if(!strcmp("CONDUCTOR",cadena)) + { + strcpy(scadena,"CONDUCTOR"); + ListBox1->Items->Add(scadena); + BoolACadena(sDatos.bBorradoCon,scadena); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszCadCarnetCon); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszCadADRCon); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszNombreCon); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszCarnetCon); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszInternoCon); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszCodigoCon); + ListBox1->Items->Add(scadena); + itoa(sDatos.nResultadoCon,scadena,10); + ListBox1->Items->Add(scadena); + } + + if(!strcmp("CISTERNA",cadena)) + { + strcpy(scadena,"CISTERNA"); + ListBox1->Items->Add(scadena); + BoolACadena(sDatos.bBorradoCon,scadena); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszNumeroEjesCis); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszCadTarjetaCis); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszCadADRCis); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszCadITVCis); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszCadSeguroCis); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszInternoCis); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszTaraCis); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszBrutoCis); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszCamionCis); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszMatriculaCis); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszCodigoCis); + ListBox1->Items->Add(scadena); + for(i=0;iItems->Add(scadena); + } + itoa(sDatos.nResultadoCis,scadena,10); + ListBox1->Items->Add(scadena); + } + + if(!strcmp("TRACTOR",cadena)) + { + strcpy(scadena,"TRACTOR"); + ListBox1->Items->Add(scadena); + BoolACadena(sDatos.bBorradoTra,scadena); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszNumeroEjesTra); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszCadTarjetaTra); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszCadADRTra); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszCadITVTra); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszCadSeguroTra); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszInternoTra); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszTaraTra); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszBrutoTra); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszMatriculaTra); + ListBox1->Items->Add(scadena); + itoa(sDatos.nResultadoTra,scadena,10); + ListBox1->Items->Add(scadena); + } + + if(!strcmp("SUMINISTRADOR",cadena)) + { + strcpy(scadena,"SUMINISTRADOR"); + ListBox1->Items->Add(scadena); + BoolACadena(sDatos.bBorradoSum,scadena); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszCodigoSum); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.pszNombreSum); + ListBox1->Items->Add(scadena); + itoa(sDatos.nResultadoSum,scadena,10); + ListBox1->Items->Add(scadena); + + } + + if(!strcmp("PEDIDO",cadena)) + { + strcpy(scadena,"PEDIDO"); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.sOrden[0].pszMatriculaCisOrd); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.sOrden[0].pszCodigoSumOrd); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.sOrden[0].pszNumeroOrd); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.sOrden[0].pszNombreDesOrd); + ListBox1->Items->Add(scadena); + itoa(sDatos.sOrden[0].nResultadoOrd,scadena,10); + ListBox1->Items->Add(scadena); + } + + if(!strcmp("PESO",cadena)) + { + i=0; + j=0; + while(!sDatos.sOrden[i].sLinea[j].nResultadoPesoCarga) + { + strcpy(scadena,"PESO TOTAL DE CARGA"); + ListBox1->Items->Add(scadena); + itoa(sDatos.sOrden[i].nPesoOrd,scadena,10); + ListBox1->Items->Add(scadena); + for(j=0;jItems->Add(scadena); + strcpy(scadena,sDatos.sOrden[i].sLinea[j].pszDensidadPro); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.sOrden[i].sLinea[j].pszNombrePro); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.sOrden[i].sLinea[j].pszCodigoPro); + ListBox1->Items->Add(scadena); + strcpy(scadena,sDatos.sOrden[i].sLinea[j].pszCantidadPro); + ListBox1->Items->Add(scadena); + itoa(sDatos.sOrden[i].sLinea[j].nResultadoPesoCarga,scadena,10); + ListBox1->Items->Add(scadena); + } + + i++; + } + } + + if(!strcmp("DISTRIBUCION",cadena)) + { + strcpy(scadena,"DISTRIBUCION DE LA CARGA EN LOS COMPARTIMENTOS"); + ListBox1->Items->Add(scadena); + for(i=0;iItems->Add(scadena); + } + } + +} + +//Comprobamos si el peso de carga es superior al maximos permitido por el camion +void __fastcall TForm1::ComprobarPeso1Click(TObject *Sender) +{ + DatosAutorizacion sDatos; + int nError; + + nError=Autorizacion->CalcularPesoVolCarga(hBaseDatos); + Autorizacion->LeerEstructura(&sDatos); + if(nError) + MuestraError(nError); + else + { + MuestraLista("PESO"); + ShowMessage("Fue todo correcto"); + } + if(strcmp(sDatos.sOrden[0].sLinea[0].pszCodigoPro,"")) + MuestraLista("PESO"); +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::ComprobarPeso2Click(TObject *Sender) +{ + int nError; + + nError=Autorizacion->ComprobarPesoCarga(hBaseDatos); + + if(nError) + MuestraError(nError); + else + { + MuestraLista("PESO"); + ShowMessage("Fue todo correcto"); + } + +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::DistribuirCarga1Click(TObject *Sender) +{ + if(Autorizacion->ComprobarDistribucionCarga()==0) + { + MuestraLista("DISTRIBUCION"); + ShowMessage("Fue todo correcto"); + } + else + ShowMessage("No se pudo distribuir la Carga"); +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::ComprobarEstado1Click(TObject *Sender) +{ + DatosAutorizacion sDatos; + int nError; + + //Leemos la Estructura + Autorizacion->LeerEstructura(&sDatos); + + //Inicializamos + nError=0; + + //Comprobamos el estado del conductor + nError=Autorizacion->ComprobarEstado(hBaseDatos); + if(nError==AUT_EST_CON_YA_DENTRO) + ShowMessage("Conductor en otro estado"); + + //Comprobamos el estado del cisterna + if(nError==AUT_EST_CIS_YA_DENTRO) + ShowMessage("Cisterna en otro estado"); + + //Comprobamos el estado del Tractor + if(nError==AUT_EST_TRA_YA_DENTRO) + ShowMessage("Tractor en otro estado"); + + if(!nError) + ShowMessage("Fue todo correcto"); +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::Button1Click(TObject *Sender) +{ + Autorizacion->BuscarNumeroViaje(hBaseDatos); +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::ComprobarEstado2Click(TObject *Sender) +{ + dbiTabla TCar; + int nError; + + //Abrimos la tabla TCAR en exclusiva + if(!AbrirTablaBDE(&TCar,"SIMICCAR",NULL,true,hBaseDatos)) + { + nError=0; + nError=PesoEntrada->ComprobarEstado("0602",TCar); + if(nError) + ShowMessage("Estado inapropiado"); + else + ShowMessage("Todo Correcto"); + } + else + ShowMessage("Hubo un Error de TCAR"); + + //Cerramos la tabla de TCAR + CerrarTablaBDE(&TCar); +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::PesoEntrada1Click(TObject *Sender) +{ + int nError; + nError=PesoEntrada->PesoEntrada("0602",hBaseDatos); + if(!nError) + ShowMessage("Fue todo correcto"); + else + ShowMessage("Algo fue mal"); +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::PesodeSalida2Click(TObject *Sender) +{ + int nError; + nError=PesoSalida->PesoSalida("0602",hBaseDatos); + if(!nError) + ShowMessage("Fue todo correcto"); + else + ShowMessage("Algo fue mal"); +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::Albaran2Click(TObject *Sender) +{ + //El "00090" es el correspondiente al conductor asociado + if(Albaran->Albaran("0602",hBaseDatos)) + ShowMessage("Hubo un error"); + else + ShowMessage("Todo Correcto"); +} +//--------------------------------------------------------------------------- +/* +bool TForm1::LeerFichero(char *NombreFichero,char *NombreEstructura) +{ + bool bCorrecto; + FILE *fichero; + LINDat sLINDat; + ELEDat sELEDat; + DRVDat sDRVDat; + + bCorrecto=true; + ListBox1->Clear(); + //Abrimos le fichero en modo lectura + if( ( fichero = fopen(NombreFichero, "rb") ) == NULL) + bCorrecto=false; + else + { + if(!strcmp(NombreEstructura,"LINDat")) + { + while (!feof(fichero)) + { + //Leemos la estructura + fread(&sLINDat, sizeof(sLINDat), 1, fichero); + + //Ponemos el Fin de cadena + sLINDat.cNumeroLineaLIN[2]=0; + sLINDat.cVelocidadLineaLIN[5]=0; + + //Mostramos la Estructura + ListBox1->Items->Add("DATOS DE LA LINEA"); + ListBox1->Items->Add("================="); + ListBox1->Items->Add(sLINDat.cConcentradorLIN); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sLINDat.cNumeroLineaLIN); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sLINDat.cLineaActivaLIN); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sLINDat.cVelocidadLineaLIN); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sLINDat.cAnchuraDatosLIN); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sLINDat.cParidadLIN); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sLINDat.cBitsDeStopLIN); + ListBox1->Items->Add(" "); + } + } + if(!strcmp(NombreEstructura,"ELEDat")) + { + while (!feof(fichero)) + { + //Leemos la estructura + fread(&sELEDat, sizeof(sELEDat), 1, fichero); + + //Ponemos el Fin de cadena + sELEDat.cNumeroLineaELE[2]=0; + sELEDat.cTipoELE[3]=0; + sELEDat.cIdentificaELE[3]=0; + sELEDat.cNombreDriverELE[6]=0; + sELEDat.cTimeOutComunicaELE[3]=0; + sELEDat.cDireccionELE[3]=0; + + //Mostramos la Estructura + ListBox1->Items->Add("DATOS DE ELEMENTOS"); + ListBox1->Items->Add("=================="); + ListBox1->Items->Add(sELEDat.cConcentradorELE); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sELEDat.cNumeroLineaELE); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sELEDat.cTipoELE); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sELEDat.cIdentificaELE); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sELEDat.cElementoActivoELE); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sELEDat.cNombreDriverELE); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sELEDat.cTimeOutComunicaELE); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sELEDat.cDireccionELE); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sELEDat.cTipoPrioridadELE); + ListBox1->Items->Add(" "); + + } + } + if(!strcmp(NombreEstructura,"DRVDat")) + { + while (!feof(fichero)) + { + //Leemos la estructura + fread(&sDRVDat, sizeof(sDRVDat)+1, 1, fichero); + + //Ponemos el Fin de cadena + sDRVDat.cNombreDriverDRV[6]=0; + sDRVDat.cTamBufferTraDRV[4]=0; + sDRVDat.cTamBufferRecDRV[4]=0; + sDRVDat.cTamPeriodicaDRV[4]=0; + + //Mostramos la Estructura + ListBox1->Items->Add("DATOS DE DRIVERS"); + ListBox1->Items->Add("================"); + ListBox1->Items->Add(sDRVDat.cNombreDriverDRV); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sDRVDat.cTamBufferTraDRV); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sDRVDat.cTamBufferRecDRV); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sDRVDat.cTamPeriodicaDRV); + ListBox1->Items->Add(" "); + } + } +// if(!strcmp(NombreEstructura,"DatosTRADat")) + } + fclose(fichero); + + return bCorrecto; +} */ + +//--------------------------------------------------------------------------- +void __fastcall TForm1::Transfer1Click(TObject *Sender) +{ + TRAPERDat sTRAPERIODICADat[NUM_MAXIMO_PERIODICA]; + TRAOCADat sTRAOCASIONALDat; + BYTE byi; + char sCadena[25]; + int nCorrecto; + + ListBox1->Clear(); + + //Leemos de los ficheros y rellenamos la estructura transfer + nCorrecto=Transfer->RellenarEstructuraTransfer(); + + if(nCorrecto==TRANSFER_CORRECTO) + { + ShowMessage("Lectura del fichero transfer.dat correcta"); + Transfer->LeerEstructura(sTRAPERIODICADat,&sTRAOCASIONALDat); + byi=0; + while(sTRAPERIODICADat[byi].lPosicionTRAPER!=-1 && byiItems->Add("DATOS DE TRANSFER"); + ListBox1->Items->Add("================="); + ListBox1->Items->Add(" "); + ListBox1->Items->Add("Posicion: "); + ltoa(sTRAPERIODICADat[byi].lPosicionTRAPER,sCadena,10); + ListBox1->Items->Add(sCadena); + ListBox1->Items->Add(" "); + ListBox1->Items->Add("Tipo: "); + ListBox1->Items->Add(sTRAPERIODICADat[byi].cTipoIDTRAPER); + ListBox1->Items->Add(" "); + ListBox1->Items->Add("Tamaño: "); + ListBox1->Items->Add(sTRAPERIODICADat[byi].lTamPeriodicaTRAPERDat); + ListBox1->Items->Add(" "); + byi++; + } + } + else + ShowMessage("Error en la lectura del fichero transfer.dat"); +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::Elemento1Click(TObject *Sender) +{ + ELEDat sELEDat; + bool bCorrecto; + + bCorrecto=Transfer->LeerFichero("elemento.dat","ELEDat"); + + if(bCorrecto) + { + ShowMessage("Lectura del fichero elementos.dat correcta"); + ListBox1->Clear(); + while(sELEDat.cConcentradorELE!='0') + { + //Mostramos la Estructura + ListBox1->Items->Add("DATOS DE ELEMENTOS"); + ListBox1->Items->Add("=================="); + ListBox1->Items->Add(sELEDat.cConcentradorELE); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sELEDat.cNumeroLineaELE); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sELEDat.cTipoELE); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sELEDat.cIdentificaELE); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sELEDat.cElementoActivoELE); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sELEDat.cNombreDriverELE); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sELEDat.cTimeOutComunicaELE); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sELEDat.cDireccionELE); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sELEDat.cTipoPrioridadELE); + ListBox1->Items->Add(" "); + } + } + else + ShowMessage("Erro en la lectura del fichero elementos.dat"); +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::Linea1Click(TObject *Sender) +{ + LINDat sLINDat; + bool bCorrecto; + + bCorrecto=Transfer->LeerFichero("lineas.dat","LINDat"); + + if(bCorrecto) + { + ShowMessage("Lectura del fichero lineas.dat correcta"); + ListBox1->Clear(); + while(sLINDat.cConcentradorLIN!='0') + { + //Mostramos la Estructura + ListBox1->Items->Add("DATOS DE LA LINEA"); + ListBox1->Items->Add("================="); + ListBox1->Items->Add(sLINDat.cConcentradorLIN); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sLINDat.cNumeroLineaLIN); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sLINDat.cLineaActivaLIN); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sLINDat.cVelocidadLineaLIN); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sLINDat.cAnchuraDatosLIN); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sLINDat.cParidadLIN); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sLINDat.cBitsDeStopLIN); + ListBox1->Items->Add(" "); + } + } + else + ShowMessage("Error en la lectura del fichero lineas.dat"); + +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::Driver1Click(TObject *Sender) +{ + DRVDat sDRVDat; + bool bCorrecto; + + bCorrecto=Transfer->LeerFichero("drivers.dat","DRVDat"); + + if(bCorrecto) + { + ShowMessage("Lectura del fichero drivers.dat correcta"); + ListBox1->Clear(); + while( !strcmp(sDRVDat.cNombreDriverDRV,"0") ) + { + //Mostramos la Estructura + ListBox1->Items->Add("DATOS DE DRIVERS"); + ListBox1->Items->Add("================"); + ListBox1->Items->Add(sDRVDat.cNombreDriverDRV); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sDRVDat.cTamBufferTraDRV); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sDRVDat.cTamBufferRecDRV); + ListBox1->Items->Add(" "); + ListBox1->Items->Add(sDRVDat.cTamPeriodicaDRV); + ListBox1->Items->Add(" "); + } + } + else + ShowMessage("Error en la lectura del fichero drivers.dat"); + +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::LeerOcasional1Click(TObject *Sender) +{ + BYTE byi; + char Texto[128]; + int nRespuesta; + + memset(Texto,0,sizeof(Texto)); + + ListBox1->Clear(); + for(byi=1;byi<17;byi++) + { + nRespuesta=Transfer->LeerOcasional(Texto,byi); + ListBox1->Items->Add(Texto); + } + + if(!nRespuesta) + ShowMessage("Todo fue correcto"); + else + ShowMessage("Hubo un error"); +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::EscribirOcasional1Click(TObject *Sender) +{ + int nResultado; + char sSentencia[TAM_MAXIMO_OCASIONAL]; + + Formatea(sSentencia,128,"%c%s%s%c%s%s",'2',"BBRPEN","*12",'A',"13","Teclee Codigo"); + nResultado=Transfer->EscribirOcasional(sSentencia,7); + + if(!nResultado) + ShowMessage("Todo fue correcto"); + else + ShowMessage("Hubo un Error"); +} + +//--------------------------------------------------------------------------- +void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key) +{ + //Si le da al Return cogemos la instruccion + if(Key=='\r') + { + strcpy(sDatoTecleado,Edit1->Text.c_str()); + switch(byOpcion) + { + case OpConductor: ConductorClick(Sender); + break; + case OpCisterna: CisternaClick(Sender); + break; + case OpTractor: TractorClick(Sender); + break; + case OpSuministrador: SuministradorClick(Sender); + break; + case OpPedidos: PedidosClick(Sender); + break; + } + Edit1->Text=""; + Label1->Visible=false; + Edit1->Visible=false; + //Inicializamos el codigo de teclado + strcpy(sDatoTecleado,""); + if(bTodos) + TodosClick(Sender); + } +} + +//--------------------------------------------------------------------------- + +void __fastcall TForm1::CargarThreads1Click(TObject *Sender) +{ + BYTE byResultado; + + Transfer1Click(Sender); + byResultado=0; + byResultado=CargarThreads(); + + if(byResultado) + ShowMessage("Hubo un Error cargando los threads"); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::FinalizarThreads1Click(TObject *Sender) +{ + TerminarThread(HDAUT); + TerminarThread(HDPSE); + TerminarThread(HDPSS); + TerminarThread(HDALB); + TerminarThread(HDContadores); +} +//--------------------------------------------------------------------------- + diff --git a/Esergui -BDE utilizando API/EserguiBDE/Principal.dfm b/Esergui -BDE utilizando API/EserguiBDE/Principal.dfm new file mode 100644 index 0000000..477bbb0 Binary files /dev/null and b/Esergui -BDE utilizando API/EserguiBDE/Principal.dfm differ diff --git a/Esergui -BDE utilizando API/EserguiBDE/Principal.h b/Esergui -BDE utilizando API/EserguiBDE/Principal.h new file mode 100644 index 0000000..9d30604 --- /dev/null +++ b/Esergui -BDE utilizando API/EserguiBDE/Principal.h @@ -0,0 +1,130 @@ +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include "Esergui.h" +#include "string.h" +#include "stdlib.h" +#include "stdio.h" + +//--------------------------------------------------------------------------- +#ifndef PrincipalH +#define PrincipalH +#define N_TABLA 5 +#define N_SUM 4 +#define N_PED 5 +#define N_CON 8 +#define N_CIS 20 +#define N_TRA 10 +#define N_CAMPO N_CON+N_CIS+N_TRA+N_SUM+N_PED +#define NUM_MAX_TAM_BUFFER 10 +#define NUM_MAX_TECLAS 17 +#define OpConductor 1 +#define OpCisterna 2 +#define OpTractor 3 +#define OpSuministrador 4 +#define OpPedidos 5 +//--------------------------------------------------------------------------- +class TForm1 : public TForm +{ +__published: // IDE-managed Components + TMainMenu *MainMenu1; + TMenuItem *Informaciondeestructura1; + TMenuItem *InformacionEstructura1; + TMenuItem *Salir1; + TMenuItem *Autorizacion1; + TMenuItem *Conductor; + TMenuItem *Tractor; + TMenuItem *Comprobar1; + TMenuItem *Cisterna; + TMenuItem *Suministrador; + TMenuItem *Pedidos; + TMenuItem *Todos; + TListBox *ListBox1; + TMenuItem *ComprobarPeso1; + TMenuItem *ComprobarPeso2; + TMenuItem *DistribuirCarga1; + TMenuItem *ComprobarEstado1; + TButton *Button1; + TMenuItem *PesodeEntrada1; + TMenuItem *PesoEntrada1; + TMenuItem *PesodeSalida1; + TMenuItem *PesodeSalida2; + TMenuItem *Albaran1; + TMenuItem *Albaran2; + TMenuItem *Lecturafichero1; + TMenuItem *Transfer1; + TMenuItem *Elemento1; + TMenuItem *Linea1; + TMenuItem *Driver1; + TMenuItem *LeerOcasional1; + TMenuItem *EscribirOcasional1; + TLabel *Label1; + TEdit *Edit1; + TMenuItem *Dialogo1; + TMenuItem *Autorizacion2; + TMenuItem *PesodeEntrada2; + TMenuItem *PesodeSalida3; + TMenuItem *Albaran3; + TMenuItem *CargarThreads1; + TLabel *Label2; + TLabel *Label3; + TLabel *Label4; + TLabel *Label5; + TEdit *Edit2; + TEdit *Edit3; + TEdit *Edit4; + TEdit *Edit5; + void __fastcall Salir1Click(TObject *Sender); + void __fastcall ConductorClick(TObject *Sender); + void __fastcall FormCreate(TObject *Sender); + void __fastcall FormClose(TObject *Sender, TCloseAction &Action); + void __fastcall InformacionEstructura1Click(TObject *Sender); + void __fastcall CisternaClick(TObject *Sender); + void __fastcall TractorClick(TObject *Sender); + void __fastcall SuministradorClick(TObject *Sender); + void __fastcall PedidosClick(TObject *Sender); + void __fastcall TodosClick(TObject *Sender); + void __fastcall ComprobarPeso1Click(TObject *Sender); + void __fastcall ComprobarPeso2Click(TObject *Sender); + void __fastcall DistribuirCarga1Click(TObject *Sender); + void __fastcall ComprobarEstado1Click(TObject *Sender); + void __fastcall Button1Click(TObject *Sender); + void __fastcall ComprobarEstado2Click(TObject *Sender); + void __fastcall PesoEntrada1Click(TObject *Sender); + void __fastcall PesodeSalida2Click(TObject *Sender); + void __fastcall Albaran2Click(TObject *Sender); + void __fastcall Transfer1Click(TObject *Sender); + void __fastcall Elemento1Click(TObject *Sender); + void __fastcall Linea1Click(TObject *Sender); + void __fastcall Driver1Click(TObject *Sender); + void __fastcall LeerOcasional1Click(TObject *Sender); + void __fastcall EscribirOcasional1Click(TObject *Sender); + void __fastcall Edit1KeyPress(TObject *Sender, char &Key); + void __fastcall CargarThreads1Click(TObject *Sender); + void __fastcall FinalizarThreads1Click(TObject *Sender); + +private: // User declarations + char sDatoTecleado[NUM_MAX_TECLAS]; + BYTE byOpcion; + bool bTodos; + +public: // User declarations + TPanel *Panel[N_TABLA+N_CAMPO]; + HANDLE HDContadores,HDAUT,HDPSE,HDPSS,HDALB; + BYTE Error; + hDBIDb hBaseDatos; + void BoolACadena(bool bVariable,char *cadena); + void MuestraLista(char *cadena); + void MuestraError(int Error); + bool LeerFichero(char *NombreFichero,char *NombreEstructura); + __fastcall TForm1(TComponent* Owner); + __fastcall ~TForm1(); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TForm1 *Form1; +//--------------------------------------------------------------------------- +#endif diff --git a/Esergui -BDE utilizando API/EserguiBDE/PruebaError.txt b/Esergui -BDE utilizando API/EserguiBDE/PruebaError.txt new file mode 100644 index 0000000..6f38055 --- /dev/null +++ b/Esergui -BDE utilizando API/EserguiBDE/PruebaError.txt @@ -0,0 +1,547 @@ +27/06/2001 13:33:52 Error Dbidif sin información +27/06/2001 13:33:52 Error Dbidif sin información +27/06/2001 13:33:52 Error Dbidif sin información +27/06/2001 13:33:52 Error Dbidif sin información +27/06/2001 13:37:34 Prueba de Error +27/06/2001 13:37:35 Error Dbidif sin información +27/06/2001 13:37:35 Error Dbidif sin información +27/06/2001 13:37:35 Error Dbidif sin información +27/06/2001 13:37:35 Error Dbidif sin información +27/06/2001 13:46:44 Prueba de Error +27/06/2001 13:46:46 Error Dbidif sin información +27/06/2001 13:46:46 Error Dbidif sin información +27/06/2001 13:46:46 Error Dbidif sin información +27/06/2001 13:46:46 Error Dbidif sin información +27/06/2001 13:49:21 Prueba de Error +27/06/2001 13:54:08 Prueba de Error +27/06/2001 13:57:25 Prueba de Error +27/06/2001 14:00:26 Prueba de Error +27/06/2001 14:05:12 Prueba de Error +27/06/2001 14:08:35 Prueba de Error +27/06/2001 16:21:58 Prueba de Error +27/06/2001 16:27:08 Prueba de Error +27/06/2001 16:30:32 Prueba de Error +27/06/2001 16:32:52 Prueba de Error +27/06/2001 16:35:33 Prueba de Error +27/06/2001 16:40:15 Prueba de Error +27/06/2001 16:42:28 Prueba de Error +27/06/2001 16:43:48 Prueba de Error +27/06/2001 16:44:36 Prueba de Error +27/06/2001 16:47:46 Prueba de Error +27/06/2001 16:49:01 Prueba de Error +27/06/2001 16:51:38 Prueba de Error +27/06/2001 16:53:35 Prueba de Error +27/06/2001 16:56:09 Prueba de Error +27/06/2001 17:01:58 Prueba de Error +27/06/2001 17:03:28 Prueba de Error +27/06/2001 17:06:46 Prueba de Error +27/06/2001 17:10:32 Prueba de Error +27/06/2001 17:22:35 Prueba de Error +27/06/2001 17:27:03 Prueba de Error +27/06/2001 17:44:07 Prueba de Error +27/06/2001 17:46:50 Prueba de Error +29/06/2001 10:38:53 Prueba de Error +29/06/2001 10:44:50 Prueba de Error +02/07/2001 09:59:05 Prueba de Error +02/07/2001 10:09:39 Prueba de Error +02/07/2001 10:14:35 Prueba de Error +02/07/2001 10:17:24 Prueba de Error +02/07/2001 10:26:05 Prueba de Error +02/07/2001 10:35:55 Prueba de Error +02/07/2001 10:37:38 Prueba de Error +02/07/2001 10:38:47 Prueba de Error +02/07/2001 10:41:38 Prueba de Error +02/07/2001 11:11:24 Prueba de Error +02/07/2001 11:14:15 Prueba de Error +02/07/2001 11:16:31 Prueba de Error +02/07/2001 11:19:23 Prueba de Error +02/07/2001 11:20:42 Prueba de Error +02/07/2001 11:29:55 Prueba de Error +02/07/2001 11:33:12 Prueba de Error +02/07/2001 11:35:55 Prueba de Error +02/07/2001 11:56:50 Prueba de Error +02/07/2001 12:06:40 Prueba de Error +02/07/2001 12:34:40 Prueba de Error +02/07/2001 12:42:31 Prueba de Error +02/07/2001 12:45:31 Prueba de Error +02/07/2001 12:46:34 Prueba de Error +02/07/2001 12:50:01 Prueba de Error +02/07/2001 12:52:36 Prueba de Error +02/07/2001 12:56:40 Prueba de Error +02/07/2001 12:57:41 Prueba de Error +02/07/2001 13:00:19 Prueba de Error +02/07/2001 13:01:02 Prueba de Error +02/07/2001 13:02:29 Prueba de Error +02/07/2001 13:10:20 Prueba de Error +02/07/2001 14:01:34 Prueba de Error +02/07/2001 14:07:33 Prueba de Error +04/07/2001 18:36:09 Prueba de Error +04/07/2001 18:37:07 Prueba de Error +04/07/2001 18:38:34 Prueba de Error +04/07/2001 18:39:10 Prueba de Error +04/07/2001 18:39:33 Prueba de Error +04/07/2001 19:05:16 Prueba de Error +04/07/2001 19:10:35 Prueba de Error +04/07/2001 19:12:52 Prueba de Error +05/07/2001 08:39:27 Prueba de Error +05/07/2001 08:40:21 Prueba de Error +05/07/2001 08:42:09 Prueba de Error +05/07/2001 08:50:28 Prueba de Error +05/07/2001 08:59:20 Prueba de Error +05/07/2001 09:00:36 Prueba de Error +05/07/2001 09:01:35 Prueba de Error +05/07/2001 09:02:23 Prueba de Error +05/07/2001 09:03:10 Prueba de Error +05/07/2001 09:05:15 Prueba de Error +05/07/2001 09:20:14 Prueba de Error +05/07/2001 09:33:52 Prueba de Error +05/07/2001 09:35:51 Prueba de Error +05/07/2001 10:08:19 Prueba de Error +05/07/2001 10:09:59 Prueba de Error +05/07/2001 10:10:22 Prueba de Error +05/07/2001 10:26:36 Prueba de Error +05/07/2001 10:28:15 Prueba de Error +05/07/2001 10:29:36 Prueba de Error +05/07/2001 10:41:01 Prueba de Error +05/07/2001 10:44:15 Prueba de Error +05/07/2001 10:49:21 Prueba de Error +05/07/2001 10:51:32 Prueba de Error +05/07/2001 10:53:40 Prueba de Error +05/07/2001 11:03:35 Prueba de Error +05/07/2001 11:05:23 Prueba de Error +05/07/2001 11:06:01 Prueba de Error +05/07/2001 11:08:29 Prueba de Error +05/07/2001 11:22:06 Prueba de Error +05/07/2001 11:24:22 Prueba de Error +05/07/2001 11:26:52 Prueba de Error +05/07/2001 11:27:44 Prueba de Error +05/07/2001 11:28:19 Prueba de Error +05/07/2001 11:29:17 Prueba de Error +05/07/2001 11:32:29 Prueba de Error +05/07/2001 11:39:29 Prueba de Error +05/07/2001 11:41:15 Prueba de Error +05/07/2001 11:44:12 Prueba de Error +05/07/2001 11:46:05 Prueba de Error +05/07/2001 11:50:00 Prueba de Error +05/07/2001 12:30:25 Prueba de Error +05/07/2001 12:43:10 Prueba de Error +05/07/2001 13:39:18 Prueba de Error +05/07/2001 13:59:15 Prueba de Error +05/07/2001 16:54:38 Prueba de Error +05/07/2001 16:56:39 Prueba de Error +05/07/2001 17:00:40 Prueba de Error +05/07/2001 17:19:08 Prueba de Error +05/07/2001 17:44:52 Prueba de Error +05/07/2001 17:48:10 Prueba de Error +05/07/2001 17:55:20 Prueba de Error +05/07/2001 17:58:02 Prueba de Error +05/07/2001 18:01:35 Prueba de Error +05/07/2001 18:03:30 Prueba de Error +05/07/2001 18:05:32 Prueba de Error +05/07/2001 18:07:58 Prueba de Error +05/07/2001 18:10:01 Prueba de Error +05/07/2001 18:12:35 Prueba de Error +05/07/2001 18:19:01 Prueba de Error +05/07/2001 18:32:53 Prueba de Error +05/07/2001 18:39:31 Prueba de Error +05/07/2001 18:45:37 Prueba de Error +05/07/2001 18:49:28 Prueba de Error +05/07/2001 18:51:07 Prueba de Error +05/07/2001 18:55:28 Prueba de Error +05/07/2001 18:58:06 Prueba de Error +05/07/2001 19:08:48 Prueba de Error +05/07/2001 19:11:01 Prueba de Error +05/07/2001 19:15:01 Prueba de Error +06/07/2001 13:27:27 Prueba de Error +06/07/2001 13:30:06 Prueba de Error +06/07/2001 13:35:20 Prueba de Error +06/07/2001 13:37:17 Prueba de Error +06/07/2001 13:38:44 Prueba de Error +09/07/2001 09:51:21 Prueba de Error +09/07/2001 09:57:58 Prueba de Error +09/07/2001 09:59:30 Prueba de Error +09/07/2001 10:00:36 Prueba de Error +09/07/2001 10:08:41 Prueba de Error +09/07/2001 10:12:35 Prueba de Error +09/07/2001 10:14:52 Prueba de Error +09/07/2001 10:18:42 Prueba de Error +09/07/2001 10:20:15 Prueba de Error +09/07/2001 10:26:07 Prueba de Error +09/07/2001 10:28:05 Prueba de Error +09/07/2001 10:33:11 Prueba de Error +09/07/2001 10:34:19 Prueba de Error +09/07/2001 10:35:30 Prueba de Error +09/07/2001 10:36:02 Prueba de Error +09/07/2001 10:47:04 Prueba de Error +09/07/2001 10:48:59 Prueba de Error +09/07/2001 10:50:24 Prueba de Error +09/07/2001 10:50:52 Prueba de Error +09/07/2001 10:53:22 Prueba de Error +09/07/2001 10:54:32 Prueba de Error +09/07/2001 10:56:51 Prueba de Error +09/07/2001 10:58:11 Prueba de Error +09/07/2001 10:59:27 Prueba de Error +09/07/2001 11:04:06 Prueba de Error +09/07/2001 11:08:26 Prueba de Error +09/07/2001 11:09:22 Prueba de Error +09/07/2001 11:10:17 Prueba de Error +09/07/2001 11:11:48 Prueba de Error +09/07/2001 11:25:00 Prueba de Error +09/07/2001 11:26:13 Prueba de Error +09/07/2001 11:26:53 Prueba de Error +09/07/2001 11:28:53 Prueba de Error +09/07/2001 11:29:23 Prueba de Error +09/07/2001 12:15:34 Prueba de Error +09/07/2001 12:16:55 Prueba de Error +09/07/2001 12:19:23 Prueba de Error +09/07/2001 12:21:27 Prueba de Error +09/07/2001 12:25:21 Prueba de Error +09/07/2001 12:28:34 Prueba de Error +09/07/2001 12:30:17 Prueba de Error +09/07/2001 12:33:20 Prueba de Error +09/07/2001 12:36:42 Prueba de Error +09/07/2001 12:47:11 Prueba de Error +09/07/2001 12:47:39 Prueba de Error +09/07/2001 12:48:24 Prueba de Error +09/07/2001 12:51:00 Prueba de Error +09/07/2001 12:52:31 Prueba de Error +09/07/2001 13:00:23 Prueba de Error +09/07/2001 13:03:13 Prueba de Error +09/07/2001 13:05:12 Prueba de Error +09/07/2001 13:06:32 Prueba de Error +09/07/2001 13:47:11 Prueba de Error +09/07/2001 13:49:42 Prueba de Error +09/07/2001 13:52:49 Prueba de Error +09/07/2001 13:54:44 Prueba de Error +09/07/2001 13:59:20 Prueba de Error +09/07/2001 14:01:26 Prueba de Error +09/07/2001 14:03:32 Prueba de Error +09/07/2001 14:05:58 Prueba de Error +09/07/2001 14:08:46 Prueba de Error +09/07/2001 16:26:07 Prueba de Error +09/07/2001 19:04:42 Prueba de Error +09/07/2001 19:05:31 Prueba de Error +09/07/2001 19:06:14 Prueba de Error +09/07/2001 19:07:30 Prueba de Error +09/07/2001 19:09:16 Prueba de Error +10/07/2001 09:47:49 Prueba de Error +10/07/2001 09:48:50 Prueba de Error +10/07/2001 11:06:00 Prueba de Error +10/07/2001 12:40:58 Prueba de Error +10/07/2001 13:05:35 Prueba de Error +10/07/2001 13:20:53 Prueba de Error +10/07/2001 13:42:22 Prueba de Error +10/07/2001 13:44:30 Prueba de Error +10/07/2001 13:46:07 Prueba de Error +10/07/2001 13:50:58 Prueba de Error +10/07/2001 13:52:44 Prueba de Error +10/07/2001 13:56:35 Prueba de Error +10/07/2001 16:47:38 Prueba de Error +10/07/2001 16:48:46 Prueba de Error +10/07/2001 16:52:12 Prueba de Error +10/07/2001 16:53:12 Prueba de Error +10/07/2001 16:56:54 Prueba de Error +10/07/2001 16:59:59 Prueba de Error +10/07/2001 17:03:16 Prueba de Error +10/07/2001 17:06:12 Prueba de Error +10/07/2001 17:08:34 Prueba de Error +10/07/2001 17:10:29 Prueba de Error +10/07/2001 17:15:28 Prueba de Error +10/07/2001 17:17:03 Prueba de Error +10/07/2001 17:17:48 Prueba de Error +10/07/2001 17:18:16 Prueba de Error +10/07/2001 17:22:03 Prueba de Error +10/07/2001 17:24:00 Prueba de Error +10/07/2001 17:29:19 Prueba de Error +10/07/2001 17:32:07 Prueba de Error +10/07/2001 17:35:06 Prueba de Error +10/07/2001 17:38:18 Prueba de Error +10/07/2001 17:39:45 Prueba de Error +10/07/2001 17:42:16 Prueba de Error +10/07/2001 17:44:07 Prueba de Error +10/07/2001 17:48:13 Prueba de Error +10/07/2001 17:51:05 Prueba de Error +10/07/2001 17:52:17 Prueba de Error +10/07/2001 17:53:03 Prueba de Error +10/07/2001 17:54:28 Prueba de Error +10/07/2001 17:55:36 Prueba de Error +10/07/2001 17:58:58 Prueba de Error +10/07/2001 17:59:30 Prueba de Error +10/07/2001 18:02:42 Prueba de Error +10/07/2001 18:05:21 Prueba de Error +10/07/2001 18:09:30 Prueba de Error +10/07/2001 18:13:56 Prueba de Error +10/07/2001 18:18:10 Prueba de Error +10/07/2001 18:19:32 Prueba de Error +10/07/2001 18:22:25 Prueba de Error +10/07/2001 18:24:33 Prueba de Error +10/07/2001 18:25:32 Prueba de Error +10/07/2001 18:26:24 Prueba de Error +10/07/2001 18:26:48 Prueba de Error +10/07/2001 18:27:08 Prueba de Error +10/07/2001 18:27:42 Prueba de Error +10/07/2001 18:29:43 Prueba de Error +10/07/2001 18:30:21 Prueba de Error +10/07/2001 18:31:01 Prueba de Error +10/07/2001 18:31:53 Prueba de Error +10/07/2001 18:33:13 Prueba de Error +10/07/2001 18:36:00 Prueba de Error +10/07/2001 18:36:50 Prueba de Error +10/07/2001 18:38:21 Prueba de Error +10/07/2001 18:39:04 Prueba de Error +10/07/2001 18:39:59 Prueba de Error +10/07/2001 18:40:18 Prueba de Error +10/07/2001 18:40:44 Prueba de Error +10/07/2001 18:41:40 Prueba de Error +10/07/2001 18:43:31 Prueba de Error +10/07/2001 18:45:22 Prueba de Error +10/07/2001 18:48:17 Prueba de Error +10/07/2001 18:53:30 Prueba de Error +10/07/2001 18:54:49 Prueba de Error +10/07/2001 18:55:50 Prueba de Error +10/07/2001 18:56:15 Prueba de Error +10/07/2001 18:56:33 Prueba de Error +10/07/2001 18:57:46 Prueba de Error +10/07/2001 18:59:22 Prueba de Error +10/07/2001 19:02:14 Prueba de Error +10/07/2001 19:03:50 Prueba de Error +10/07/2001 19:08:40 Prueba de Error +10/07/2001 19:09:21 Prueba de Error +10/07/2001 19:09:44 Prueba de Error +10/07/2001 19:10:08 Prueba de Error +10/07/2001 19:10:44 Prueba de Error +10/07/2001 19:11:21 Prueba de Error +10/07/2001 19:11:47 Prueba de Error +10/07/2001 19:13:43 Prueba de Error +10/07/2001 19:14:44 Prueba de Error +10/07/2001 19:15:15 Prueba de Error +10/07/2001 19:15:37 Prueba de Error +10/07/2001 19:21:29 Prueba de Error +10/07/2001 19:23:18 Prueba de Error +10/07/2001 19:23:47 Prueba de Error +10/07/2001 19:26:28 Prueba de Error +10/07/2001 19:29:37 Prueba de Error +10/07/2001 19:31:25 Prueba de Error +11/07/2001 09:53:43 Prueba de Error +11/07/2001 10:02:55 Prueba de Error +11/07/2001 10:07:55 Prueba de Error +11/07/2001 10:13:33 Prueba de Error +11/07/2001 10:14:39 Prueba de Error +11/07/2001 10:15:50 Prueba de Error +11/07/2001 10:20:36 Prueba de Error +11/07/2001 10:22:14 Prueba de Error +11/07/2001 10:23:04 Prueba de Error +11/07/2001 10:23:44 Prueba de Error +11/07/2001 10:25:17 Prueba de Error +11/07/2001 10:27:16 Prueba de Error +11/07/2001 10:28:22 Prueba de Error +11/07/2001 10:28:56 Prueba de Error +11/07/2001 10:31:20 Prueba de Error +11/07/2001 10:34:43 Prueba de Error +11/07/2001 10:43:43 Prueba de Error +11/07/2001 10:44:38 Prueba de Error +11/07/2001 10:45:52 Prueba de Error +11/07/2001 10:46:34 Prueba de Error +11/07/2001 10:46:47 Prueba de Error +11/07/2001 10:48:16 Prueba de Error +11/07/2001 10:54:49 Prueba de Error +11/07/2001 10:56:58 Prueba de Error +11/07/2001 10:58:42 Prueba de Error +11/07/2001 11:44:30 Prueba de Error +11/07/2001 12:08:35 Prueba de Error +11/07/2001 12:09:50 Prueba de Error +11/07/2001 12:12:42 Prueba de Error +11/07/2001 12:13:01 Prueba de Error +11/07/2001 12:14:04 Prueba de Error +11/07/2001 12:18:21 Prueba de Error +11/07/2001 12:18:48 Prueba de Error +11/07/2001 12:19:39 Prueba de Error +11/07/2001 12:19:55 Prueba de Error +11/07/2001 12:21:34 Prueba de Error +11/07/2001 12:23:14 Prueba de Error +11/07/2001 12:25:19 Prueba de Error +11/07/2001 12:25:58 Prueba de Error +11/07/2001 12:32:16 Prueba de Error +11/07/2001 12:34:54 Prueba de Error +11/07/2001 12:37:39 Prueba de Error +11/07/2001 12:40:48 Prueba de Error +11/07/2001 12:42:35 Prueba de Error +11/07/2001 12:42:55 Prueba de Error +11/07/2001 12:44:21 Prueba de Error +11/07/2001 12:49:28 Prueba de Error +11/07/2001 12:57:22 Prueba de Error +11/07/2001 12:59:49 Prueba de Error +11/07/2001 13:00:52 Prueba de Error +11/07/2001 13:19:22 Prueba de Error +11/07/2001 13:20:33 Prueba de Error +11/07/2001 13:29:07 Prueba de Error +11/07/2001 13:35:03 Prueba de Error +11/07/2001 13:37:12 Prueba de Error +11/07/2001 13:38:09 Prueba de Error +11/07/2001 13:39:35 Prueba de Error +11/07/2001 13:40:36 Prueba de Error +11/07/2001 13:42:51 Prueba de Error +11/07/2001 13:44:04 Prueba de Error +11/07/2001 13:46:05 Prueba de Error +11/07/2001 13:47:03 Prueba de Error +11/07/2001 13:49:14 Prueba de Error +11/07/2001 14:26:17 Prueba de Error +11/07/2001 14:35:49 Prueba de Error +11/07/2001 14:37:22 Prueba de Error +11/07/2001 16:26:46 Prueba de Error +11/07/2001 16:28:37 Prueba de Error +11/07/2001 16:31:16 Prueba de Error +11/07/2001 16:33:06 Prueba de Error +11/07/2001 17:12:21 Prueba de Error +11/07/2001 17:12:59 Prueba de Error +11/07/2001 17:13:56 Prueba de Error +11/07/2001 17:15:38 Prueba de Error +11/07/2001 17:26:35 Prueba de Error +11/07/2001 17:28:25 Error String Number is out of range. (9985,39:1) +11/07/2001 17:31:16 Prueba de Error +11/07/2001 17:31:48 Prueba de Error +11/07/2001 17:33:54 Prueba de Error +11/07/2001 17:34:50 Prueba de Error +11/07/2001 17:36:29 Prueba de Error +11/07/2001 17:38:50 Prueba de Error +11/07/2001 17:41:50 Prueba de Error +11/07/2001 17:42:06 Error Info Table is busy. (10243,40:3). 1) . 2) . 3) . 4) +11/07/2001 17:44:31 Prueba de Error +11/07/2001 17:45:30 Error String Number is out of range. (9985,39:1) +11/07/2001 17:49:28 Prueba de Error +11/07/2001 17:51:05 Prueba de Error +11/07/2001 17:51:32 Prueba de Error +11/07/2001 17:52:34 Prueba de Error +11/07/2001 17:53:30 Error String Number is out of range. (9985,39:1) +11/07/2001 17:58:06 Prueba de Error +11/07/2001 17:59:20 Prueba de Error +11/07/2001 18:08:21 Prueba de Error +11/07/2001 18:10:35 Prueba de Error +11/07/2001 18:14:18 Prueba de Error +11/07/2001 18:16:05 Prueba de Error +11/07/2001 18:17:23 Prueba de Error +11/07/2001 18:21:46 Prueba de Error +11/07/2001 18:25:51 Prueba de Error +11/07/2001 18:27:18 Prueba de Error +11/07/2001 18:31:27 Prueba de Error +11/07/2001 18:35:20 Prueba de Error +11/07/2001 19:00:04 Prueba de Error +11/07/2001 19:02:01 Prueba de Error +11/07/2001 19:02:21 Error Info Table is busy. (10243,40:3). 1) . 2) . 3) . 4) +11/07/2001 19:03:07 Prueba de Error +11/07/2001 19:07:07 Prueba de Error +12/07/2001 10:01:56 Prueba de Error +12/07/2001 10:02:56 Prueba de Error +12/07/2001 10:05:06 Prueba de Error +12/07/2001 11:21:23 Prueba de Error +12/07/2001 11:24:18 Prueba de Error +12/07/2001 11:25:10 Prueba de Error +12/07/2001 11:26:22 Prueba de Error +12/07/2001 11:28:38 Prueba de Error +12/07/2001 11:32:39 Prueba de Error +12/07/2001 11:35:55 Prueba de Error +12/07/2001 11:43:59 Prueba de Error +12/07/2001 11:47:54 Prueba de Error +12/07/2001 11:50:55 Prueba de Error +12/07/2001 11:53:41 Prueba de Error +12/07/2001 12:05:42 Prueba de Error +12/07/2001 12:41:04 Prueba de Error +12/07/2001 12:46:29 Prueba de Error +12/07/2001 12:54:59 Prueba de Error +12/07/2001 13:12:04 Prueba de Error +12/07/2001 13:14:03 Prueba de Error +12/07/2001 13:14:45 Prueba de Error +13/07/2001 08:56:12 Prueba de Error +13/07/2001 08:56:52 Prueba de Error +13/07/2001 08:57:19 Prueba de Error +13/07/2001 08:57:52 Prueba de Error +13/07/2001 08:59:05 Prueba de Error +13/07/2001 09:00:37 Prueba de Error +13/07/2001 09:01:32 Prueba de Error +13/07/2001 09:02:33 Prueba de Error +13/07/2001 09:04:42 Prueba de Error +13/07/2001 09:05:48 Prueba de Error +13/07/2001 09:08:29 Prueba de Error +13/07/2001 09:09:04 Prueba de Error +13/07/2001 09:10:19 Prueba de Error +13/07/2001 09:13:34 Prueba de Error +13/07/2001 09:14:40 Prueba de Error +13/07/2001 09:15:39 Prueba de Error +13/07/2001 09:17:21 Prueba de Error +13/07/2001 09:19:38 Prueba de Error +13/07/2001 09:22:19 Prueba de Error +13/07/2001 09:22:57 Prueba de Error +13/07/2001 09:24:14 Prueba de Error +13/07/2001 09:25:05 Prueba de Error +13/07/2001 09:28:08 Prueba de Error +13/07/2001 09:29:04 Prueba de Error +13/07/2001 09:30:26 Prueba de Error +13/07/2001 09:31:11 Prueba de Error +13/07/2001 09:31:37 Prueba de Error +13/07/2001 09:32:58 Prueba de Error +13/07/2001 09:33:39 Prueba de Error +13/07/2001 09:36:06 Prueba de Error +13/07/2001 09:37:43 Prueba de Error +13/07/2001 09:39:56 Prueba de Error +13/07/2001 09:41:37 Prueba de Error +13/07/2001 09:44:34 Prueba de Error +13/07/2001 09:48:00 Prueba de Error +13/07/2001 09:49:37 Prueba de Error +13/07/2001 09:52:15 Prueba de Error +13/07/2001 09:55:20 Prueba de Error +13/07/2001 09:56:00 Prueba de Error +13/07/2001 09:56:40 Prueba de Error +13/07/2001 09:57:30 Prueba de Error +13/07/2001 09:58:36 Prueba de Error +13/07/2001 09:59:39 Prueba de Error +13/07/2001 10:01:18 Prueba de Error +13/07/2001 10:03:45 Prueba de Error +13/07/2001 10:08:30 Prueba de Error +13/07/2001 10:09:20 Prueba de Error +13/07/2001 10:11:53 Prueba de Error +13/07/2001 10:14:02 Prueba de Error +13/07/2001 10:14:44 Prueba de Error +13/07/2001 10:16:55 Prueba de Error +13/07/2001 10:18:49 Prueba de Error +13/07/2001 10:19:42 Prueba de Error +13/07/2001 10:26:29 Prueba de Error +13/07/2001 11:28:31 Prueba de Error +13/07/2001 11:31:13 Prueba de Error +13/07/2001 11:41:30 Prueba de Error +13/07/2001 12:08:07 Prueba de Error +13/07/2001 12:11:48 Prueba de Error +13/07/2001 12:31:00 Prueba de Error +13/07/2001 12:37:56 Prueba de Error +13/07/2001 12:42:29 Prueba de Error +13/07/2001 12:45:21 Prueba de Error +13/07/2001 13:09:58 Prueba de Error +13/07/2001 13:15:49 Prueba de Error +13/07/2001 13:35:05 Prueba de Error +13/07/2001 14:06:09 Prueba de Error +13/07/2001 14:09:29 Prueba de Error +13/07/2001 14:18:41 Prueba de Error +13/07/2001 14:27:23 Prueba de Error +13/07/2001 14:30:29 Prueba de Error +13/07/2001 14:31:13 Prueba de Error +16/07/2001 09:45:39 Prueba de Error +16/07/2001 09:57:11 Prueba de Error +16/07/2001 10:04:12 Prueba de Error +16/07/2001 10:15:51 Prueba de Error +16/07/2001 10:18:11 Prueba de Error +16/07/2001 10:24:23 Prueba de Error +16/07/2001 10:26:27 Prueba de Error +16/07/2001 10:28:37 Prueba de Error +16/07/2001 10:31:07 Prueba de Error +16/07/2001 10:34:51 Prueba de Error +16/07/2001 10:37:29 Prueba de Error +16/07/2001 10:42:17 Prueba de Error +16/07/2001 10:44:54 Prueba de Error +16/07/2001 10:59:36 Prueba de Error +16/07/2001 11:35:50 Prueba de Error +16/07/2001 11:37:06 Prueba de Error +16/07/2001 11:41:03 Prueba de Error +16/07/2001 11:44:41 Prueba de Error +16/07/2001 11:48:07 Prueba de Error +16/07/2001 11:53:27 Prueba de Error +16/07/2001 11:54:59 Prueba de Error +16/07/2001 11:57:06 Prueba de Error diff --git a/Esergui -BDE utilizando API/EserguiBDE/Report.cpp b/Esergui -BDE utilizando API/EserguiBDE/Report.cpp new file mode 100644 index 0000000..b92e5af --- /dev/null +++ b/Esergui -BDE utilizando API/EserguiBDE/Report.cpp @@ -0,0 +1,14 @@ +//---------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "Report.h" +//---------------------------------------------------------------------------- +#pragma resource "*.dfm" +TQuickReport1 *QuickReport1; +//---------------------------------------------------------------------------- +__fastcall TQuickReport1::TQuickReport1(TComponent* Owner) + : TQuickRep(Owner) +{ +} +//---------------------------------------------------------------------------- diff --git a/Esergui -BDE utilizando API/EserguiBDE/Report.dfm b/Esergui -BDE utilizando API/EserguiBDE/Report.dfm new file mode 100644 index 0000000..14853b5 Binary files /dev/null and b/Esergui -BDE utilizando API/EserguiBDE/Report.dfm differ diff --git a/Esergui -BDE utilizando API/EserguiBDE/Report.h b/Esergui -BDE utilizando API/EserguiBDE/Report.h new file mode 100644 index 0000000..e0ea69f --- /dev/null +++ b/Esergui -BDE utilizando API/EserguiBDE/Report.h @@ -0,0 +1,35 @@ +//---------------------------------------------------------------------------- +#ifndef ReportH +#define ReportH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +class TQuickReport1 : public TQuickRep +{ +__published: + TQRBand *ColumnHeaderBand1; + TQRBand *DetailBand1; + TQRBand *PageFooterBand1; + TQRBand *PageHeaderBand1; + TQRBand *SummaryBand1; + TQRBand *TitleBand1; + TQRLabel *QRLabel1; + TQRLabel *QRLabel2; + TQRLabel *QRLabel3; + TQRLabel *QRLabel4; + TQRLabel *QRLabel5; +private: +public: + __fastcall TQuickReport1::TQuickReport1(TComponent* Owner); +}; +//---------------------------------------------------------------------------- +extern TQuickReport1 *QuickReport1; +//---------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/Esergui -BDE utilizando API/EserguiBDE/Transfer.dat b/Esergui -BDE utilizando API/EserguiBDE/Transfer.dat new file mode 100644 index 0000000..a3b7a86 Binary files /dev/null and b/Esergui -BDE utilizando API/EserguiBDE/Transfer.dat differ diff --git a/Esergui -BDE utilizando API/EserguiBDE/cam_fich.dat b/Esergui -BDE utilizando API/EserguiBDE/cam_fich.dat new file mode 100644 index 0000000..96e032d --- /dev/null +++ b/Esergui -BDE utilizando API/EserguiBDE/cam_fich.dat @@ -0,0 +1,4 @@ +d:\oscar\esergui\esergui\drivers.dat +d:\oscar\esergui\esergui\elemento.dat +d:\oscar\esergui\esergui\lineas.dat +d:\oscar\esergui\esergui\transfer.dat diff --git a/InterBase.bpr b/InterBase.bpr new file mode 100644 index 0000000..1fe15a0 --- /dev/null +++ b/InterBase.bpr @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=3082 +CodePage=1252 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication= +RemoteHost= +RemotePath= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + + \ No newline at end of file diff --git a/InterBase.cpp b/InterBase.cpp new file mode 100644 index 0000000..0654d09 --- /dev/null +++ b/InterBase.cpp @@ -0,0 +1,22 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +USERES("InterBase.res"); +USEFORM("..\Unit1.cpp", Form1); +//--------------------------------------------------------------------------- +WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) +{ + try + { + Application->Initialize(); + Application->CreateForm(__classid(TForm1), &Form1); + Application->Run(); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + return 0; +} +//--------------------------------------------------------------------------- diff --git a/InterBase.exe b/InterBase.exe new file mode 100644 index 0000000..dcbddb5 Binary files /dev/null and b/InterBase.exe differ diff --git a/InterBase.res b/InterBase.res new file mode 100644 index 0000000..1392cb0 Binary files /dev/null and b/InterBase.res differ diff --git a/MySQL_ADO.cpp b/MySQL_ADO.cpp new file mode 100644 index 0000000..8edd892 --- /dev/null +++ b/MySQL_ADO.cpp @@ -0,0 +1,51 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop + +#include "MySQL_ADO.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma link "mySQLDbTables" +#pragma resource "*.dfm" +TForm1 *Form1; +//--------------------------------------------------------------------------- +__fastcall TForm1::TForm1(TComponent* Owner) + : TForm(Owner) +{ +} +//--------------------------------------------------------------------------- + + +void __fastcall TForm1::ADOTable1RecordChangeComplete( + TCustomADODataSet *DataSet, const TEventReason Reason, + const int RecordCount, const Error *Error, TEventStatus &EventStatus) +{ +/* + if ( Reason == erAddNew ) + ADOTable1->Refresh(); +*/ +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::Button1Click(TObject *Sender) +{ + ADOTable1->Refresh(); +/* +ADOTable1->Insert(); +ADOTable1->FieldByName("name")->AsString = "JODERING"; +ADOTable1->Post(); +*/ + +} +//--------------------------------------------------------------------------- + + +void __fastcall TForm1::Button2Click(TObject *Sender) +{ +// Query1->Refresh(); +} +//--------------------------------------------------------------------------- + + + diff --git a/MySQL_ADO.dfm b/MySQL_ADO.dfm new file mode 100644 index 0000000..91b6684 --- /dev/null +++ b/MySQL_ADO.dfm @@ -0,0 +1,317 @@ +object Form1: TForm1 + Left = 191 + Top = 117 + Width = 783 + Height = 540 + Caption = 'Form1' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + PixelsPerInch = 96 + TextHeight = 13 + object Splitter1: TSplitter + Left = 0 + Top = 265 + Width = 775 + Height = 3 + Cursor = crVSplit + Align = alTop + end + object DBGrid1: TDBGrid + Left = 0 + Top = 0 + Width = 775 + Height = 265 + Align = alTop + DataSource = DataSource1 + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -11 + TitleFont.Name = 'MS Sans Serif' + TitleFont.Style = [] + end + object Button1: TButton + Left = 656 + Top = 280 + Width = 75 + Height = 25 + Caption = 'Button1' + TabOrder = 1 + OnClick = Button1Click + end + object DBGrid2: TDBGrid + Left = 8 + Top = 272 + Width = 641 + Height = 225 + DataSource = DataSource2 + TabOrder = 2 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -11 + TitleFont.Name = 'MS Sans Serif' + TitleFont.Style = [] + end + object Button2: TButton + Left = 656 + Top = 312 + Width = 75 + Height = 25 + Caption = 'Button2' + TabOrder = 3 + OnClick = Button2Click + end + object ADOConnection1: TADOConnection + Connected = True + ConnectionString = + 'Provider=MSDASQL.1;Password=nuevo;Persist Security Info=True;Use' + + 'r ID=jd;Data Source=sample-MySQL;Mode=Read|Write;Connect Timeout' + + '=15;Extended Properties="DSN=sample-MySQL;DATABASE=test;SERVER=i' + + 'nfdj.com;UID=jd;PWD=nuevo;PORT=3306;OPTION=0;STMT=;";Locale Iden' + + 'tifier=3082' + LoginPrompt = False + Mode = cmReadWrite + Left = 520 + Top = 16 + end + object DataSource1: TDataSource + AutoEdit = False + DataSet = ADOTable1 + Left = 520 + Top = 48 + end + object ADOTable1: TADOTable + Connection = ADOConnection1 + CursorType = ctStatic + OnRecordChangeComplete = ADOTable1RecordChangeComplete + TableName = 'pet' + Left = 552 + Top = 80 + object ADOTable1name: TStringField + FieldName = 'name' + Size = 18 + end + object ADOTable1owner: TStringField + FieldName = 'owner' + Size = 16 + end + object ADOTable1species: TStringField + FieldName = 'species' + Size = 12 + end + object ADOTable1sex: TStringField + FieldName = 'sex' + FixedChar = True + Size = 1 + end + object ADOTable1birth: TDateField + FieldName = 'birth' + end + object ADOTable1death: TDateField + FieldName = 'death' + end + object ADOTable1id: TAutoIncField + AutoGenerateValue = arAutoInc + FieldName = 'id' + end + end + object DataSource2: TDataSource + DataSet = mySQLTable1 + Left = 112 + Top = 440 + end + object Table1: TTable + AutoRefresh = True + DatabaseName = 'SINPASWORD' + TableName = 'pet' + Left = 144 + Top = 416 + end + object Database1: TDatabase + AliasName = 'sample-MySQL' + DatabaseName = 'SINPASWORD' + LoginPrompt = False + Params.Strings = ( + 'DATABASE NAME=' + 'USER NAME=jd' + 'ODBC DSN=sample-MySQL' + 'OPEN MODE=READ/WRITE' + 'BATCH COUNT=200' + 'LANGDRIVER=' + 'MAX ROWS=-1' + 'SCHEMA CACHE DIR=' + 'SCHEMA CACHE SIZE=8' + 'SCHEMA CACHE TIME=-1' + 'SQLPASSTHRU MODE=SHARED AUTOCOMMIT' + 'SQLQRYMODE=' + 'ENABLE SCHEMA CACHE=FALSE' + 'ENABLE BCD=FALSE' + 'ROWSET SIZE=20' + 'BLOBS TO CACHE=64' + 'BLOB SIZE=32' + 'PASSWORD=nuevo') + SessionName = 'Default' + Left = 296 + Top = 440 + end + object Query1: TQuery + AutoRefresh = True + DatabaseName = 'SINPASWORD' + RequestLive = True + SQL.Strings = ( + 'select * from pet' + 'order by name') + UpdateObject = UpdateSQL1 + Left = 664 + Top = 384 + object Query1name: TStringField + FieldName = 'name' + Origin = 'SINPASWORD.pet.name' + end + object Query1owner: TStringField + FieldName = 'owner' + Origin = 'SINPASWORD.pet.owner' + end + object Query1species: TStringField + FieldName = 'species' + Origin = 'SINPASWORD.pet.species' + end + object Query1sex: TStringField + FieldName = 'sex' + Origin = 'SINPASWORD.pet.sex' + FixedChar = True + Size = 1 + end + object Query1birth: TDateField + FieldName = 'birth' + Origin = 'SINPASWORD.pet.birth' + end + object Query1death: TDateField + FieldName = 'death' + Origin = 'SINPASWORD.pet.death' + end + object Query1id: TIntegerField + AutoGenerateValue = arAutoInc + FieldName = 'id' + Origin = 'SINPASWORD.pet.id' + end + end + object UpdateSQL1: TUpdateSQL + ModifySQL.Strings = ( + 'update pet' + 'set' + ' name = :name,' + ' owner = :owner,' + ' species = :species,' + ' sex = :sex,' + ' birth = :birth,' + ' death = :death,' + ' id = :id' + 'where' + ' id = :OLD_id') + InsertSQL.Strings = ( + 'insert into pet' + ' (name, owner, species, sex, birth, death, id)' + 'values' + ' (:name, :owner, :species, :sex, :birth, :death, :id)') + DeleteSQL.Strings = ( + 'delete from pet' + 'where' + ' id = :OLD_id') + Left = 696 + Top = 384 + end + object ADOQuery1: TADOQuery + Active = True + Connection = ADOConnection1 + CursorType = ctStatic + Parameters = <> + SQL.Strings = ( + 'select * from pet') + Left = 584 + Top = 80 + object ADOQuery1id: TAutoIncField + AutoGenerateValue = arAutoInc + FieldName = 'id' + end + object ADOQuery1name: TStringField + FieldName = 'name' + Size = 18 + end + object ADOQuery1owner: TStringField + FieldName = 'owner' + Size = 16 + end + object ADOQuery1species: TStringField + FieldName = 'species' + Size = 12 + end + object ADOQuery1sex: TStringField + FieldName = 'sex' + FixedChar = True + Size = 1 + end + object ADOQuery1birth: TDateField + FieldName = 'birth' + end + object ADOQuery1death: TDateField + FieldName = 'death' + end + end + object mySQLDatabase1: TmySQLDatabase + Connected = True + DatabaseName = 'test' + UserName = 'jd' + UserPassword = 'nuevo' + Host = 'infdj.com' + ConnectOptions = [] + Params.Strings = ( + 'Port=3306' + 'DatabaseName=test' + 'UID=jd' + 'PWD=nuevo' + 'Host=infdj.com') + Left = 688 + Top = 456 + end + object mySQLTable1: TmySQLTable + AutoRefresh = True + Database = mySQLDatabase1 + Active = True + TableName = 'pet' + Left = 688 + Top = 424 + object mySQLTable1name: TStringField + FieldName = 'name' + Size = 21 + end + object mySQLTable1owner: TStringField + FieldName = 'owner' + Size = 21 + end + object mySQLTable1species: TStringField + FieldName = 'species' + Size = 21 + end + object mySQLTable1sex: TStringField + FieldName = 'sex' + Size = 2 + end + object mySQLTable1birth: TDateField + FieldName = 'birth' + end + object mySQLTable1death: TDateField + FieldName = 'death' + end + object mySQLTable1id: TLargeintField + AutoGenerateValue = arAutoInc + FieldName = 'id' + Required = True + end + end +end diff --git a/MySQL_ADO.h b/MySQL_ADO.h new file mode 100644 index 0000000..66c3411 --- /dev/null +++ b/MySQL_ADO.h @@ -0,0 +1,78 @@ +//--------------------------------------------------------------------------- + +#ifndef MySQL_ADOH +#define MySQL_ADOH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "mySQLDbTables.hpp" +//--------------------------------------------------------------------------- +class TForm1 : public TForm +{ +__published: // IDE-managed Components + TADOConnection *ADOConnection1; + TDataSource *DataSource1; + TDBGrid *DBGrid1; + TADOTable *ADOTable1; + TSplitter *Splitter1; + TButton *Button1; + TDBGrid *DBGrid2; + TDataSource *DataSource2; + TTable *Table1; + TButton *Button2; + TDatabase *Database1; + TQuery *Query1; + TUpdateSQL *UpdateSQL1; + TADOQuery *ADOQuery1; + TStringField *Query1name; + TStringField *Query1owner; + TStringField *Query1species; + TStringField *Query1sex; + TDateField *Query1birth; + TDateField *Query1death; + TIntegerField *Query1id; + TAutoIncField *ADOQuery1id; + TStringField *ADOQuery1name; + TStringField *ADOQuery1owner; + TStringField *ADOQuery1species; + TStringField *ADOQuery1sex; + TDateField *ADOQuery1birth; + TDateField *ADOQuery1death; + TStringField *ADOTable1name; + TStringField *ADOTable1owner; + TStringField *ADOTable1species; + TStringField *ADOTable1sex; + TDateField *ADOTable1birth; + TDateField *ADOTable1death; + TAutoIncField *ADOTable1id; + TmySQLDatabase *mySQLDatabase1; + TmySQLTable *mySQLTable1; + TStringField *mySQLTable1name; + TStringField *mySQLTable1owner; + TStringField *mySQLTable1species; + TStringField *mySQLTable1sex; + TDateField *mySQLTable1birth; + TDateField *mySQLTable1death; + TLargeintField *mySQLTable1id; + void __fastcall ADOTable1RecordChangeComplete( + TCustomADODataSet *DataSet, const TEventReason Reason, + const int RecordCount, const Error *Error, + TEventStatus &EventStatus); + void __fastcall Button1Click(TObject *Sender); + void __fastcall Button2Click(TObject *Sender); +private: // User declarations +public: // User declarations + __fastcall TForm1(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TForm1 *Form1; +//--------------------------------------------------------------------------- +#endif diff --git a/MySQL_wADO.bpr b/MySQL_wADO.bpr new file mode 100644 index 0000000..2b977ea --- /dev/null +++ b/MySQL_wADO.bpr @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=3082 +CodePage=1252 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[HistoryLists\hlIncludePath] +Count=2 +Item0=$(BCB)\include;$(BCB)\include\vcl;C:\Mis documentos\Fuentes de Programacion\C++ Builder\VCLs\MySQL_dac\CB5 +Item1=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=2 +Item0=..\VCLs\MySQL_dac\CB5;..\VCLs\lib;$(BCB)\lib\obj;$(BCB)\lib;C:\Mis documentos\Fuentes de Programacion\C++ Builder\VCLs\MySQL_dac\CB5 +Item1=..\VCLs\MySQL_dac\CB5;..\VCLs\lib;$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[HistoryLists\hlConditionals] +Count=1 +Item0=_DEBUG + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication= +RemoteHost= +RemotePath= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + + \ No newline at end of file diff --git a/MySQL_wADO.cpp b/MySQL_wADO.cpp new file mode 100644 index 0000000..32a6fe2 --- /dev/null +++ b/MySQL_wADO.cpp @@ -0,0 +1,22 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +USERES("MySQL_wADO.res"); +USEFORM("MySQL_ADO.cpp", Form1); +//--------------------------------------------------------------------------- +WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) +{ + try + { + Application->Initialize(); + Application->CreateForm(__classid(TForm1), &Form1); + Application->Run(); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + return 0; +} +//--------------------------------------------------------------------------- diff --git a/MySQL_wADO.exe b/MySQL_wADO.exe new file mode 100644 index 0000000..00a1555 Binary files /dev/null and b/MySQL_wADO.exe differ diff --git a/MySQL_wADO.res b/MySQL_wADO.res new file mode 100644 index 0000000..1392cb0 Binary files /dev/null and b/MySQL_wADO.res differ diff --git a/ProjectGroup1.bpg b/ProjectGroup1.bpg new file mode 100644 index 0000000..8242f36 --- /dev/null +++ b/ProjectGroup1.bpg @@ -0,0 +1,25 @@ +#------------------------------------------------------------------------------ +VERSION = BWS.01 +#------------------------------------------------------------------------------ +!ifndef ROOT +ROOT = $(MAKEDIR)\.. +!endif +#------------------------------------------------------------------------------ +MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** +DCC = $(ROOT)\bin\dcc32.exe $** +BRCC = $(ROOT)\bin\brcc32.exe $** +#------------------------------------------------------------------------------ +PROJECTS = InterBase.exe MySQL_wADO.exe +#------------------------------------------------------------------------------ +default: $(PROJECTS) +#------------------------------------------------------------------------------ + +InterBase.exe: InterBase.bpr + $(ROOT)\bin\bpr2mak $** + $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak + +MySQL_wADO.exe: MySQL_wADO.bpr + $(ROOT)\bin\bpr2mak $** + $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..c7654c2 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +#Pruebas_DB_sobre_IP + + +*18/11/2001* + +ToDo: wwtcf? + + +![screenshot](/Pruebas_DB_sobre_IP.png "Screenshot") diff --git a/mySQLDACB5.bpl b/mySQLDACB5.bpl new file mode 100644 index 0000000..ac9b6ca Binary files /dev/null and b/mySQLDACB5.bpl differ