Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-09-2003
anitra_cattivo anitra_cattivo is offline
Miembro
 
Registrado: ago 2003
Ubicación: Peru
Posts: 30
Poder: 0
anitra_cattivo Va por buen camino
Question 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.
Responder Con Cita
  #2  
Antiguo 23-09-2003
Lmas Lmas is offline
Miembro
 
Registrado: jul 2003
Ubicación: España
Posts: 27
Poder: 0
Lmas Va por buen camino
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;
SalU2.
__________________
Una cosa es una cosa, y otra cosa es otra cosa...
Responder Con Cita
  #3  
Antiguo 23-09-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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:
- Ça c'est la caisse. Le mouton que tu veux est dedans.

Última edición por marcoszorrilla fecha: 23-09-2003 a las 08:27:54.
Responder Con Cita
  #4  
Antiguo 23-09-2003
Lmas Lmas is offline
Miembro
 
Registrado: jul 2003
Ubicación: España
Posts: 27
Poder: 0
Lmas Va por buen camino
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;
SalU2
__________________
Una cosa es una cosa, y otra cosa es otra cosa...
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 02:59:38.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi