Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ ΠΏΠΎ Delphi. ВСрсия 1.4.3 ΠΎΡ‚ 1.1.2001Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 24

Автор Π’Π°Π»Π΅Π½Ρ‚ΠΈΠ½ ΠžΠ·Π΅Ρ€ΠΎΠ²

 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 окончился Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ), вмСсто Π½ΠΎΠΌΠ΅Ρ€Π° записи возвращаСтся ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π°. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΅Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ (ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° совмСстимого Ρ‚ΠΈΠΏΠ°) ΠΈ отдаСтся Π½Π° усмотрСниС программисту.