Estoy iniciándome en Delphi y estoy tratando de hacer una aplicación en donde borro algunos registros de una tabla de Dbase simplemente aplicando Delete. Pero al visualizar la tabla con el Database Desktop de Delphi me encuentro con que no se ha hecho el pack y lo tengo que hacer desde el ya mencionado desktop. ¿Cómo puedo hacerlo desde mi aplicación de forme directa?
1 Respuesta
Respuesta de antipauli
1
1
antipauli, Analista/Programador de Sistemas Oracle
Aquí 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; 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'); De parte de Radical - www.q3.nu
Hecho, funciona a la perfeccción y ya lo logré poner en mi aplicación. Muchas gracias por tu ayuda sin ella no lo hubiera logrado.