cbiMDXMissing {, cbiDBTMissing - ΠΌΠΎΠΆΠ½ΠΎ Π΅ΡΡ ΠΈ ΠΎΡΠΈΡΠ°ΡΡ BLOB-ΠΏΠΎΠ»Ρ}:
begin
iSelection := 3; // HΠΎΠΌΠ΅p Π²Π°pΠΈΠ°Π½ΡΠ° ΠΎΡΠ²Π΅ΡΠ° (1-ΠΉ - ΠΎΡΠΊpΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ
// Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ, 2-ΠΉ - Π½Π΅ ΠΎΡΠΊpΡΠ²Π°ΡΡ, 3-ΠΉ - ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ).
// ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΉ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π½Π΅ΠΏpΠΈΡΡΠ½ΠΎΡΡΠ΅ΠΉ: Π° Π²Π΄pΡΠ³ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π²Π΅pΡΠΈΡΡ
// BDE Π½ΠΎΠΌΠ΅pΠ° Π±ΡΠ΄ΡΡ Π΄pΡΠ³ΠΈΠΌΠΈ?
Result := cbrCHKINPUT; // ΠΠ±pΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π²Π²Π΅Π΄ΡΠ½Π½ΡΠΉ ΠΎΡΠ²Π΅Ρ
end;
end;
end;
end.
=== Callback.pas ===
PS: ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΡΠΎ Π»ΠΈΡΡ ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π΅Π»Π°ΡΡΠΈΠΉ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ. Π ΡΠ°ΠΌΠΊΠ°Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΈΡΡΠΌΠ° Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΡΡ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ BDE Callbacks. ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Ρ Π²Π·ΡΠ» ΠΈΠ· BDE32.HLP, BDE.INT ΠΈ DB.PAS. Π VCL.HLP ΡΠΎΠ²ΡΠ΅ΠΌ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅Ρ ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΏΠΎΠ²ΠΎΠ΄Ρ.
ΠΠΎΠΎΠ±ΡΠ΅, ΡΡΠΊΠΈ Π±Ρ ΠΎΡΠΎΡΠ²Π°Π» ΡΠ΅ΠΌ, ΠΊΡΠΎ ΠΏΠΈΡΠ°Π» ΡΠΏΡΠ°Π²ΠΊΡ ΠΏΠΎ ΠΠ΅Π»ΡΡΡΠΌ: Ρ Π½Π΅Π΄Π΅Π»Ρ ΠΌΡΡΠ°Π»ΡΡ Ρ ΡΠ°Π±ΠΆΠ΅ΠΌ, ΠΏΠΎΠΊΠ° ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Π½Π΅ Π½Π°Π±ΡΡΠ» Π½Π° Callbacks.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² .DBF
Delphi 1
ΠΠ·ΡΡΠΎ ΠΈΠ· "Dtopics Database 1.10 from 3K computer Consultancy":
Dbase Π² BDE ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΡΡΠ°ΡΠΈΠΉ 'ΠΎΡΠΎΠ±ΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°Ρ', ΡΠ΅ΠΌ ΡΠ°Π±Π»ΠΈΡΡ SQL ΠΈ Paradox, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄Π°Π½Π½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ ΠΈ ΠΏΡΠΎΡΠΈΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ°
β DbiRegenIndexes( Table1.Handle ); { Π Π΅Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ Π²ΡΠ΅Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² }
β ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ° (Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π»ΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ)
if ((Pos('(',cTagExp) + Pos('+',cTagExp)) > 0) then Table1.AddIndex(cTagName, cTagExp, [ixExpression]) ( <β ixexpression β _Π»ΠΈΡΠ΅ΡΠ°Π»_)
else Table1.AddIndex(cTagName, cTagExp, []);
2. Π‘Π²ΡΠ·ΠΊΠΈ Master/Detail Π² Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΡ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ²
β Π²ΡΠ·ΠΎΠ² ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ BDE DbiLinkDetailToExp() Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎΠΉ DbiLinkDetail()
3. ΠΠ°ΠΊΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡ
with Table1 do StrPCopy(TName, TableName);
Result := DBIPackTable(DbHandle, Handle, TName, szDBASE, TRUE);
4. ΠΠ°Π΄Π°Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠ΄Π°Π»Π΅Π½Π½ΡΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ β Π²ΠΊΠ»/Π²ΡΠΊΠ» (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, dBase SET DELETED ON/OFF)
DbiSetProp( hDBIObj(Table1.Handle), curSOFTDELETEON, LongInt(bValue));
5. ΠΠ°Π΄Π°Π½ΠΈΠ΅ ΡΠ°ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ/ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² β Π²ΠΊΠ»/Π²ΡΠΊΠ» (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, dBase SET EXACT ON/OFF)
DbiSetProp( hDBIObj(Table1.Handle), curINEXACTON, LongInt(bValue));
<β ΠΠΎΠ½Π΅Ρ β>
ΠΡ ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°ΠΌΠΈ Π²ΠΎΠΏΡΠΎΡΡ:
<β ΠΠ°ΡΠ°Π»ΠΎ β>
Β«ΠΠ°ΠΊ ΠΌΠ½Π΅ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π·Π°ΠΏΠΈΡΠΈ dBASE, ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ?Β»
Π ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ ΡΠΎΠ±ΡΡΠΈΡ AfterOpen Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π½ΠΈΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ. ΠΠΊΠ»ΡΡΠΈΡΠ΅ DBITYPES, DBIERRS, DBIPROCS Π² ΡΠΏΠΈΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. ΠΠ»Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΠΉΡΠ΅ Π΅ΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΈΠΌΡ TTable ΠΈ TRUE/FALSE Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΠΎΠΊΠ°Π·Π°/ΡΠΊΡΡΡΠΈΡ ΡΠ΄Π°Π»Π΅Π½Π½ΡΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ. ΠΡΠΈΠΌΠ΅Ρ:
procedure TForm1.Table1AfterOpen(DataSet: TDataset);
begin
SetDelete(Table1, TRUE);
end;
procedure SetDelete(oTable:TTable; Value: Boolean);
var
rslt: DBIResult;
szErrMsg: DBIMSG;
begin
try
Table.DisableControls;
try
rslt := DbiSetProp(hDBIObj(oTable.Handle), curSOFTDELETEON,LongInt(Value));
if rslt <> DBIERR_NONE then
begin
DbiGetErrorString(rslt, szErrMsg);
raise Exception.Create(StrPas(szErrMsg));
end;
excepton E: EDBEngineError do ShowMessage(E.Message);
on E: Exception do ShowMessage(E.Message);
end;
finally
Table.Refresh;
Table.EnableControls;
end;
end;
Β«ΠΠΎΠ³Ρ Π»ΠΈ Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΊΠ΅ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄ΡΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π·Π°ΠΏΠΈΡΠΈ, ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ dBASE?Β»
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΠΎΠ΅ ΠΏΠΎΠ»Π΅, Π·Π°ΡΠ΅ΠΌ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ ΡΠΎΠ±ΡΡΠΈΡ ΡΠ°Π±Π»ΠΈΡΡ OnCalcField Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ Π΅Π³ΠΎ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
procedure TForm1.Table1CalcFields(DataSet: TDataset);
var
RCProps : RecProps;
Result : DBIResult;
begin
Result := DbiGetRecord(Table1.Handle, dbiNo
Π ΡΠΊΠΎΠΏΠΈΡΠΈ Π½Π΅ Π³ΠΎΡΡΡβ¦
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅ΡΠ° Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ dBASE
Π’Π°Π±Π»ΠΈΡΡ dBASE ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΉ. ΠΠΎΠΌΠ΅Ρ Π·Π°ΠΏΠΈΡΠΈ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ (ΠΈΠ·Π²ΠΈΠ½ΠΈΡΠ΅ Π·Π° ΡΠ°Π²ΡΠΎΠ»ΠΎΠ³ΠΈΡ) ΠΎΡΡΠ°ΠΆΠ°Π΅Ρ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π² ΡΠ°Π±Π»ΠΈΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅. ΠΡΠΈ Π½ΠΎΠΌΠ΅ΡΠ° Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ Π²ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ, ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ»ΠΈ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ. Π ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΏΠ΅ΡΠ²Π°Ρ Π·Π°ΠΏΠΈΡΡ, Ρ ΡΠ°Π½ΡΡΠ°ΡΡΡ Π² .DBF ΡΠ°ΠΉΠ»Π΅, Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ Π½ΠΎΠΌΠ΅Ρ Π·Π°ΠΏΠΈΡΠΈ 1. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΠ»Π΅ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ°, Π·Π°ΠΏΠΈΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΈΠ· 100 Π·Π°ΠΏΠΈΡΠ΅ΠΉ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π·Π°ΠΏΠΈΡΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡΡΠ°Π²Π°ΡΡΡΡ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ, Π° Π½Π΅ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ 100, ΠΎΡΡΠ°ΠΆΠ°ΡΡΠΈΠΌ Π½ΠΎΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π² ΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ Π½Π°Π±ΠΎΡΠ΅ Π΄Π°Π½Π½ΡΡ . ΠΡΠΎ ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈΡ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌ Paradox, Π³Π΄Π΅ ΡΠΎΠ±Π»ΡΠ΄Π°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½Π°Ρ Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΡ. ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½Π°Ρ Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΡ Paradox ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ dBASE, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ΠΉ Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ ΠΈ ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² Π½ΠΎΠΌΠ΅ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π΅Π΅ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π² Π½Π°Π±ΠΎΡΠ΅ Π΄Π°Π½Π½ΡΡ . Π’ΠΎ Π΅ΡΡΡ, Π·Π°ΠΏΠΈΡΡ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΈΠΌΠ΅ΡΡ Π½ΠΎΠΌΠ΅Ρ, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ Π΄Π»Ρ Π½Π΅Π΅ ΡΠΈΠ»ΡΡΡΠΎΠΌ Π½Π°Π±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ , ΡΠΌΠ΅Π½ΡΡΠΈΠ²ΡΠΈΠΌ ΠΎΠ±ΡΠ΅Π΅ ΡΠΈΡΠ»ΠΎ Π·Π°ΠΏΠΈΡΠ΅ΠΉ, ΠΈΠ»ΠΈ ΠΏΡΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠ΅, ΠΈΠ·-Π·Π° ΡΠ΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π·Π°ΠΏΠΈΡΠΈ.
Π ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ , ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Delphi ΠΈ Borland Database Engine (BDE), DB-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΠΈ ΡΠ°Π±Π»ΠΈΡΡ dBASE. Π’Π°ΠΊΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²Π° ΠΈΠ· Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ BDE.
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ BDE, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π·Π°ΠΏΠΈΡΠΈ dBASE, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅Π΅ Π½ΠΎΠΌΠ΅Ρ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, Π»ΡΠ±Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, Π·Π°ΠΏΠΎΠ»Π½ΡΡΡΠ°Ρ ΡΡΡΡΠΊΡΡΡΡ BDE pRECProps, Π²ΠΏΠΎΠ»Π½Π΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ½ΠΊΡΠΈΠΈ BDE DbiGetRecord, DbiGetNextRecord ΠΈ DbiGetPriorRecord. ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ²Π°Ρ ΠΈΠ· Π½ΠΈΡ ΡΠ΅Π°Π»ΡΠ½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π·Π°ΠΏΠΈΡΠΈ. ΠΠ²Π΅ Π΄ΡΡΠ³ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡ ΠΏΡΠΈ Π²Π²ΠΎΠ΄Π΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π·Π°ΠΏΠΈΡΡ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ Next ΠΈ Prior ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² TTable ΠΈ TQuery.
Π‘ΡΡΡΠΊΡΡΡΠ° pRECProps ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ:
iSeqNum: ΡΠΈΠΏ LongInt; ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ΅ΠΊΡΡΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ Π·Π°ΠΏΠΈΡΠΈ (ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π°Π±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ , Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΠΈ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ°); ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, Π΅ΡΠ»ΠΈ ΡΠΈΠΏ ΡΠ°Π±Π»ΠΈΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΡ (ΡΠΎΠ»ΡΠΊΠΎ Paradox).
iPhyRecNum: ΡΠΈΠΏ LongInt; ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π½ΠΎΠΌΠ΅Ρ Π·Π°ΠΏΠΈΡΠΈ; ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, Π΅ΡΠ»ΠΈ ΡΠΈΠΏ ΡΠ°Π±Π»ΠΈΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π½ΠΎΠΌΠ΅ΡΠ° Π·Π°ΠΏΠΈΡΠΈ (ΡΠΎΠ»ΡΠΊΠΎ dBASE).
bRecChanged: ΡΠΈΠΏ Boolean; Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ.
bSeqNumChanged: ΡΠΈΠΏ Boolean; Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ.
bDeleteFlag: ΡΠΈΠΏ Boolean; ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΠ΄Π°Π»Π΅Π½Π½ΡΡ Π·Π°ΠΏΠΈΡΡ; ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, Π΅ΡΠ»ΠΈ ΡΠΈΠΏ ΡΠ°Π±Π»ΠΈΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ "ΠΌΡΠ³ΠΊΠΎΠ΅" ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ (ΡΠΎΠ»ΡΠΊΠΎ dBASE).
ΠΠ΄Π½Π° ΠΈΠ· ΡΡΠΈΡ BDE-ΡΡΠ½ΠΊΡΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½Π° ΠΈΠ· Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠΉ Π·Π°ΡΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ Π·Π°ΠΏΠΈΡΠΈ. ΠΠΈΠΆΠ΅ - ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ DbiGetRecord.
function RecNo(ATable: TTable): LongInt;
var
R: RECProps;
rslt: DbiResult;
Error: array [0..255] of Char;
begin
ATable.UpdateCursorPos;
rslt := DbiGetRecord(ATable.Handle, dbiNoLock, nil, @R);
if rslt = DBIERR_NONE then Result := R.iPhyRecNum
else begin
DbiGetErrorString(rslt, Error);
ShowMessage(StrPas(Error));
Result := -1;
end;
end;
ΠΠ»Ρ Π²ΡΠ·ΠΎΠ²Π° Π»ΡΠ±ΠΎΠΉ BDE-ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Delphi, ΠΌΠΎΠ΄ΡΠ»ΠΈ-ΠΎΠ±Π΅ΡΡΠΊΠΈ BDE DbiTypes, DbiErrs ΠΈ DbiProcs Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ Π² ΡΠ΅ΠΊΡΠΈΡ Uses ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ (ΡΠ΅ΠΊΡΠΈΡ Uses Π·Π΄Π΅ΡΡ Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π°). ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ°Π±Π΅Π»ΡΠ½ΡΠΌΠΈ, ΠΎΠ½ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΠΏΡΡΠΌΠΎΠΉ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ TTable, Π½ΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° TTable ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. ΠΡΠ»ΠΈ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΌΠΎΠ΄ΡΠ»Π΅, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΈ Delphi DB ΠΈ DBTables, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ, ΠΈΠ½Π°ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ TTable Π±ΡΠ΄ΡΡ Π½Π΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ.
ΠΠ΅ΡΠΎΠ΄ TTable UpdateCursorPos Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ Π³Π°ΡΠ°Π½ΡΠΈΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π½ΠΎΠΌΠ΅ΡΠ° ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅ TTable ΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ Ρ Π½ΠΈΠΌ ΡΠ°Π±Π»ΠΈΡΡ.
Π ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΎΠΊ BDE ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ ΠΈΠΌΠΈ Π½Π΅ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΎΠ½ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ BDE-ΡΠΈΠΏΠ° DbiResult, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠ΅Π΅ Π½Π° ΡΡΠΏΠ΅ΡΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ Π²Π½Π΅ΡΠ½ΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ. ΠΡΠ±ΠΎΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΠΊΡΠΎΠΌΠ΅ DBIERR_NONE, ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»Π΅Π½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ (ΠΊΠ°ΠΊ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠ΅), Π³Π΄Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ BDE ΡΡΠ½ΠΊΡΠΈΠΈ DbiGetErrorString ΠΊΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ΄ΠΎΠ±Π½ΠΎΡΠΈΡΠ°Π΅ΠΌΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅. Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π² DbiGetRecord Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ rslt, Π° Π·Π°ΡΠ΅ΠΌ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠΏΠ΅ΡΠ½ΠΎΡΡΠΈ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΡΡΡ Ρ DBIERR_NONE.
ΠΡΠ»ΠΈ Π²ΡΠ·ΠΎΠ² DbiGetRecord Π±ΡΠ» ΡΡΠΏΠ΅ΡΠ½ΡΠΌ, ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ Π·Π°ΠΏΠΈΡΠΈ ΠΈΠ· ΠΏΠΎΠ»Ρ iPhyRecNum ΡΡΡΡΠΊΡΡΡΡ pRECProps ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Result, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½ΠΎΠΉ. Π§ΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΡΠ΅ΡΠΏΠ΅Π»Π° Π½Π΅ΡΠ΄Π°ΡΡ (Ρ.Π΅., Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΡΠΈΠΈ DbiGetRecord ΠΎΠΊΠΎΠ½ΡΠΈΠ»ΡΡ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎ), Π²ΠΌΠ΅ΡΡΠΎ Π½ΠΎΠΌΠ΅ΡΠ° Π·Π°ΠΏΠΈΡΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½Π°Ρ Π²Π΅Π»ΠΈΡΠΈΠ½Π°. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ Π΅Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌ (ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½Π°Ρ Π²Π΅Π»ΠΈΡΠΈΠ½Π° ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΠ³ΠΎ ΡΠΈΠΏΠ°) ΠΈ ΠΎΡΠ΄Π°Π΅ΡΡΡ Π½Π° ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ.