Pregunta: | 23923 - COMPACTAR TABLAS PARADOX |
Autor: | Armando Montoya |
Hola a todos, tengo una duda, como puedo hacer para eliminar completamente los registros eliminados en Paradox, ya que en mi aplicacion hago uso del EmptyTable y despues requiero eliminar esos registros hago un llamado de DbiDoRestructure pero no me elimina nada. si alguien me pudiera indicar el codigo necesario estaria muy agradecido. Gracias y saludos |
Respuesta: | jorge luis guzman abreu |
Aqui tienes un ejemplo de como se hace:
-Incluye 'bde' en el uses de tu form -y utiliza esta funcion para compactarla: procedure PackDBF(Tabla: TTable); begin Check(DbiPackTable(Tabla.DBHandle, Tabla.Handle, nil, szDBASE, True)) end; Pero cuidado, para poder compactar la tabla, ésta debera estar abierta en modo exclusivo Ejemplo: {Cerramos la tabla/Close table} Table1.Close; {En Modo exclusivo/Exclusive mode} Table1.Exclusive:=True; {Abrimos tabla/Open table} Table1.Open; {Compactar/pack} PackDBF(Table1); {Reabrir tabla/reopen table} Table1.Close; Table1.Exclusive:=False; Table1.Open; Compactar tablas DBF con una función: procedure PackDBF(Const ADatabase, ATable : String); begin with TTable.Create(nil) do try DatabaseName := ADataBase; TableName := ATable; Exclusive := True; Open; Check(DbiPackTable(Database.Handle,Handle,'','',True)); finally Free; end; end; Ejemplo de llamada: PackDBF('Alias','Table1'); Para tablas Paradox: procedure PackParadox(Const ADatabase, ATable : String); var ADB :TDataBase; SaveKC : Boolean; PdxStruct : CRTblDesc; begin with TTable.Create(nil) do try DatabaseName := ADatabase; TableName := ATable; Exclusive := True; Open; ADB := DAtabase; SaveKC := ADB.KeepConnection; ADB.KeepConnection := True; try Close; FillChar(PdxStruct,SizeOF(PdxStruct),0); StrPCopy(PdxStruct.szTblName,ATable); PdxStruct.bPack := True; Check(DbiDoRestructure(ADB.Handle,1, @PdxStruct,nil,nil,nil,False)); finally ADB.KeepConnection := SaveKC; end; finally Free; end; end; Ejemplo de llamada: PackParadox('Alias','Table1'); |