FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Archivo .DBT Inmenso!
Buenas.
Estoy haciendo un programa de control de asistencias. Tengo varias tablas de uso local para calculos. Una de las tablas de de Observaciones, donde el programa define algunos errores de marcacion del trabajador. "No marco ingreso, no marco salida, marcio doble vez ingreso, etc". Estos comentarios que se generan a la hora de recibir la informacion del Reloj via archivo .TXT que nos entrega el reloj. Se registran en un campo Memo por cada Trabajador y luego los registros de esta tabla pueden ser eliminados. Mi problema es que veo que cada vez que hago pruebas, el archivo Receptor_obs.DBT que supongo es donde estan los memos de Receptor_obs.DBF va creciendo y creciendo. Por ejemplo, ahora los tamaños son los siguientes: Receptor_obs.DBF 309K Receptor_obs.DBT 590,621K La forma que uso para limpiar las tablas es con un Delete del Query, luego pasado un tiempo, las compatare. Pero veo que el .DBT no se reduce Que me recomiendan?. Muchas Gracias. |
#2
|
|||
|
|||
Hola anitra_cattivo.
Creo que exite la función DbiPack..., pero mirando un programa donde compactaba tablas dBase, utilizaba este código que si que funcionaba: Código:
uses BDE; procedure PackTable(ATable: TTable); var TblDesc: CRTblDesc; hDb: hDbiDb; cTablePath: string; begin if not ATable.Active then raise Exception.Create('La tabla debe estar abierta.'); hDb := nil; try SetLength(cTablePath, MAX_PATH); DbiGetDirectory(ATable.DBHandle, True, PChar(cTablePath)); cTablePath := PChar(cTablePath); if (cTablePath <> '') and (cTablePath[Length(cTablePath)] <> '\') then cTablePath := cTablePath + '\'; cTablePath := cTablePath + ATable.TableName; FillChar(TblDesc, SizeOf(CRTblDesc), 0); with TblDesc do begin StrPCopy(szTblName, cTablePath); bPack := True; end; ATable.Active := False; DbiOpenDatabase(nil, 'STANDARD', dbiReadWrite, dbiOpenExcl, nil, 0, nil, nil, hDb); DbiSetDirectory(hDb, PChar(cTablePath)); DbiDoRestructure(hDb, 1, @TblDesc, nil, nil, nil, False); finally DbiCloseDatabase(hDb); end; end;
__________________
Una cosa es una cosa, y otra cosa es otra cosa... |
#3
|
||||
|
||||
Que yo recuerde los .DBT de Dbase no se redución mediante un Pack, no sé si el BDE lo logrará, pero la solución era, crear una nueva tabla idéntica y pasarle los registros, de esta manera se reducía el DBT.
Un Saludo y dinos de que manera lo arreglas.
__________________
Guía de Estilo de los Foros Cita:
Última edición por marcoszorrilla fecha: 23-09-2003 a las 08:27:54. |
#4
|
|||
|
|||
Hola a todos.
Veo que el código tenía un error, al no poner el editor de post la barra invertida (la contraria al '/'). He sustituido esa parte del código por la función IncludeTrailingPathDelimiter y, por lo menos ayer funcionaba el código; vamos, que reducía el tamaño del DBT. Aquí va de nuevo: Código:
uses BDE; procedure PackTable(ATable: TTable); var TblDesc: CRTblDesc; hDb: hDbiDb; cTablePath: string; begin if not ATable.Active then raise Exception.Create('La tabla debe estar abierta.'); hDb := nil; try // La tabla debe estar abierta para obtener su ruta física SetLength(cTablePath, MAX_PATH); DbiGetDirectory(ATable.DBHandle, True, PChar(cTablePath)); cTablePath := PChar(cTablePath); // El editor de post se come la barra delimitadora del path. //*** if (cTablePath <> '') and (cTablePath[Length(cTablePath)] <> '/') then //*** cTablePath := cTablePath + '/'; //*** cTablePath := cTablePath + ATable.TableName; cTablePath := IncludeTrailingPathDelimiter(cTablePath) + ATable.TableName; // Poner la ruta en la estructura. FillChar(TblDesc, SizeOf(CRTblDesc), 0); with TblDesc do begin StrPCopy(szTblName, cTablePath); bPack := True; // Esto indica que se debe compactar end; // Cerrar la tabla. DbiOpenDatabase la abrirá en modo esclusivo. ATable.Active := False; DbiOpenDatabase(nil, 'STANDARD', dbiReadWrite, dbiOpenExcl, nil, 0, nil, nil, hDb); DbiSetDirectory(hDb, PChar(cTablePath)); DbiDoRestructure(hDb, 1, @TblDesc, nil, nil, nil, False); finally DbiCloseDatabase(hDb); end; end;
__________________
Una cosa es una cosa, y otra cosa es otra cosa... |
|
|
|