Mega Code Archive

 
Categories / Delphi / ADO Database
 

Paradox veya dbase tablosunu pack etmek [daha etkili ve guvenli bir yol]

{ Bu ornegi Borland'in Online BDE Reference Yardim dosyasinda buldum. Gerek Paradox, gerekse Dbase icin problemsiz calisiyor. Oncelikle tablonun exclusive (sadece bir kisinin acma izninin olmasi) sekilde acilmasi gerekli. Programlar bolumunde bununla ilgili bir ornek program da bulabilirsiniz. } uses BDE; procedure PackTable(Table: TTable); var Props: CURProps; hDb: hDBIDb; TableDesc: CRTblDesc; begin // Make sure the table is open exclusively so we can get the db handle... if not Table.Active then raise EDatabaseError.Create('Table must be opened to pack'); if not Table.Exclusive then raise EDatabaseError.Create('Table must be opened exclusively to pack'); // Get the table properties to determine table type... Check(DbiGetCursorProps(Table.Handle, Props)); // If the table is a Paradox table, you must call DbiDoRestructure... if (Props.szTableType = szPARADOX) then begin // Blank out the structure... FillChar(TableDesc, sizeof(TableDesc), 0); // Get the database handle from the table's cursor handle... Check(DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE, hDBIObj(hDb))); // Put the table name in the table descriptor... StrPCopy(TableDesc.szTblName, Table.TableName); // Put the table type in the table descriptor... StrPCopy(TableDesc.szTblType, Props.szTableType); // Set the Pack option in the table descriptor to TRUE... TableDesc.bPack := True; // Close the table so the restructure can complete... Table.Close; // Call DbiDoRestructure... Check(DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, False)); end else // If the table is a dBASE table, simply call DbiPackTable... if (Props.szTableType = szDBASE) then Check(DbiPackTable(Table.DBHandle, Table.Handle, nil, szDBASE, True)) else // Pack only works on PAradox or dBASE; nothing else... raise EDatabaseError.Create('Table must be either of Paradox or dBASE ' + 'type to pack'); Table.Open; end; // Kullanimi: procedure TForm1.Button1Click(Sender: TObject); begin Table1.Close; Table1.Exclusive := True; Table1.Open; PackTable(Table1); end;