Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   pack de fichero dbf (https://www.clubdelphi.com/foros/showthread.php?t=30323)

lgarcia 03-04-2006 18:46:36

pack de fichero dbf
 
Hola listeros:

Tengo el siguiente problema que trabajando un fichero dbf cuando borro los registros en realidad lo que hago es marcarlos pero cuando se abren con foxpro hay estan. Busque en Trucomania el truco 96 pero cuando lo ejecuto me da el siguiente error 'capability not supported' alguien me puede echar una mano

Saludos
Luis Garcia

_____________________________
La mejor manera de decir es hacer

marcoszorrilla 03-04-2006 19:58:24

Porque no pones el código que estás utilizando, ya que el truco que mencionas habla de tablas Dbf y tablas Paradox, puede ser que con las de Fox no funcione.

En cualquier caso recuerda que requiere el uso exclusivo de la tabla que se está compactando.

Si realmente no funciona con Fox, una solución sería crear una tabla exactamente igual vacía, transferirle los registros, eliminar la original, renombrar la que ahora solo contiene los registros no marcados para borrar.

Un Saludo.

lgarcia 03-04-2006 20:24:58

pack de fichero dbf
 
Marcos gracias por la respuesta. En el programa que hice tuve que usar la solucion que me dijiste en la parte final de tu respuestas pero en este caso solo se trata de cuando uno va a eliminar un registro tratando de mantener el fichero original, de todas maneras voy a intentar lo que dices porque la vez anterior no tuve otra alternativa y estube fajado varios dias. Te muestro parte del codigo a ver si aprecias algo nuevo
Código:

procedure PackDBF(Tabla: TTable);
begin
  Check(DbiPackTable(Tabla.DBHandle, Tabla.Handle, nil, szDBASE, True))
end;
procedure TFormCorrecionCadeca.FormActivate(Sender: TObject);
begin
  DataModule1.Cadeca.TableName:= nomcadeca;
  DataModule1.Cadeca.Exclusive:= True;
  DataModule1.Cadeca.Open;
  ButtonGuardar.Enabled:= False;
end;
 
procedure TFormCorrecionCadeca.DSCadecaDataChange(Sender: TObject;
  Field: TField);
begin
  ButtonGuardar.Enabled:= DataModule1.Cadeca.State in dsEditModes;
end;
procedure TFormCorrecionCadeca.ButtonGuardarClick(Sender: TObject);
begin
  DataModule1.Cadeca.Post;
  ButtonGuardar.Enabled:= False;
end;
procedure TFormCorrecionCadeca.ButtonSalirClick(Sender: TObject);
begin
  PackDBF(DataModule1.Cadeca);
  DataModule1.Cadeca.Close;
  Close;
end;


lgarcia 04-04-2006 17:28:49

solucion al pack de fichero dbf
 
Utilizando el truco 96 de trucomania se logro resolver el problema pero el detalles estaba en que al cerrar el formulario primero hay que cerrar la tabla y luego hacer el Pack y ademas hay que pasar en el nombre del fichero la extension del mismo (.dbf)

Asi fue como lo pudimos lograr, quizas a alguien le pueda servir
Código:

procedure PackDBF(Const ADatabase, ATable : String);
begin
  with TTable.Create(nil) do
  try
    DatabaseName := ADataBase;
    TableName := ATable;
    TableType := ttFoxPro;
    Exclusive := True;
    Open;
    Check(DbiPackTable(Database.Handle,Handle,'','',True));
  finally
  Free;
  end;
end;
procedure TFormCorrecionCadeca.FormActivate(Sender: TObject);
begin
  DataModule1.Cadeca.TableName:= nomcadeca;
  DataModule1.Cadeca.Open;
  ButtonGuardar.Enabled:= False;
end;
 
procedure TFormCorrecionCadeca.DSCadecaDataChange(Sender: TObject;
  Field: TField);
begin
  ButtonGuardar.Enabled:= DataModule1.Cadeca.State in dsEditModes;
end;
procedure TFormCorrecionCadeca.ButtonGuardarClick(Sender: TObject);
begin
  DataModule1.Cadeca.Post;
  ButtonGuardar.Enabled:= False;
end;
 
procedure TFormCorrecionCadeca.ButtonSalirClick(Sender: TObject);
begin
  DataModule1.Cadeca.Close;
  PackDBF('',nomcadeca + '.dbf');
  Close;
end;



La franja horaria es GMT +2. Ahora son las 05:16:45.

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