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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠœΠΈΡ€ InterBase. АрхитСктура, администрированиС ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Π² InterBase/FireBird/YaffilΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 48

Автор А Ковязин

procedure TDualListForm.MoveRec(Select: Boolean);

begin

if Select then begin

if (SourceDS.Active) and (not SourceDS.IsEmpty) then begin

TargetDS.CacheRefreshByArrMap(SourceDS, frklnsert,

['CUST_NO'], ['CUST_NO']);

SourceDS.CacheDelete;

end;

end

else begin

if (TargetDS.Active) and (not TargetDS.IsEmpty) then begin

SourceDS.CacheRefresh(TargetDS, frklnsert, nil);

TargetDS.CacheDelete;

end;

end;

end;

Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Select Ρ€Π°Π²Π΅Π½ True, Ρ‚ΠΎ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ запись ΠΈΠ· Π»Π΅Π²ΠΎΠ³ΠΎ списка Π² ΠΏΡ€Π°Π²Ρ‹ΠΉ, Ρ‚. Π΅. ΠΈΠ· SourceDS Π² TargetDS. Рассмотрим ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ CacheRefreshByArrMap.

procedure CacheRefreshByArrMap(FromDataSet: TDataSet; Kind:

TCachRefreshKind; const SourceFields, DestFields: array of

String);

ΠœΠ΅Ρ‚ΠΎΠ΄ позволяСт Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ запись Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Ρ‚. Π΅. Π±Π΅Π· выполнСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… запросов. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ FromDataSet ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΈΠ· ΠΊΠ°ΠΊΠΎΠ³ΠΎ TpFIBDataSet ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ запись. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Kind ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π΄Π²Π° значСния: frkEdit ΠΈΠ»ΠΈ frklnsert. Frklnsert ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ запись, a frkEdit - Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ SourceFields описываСт список ΠΏΠΎΠ»Π΅ΠΉ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° источника, Π° список DestFields - список ΠΏΠΎΠ»Π΅ΠΉ Π² TpFIBDataSet-ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ΅. Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ названия ΠΏΠΎΠ»Π΅ΠΉ Π² списках ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ, Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ совпадали Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠ½Π°Ρ‡Π΅ ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΌΡ‹ вставляСм Π² TargetDS Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ запись ΠΈΠ· SourceDS. Π”Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ использован здСсь Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для дСмонстрации, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ CacheRefresh, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ поля автоматичСски. ПослС вставки записи Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΅Π΅ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° источника. Π­Ρ‚ΠΎ дСлаСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° CacheDelete, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ выполняСт ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ запрос (DeleteSQL), Π° удаляСт запись Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· локального Π±ΡƒΡ„Π΅Ρ€Π° Π² памяти. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ CacheRefreshByArrMap, CacheRefresh ΠΈ CacheDelete, ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ достаточно ΠΎΡ‡Π΅Π²ΠΈΠ΄Π΅Π½: ΠΌΡ‹ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ запись ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°-источника Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚-ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ ΠΈ удаляСм Π΅Π΅ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°-источника.

Π’ΠΎ ΠΆΠ΅ самоС ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π² Ρ†ΠΈΠΊΠ»Π΅, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ пСрСнСсти всС записи сразу:

procedure TDualListForm.MoveAll(Select: Boolean);

var TmpDataSet: TpFIBDataSet;

begin

if Select then TmpDataSet := SourceDS else

TmpDataSet := TargetDS;

with TmpDataSet do begin

try

DisableControls;

First;

while not Eof do MoveRec(Select);

finally

EnableControls;

end;

end;

end;

ΠžΡΡ‚Π°Π΅Ρ‚ΡΡ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ события OnClick для ΠΊΠ½ΠΎΠΏΠΎΠΊ:

procedure TDualListForm.ButtonlClick(Sender: TObject);

begin

MoveRec(True); // SourceDS -> TargetDS

end;

procedure TDualListForm.Button2Click(Sender: TObject);

begin

MoveRec(False); // TargetDS -> SourceDS

end;

procedure TDualListForm.Button3Click(Sender: TObnect);

begin

MoveAll(True), // SourceDS -> TargetDS

end;

procedure TDualListForm. Button4Click (Sender : TObject) ;

begin

MoveAll(False); // TargetDS -> SourceDS

end;

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (рис 2.76)

Если ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π½Π°ΠΆΠΈΠΌΠ°Ρ‚ΡŒ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Button 1, Ρ‚ΠΎ записи Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΈΠ· Π»Π΅Π²ΠΎΠ³ΠΎ списка Π² ΠΏΡ€Π°Π²Ρ‹ΠΉ (рис. 2 77).

ВсС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π±ΡƒΡ„Π΅Ρ€ΠΎΠ², Π½Π΅ Π·Π°Ρ‚Ρ€Π°ΠΆΠ²Π°ΡŽΡ‚ сСрвСр ΠΈ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π±Π°Π·Π΅ Наряду с описанными Π²Ρ‹ΡˆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.


OpenAsCIone - ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ DataSet ΠΈ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ DataSet

CacheAppend - Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ запись Π² ΠΊΠΎΠ½Π΅Ρ† локального Π±ΡƒΡ„Π΅Ρ€Π°.

SwapRecords - ΠΎΠ±ΠΌΠ΅Π½ΡΡ‚ΡŒ записи Π² локальном Π±ΡƒΡ„Π΅Ρ€Π΅.

CacheEdit - Π·Π°Π΄Π°Ρ‚ΡŒ значСния ΠΏΠΎΠ»Π΅ΠΉ Ρƒ записи Π² локальном Π±ΡƒΡ„Π΅Ρ€Π΅.

Cachelnsert - Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ запись Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€

CacheModify - ΠΎΠ±Ρ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ для вставки ΠΈ измСнСния записи Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π±ΡƒΡ„Π΅Ρ€Π΅

LoadFromFile - Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€ записями ΠΈΠ· Ρ„Π°ΠΉΠ»Π°.

LoadFromStream - Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€ записями ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ°.

SaveToFile - ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€ Π² Ρ„Π°ΠΉΠ».

SaveToStream - ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅


Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π±ΡƒΡ„Π΅Ρ€ΠΎΠΌ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ Π³ΠΈΠ±ΠΊΠΎΠ΅ срСдство манипуляции Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² клиСнтских прилоТСниях, позволяя ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ‚ΡŒ Π½Π°Π³Π»ΡΠ΄Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса Π±Π΅Π· выполнСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… запросов ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…





Рис 2.76. Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Π²ΠΈΠ΄ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ прилоТСния





Рис 2.77. Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Π²ΠΈΠ΄ прилоТСния ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ‚Ρ€Π΅Ρ… записСй

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° клиСнтских ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π‘Π£Π‘Π” InterBase с использованиСм Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Microsoft OLE DB

НСмного истории

Одним ΠΈΠ· распространСнных Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… являСтся ΠΌΡ‹ΡΠ»ΡŒ, Ρ‡Ρ‚ΠΎ Π‘Π£Π‘Π” InterBase ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Borland. И этому способствовало Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄ΠΎ послСднСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ всС качСствСнныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ доступа ΠΊ этому сСрвСру Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… сущСствовали Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для создания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Delphi, C++ Builder ΠΈΠ»ΠΈ Kylix. Для ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… систСм программирования ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ InterBase API ΠΈΠ»ΠΈ ODBC. И хотя ΠΏΠ΅Ρ€Π²ΠΎΠ΅ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ прилоТСния, Π° Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ прСтСнзиями Π½Π° ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΎΠ±Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π½Π΅ Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‚ трСбованиям соврСмСнных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… систСм, Π±Π°Π·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ…ΡΡ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹Ρ… тСхнологиях. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² использовании ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² доступа ΠΊ InterBase, ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния языка программирования, Π±Ρ‹Π»Π°. И вопрос ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ: Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ эти ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ ΠΊΡ‚ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡΡ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ.

ΠžΡ‚Π²Π΅Ρ‚ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ вопрос Π΄Π°ΡŽΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ соврСмСнной ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‰ΠΈΠ΅ использованиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈ ΠΈΡ… Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΡƒ Π² Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ доступа Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΡƒΡŽ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠ³ΠΎ модуля, Ρ‚Π°ΠΊ ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ…. И тСхнология Component Object Model (COM) позволяСт Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ эти ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅. Но ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ΅ использованиС этой Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ для создания ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с использованиСм InterBase ослоТнялось отсутствиСм Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΉ стандартизованной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ БОМ-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² доступа ΠΊ этой Π‘Π£Π‘Π”. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΏΠΎΠ΄ InterBase Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π² ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹Π΅ прилоТСния, Π»ΠΈΠ±ΠΎ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ совмСстного использования рСсурсов Π‘Π£Π‘Π” малосвязанными ΠΌΠ΅ΠΆΠ΄Ρƒ собой модулями ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС осознанноС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ возмоТностСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ экономит врСмя. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ, опуская Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° созданиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² доступа, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² Π»ΠΎΠ²ΡƒΡˆΠΊΡƒ, которая Π² Π»ΡƒΡ‡ΡˆΠ΅ΠΌ случаС Π½Π΅ позволяСт ΡΠΌΠ΅Π½ΠΈΡ‚ΡŒ сСрвСр Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΊΡ€Π°Ρ…Ρƒ всСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ это ΠΎΡΠΎΠ·Π½Π°ΡŽΡ‚, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ·Π΄Π½ΠΎ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ создания БОМ-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² для доступа ΠΊ InterBase Π±Ρ‹Π»ΠΈ НаиболСС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Visual Database Tools ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Borland (VDBT). Π­Ρ‚ΠΎ VCL-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ для Visual Basic, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ с InterBase Ρ‡Π΅Ρ€Π΅Π· Borland Database Engine. Но Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° VDBT Π±Ρ‹Π»Π° Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ БОМ-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² доступа ΠΊ InterBase, Π° Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ спСцификациСй. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡŽ ΠΈ ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π΅ ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Π»Π°.

Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ OLE Database (OLE DB), ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΡƒΡŽ для создания ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² доступа ΠΊ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, выпустила компания Microsoft, которая ΠΊΡƒΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ саму БОМ-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ. Но Open Source InterBase 6 Π½Π΅ ΠΈΠΌΠ΅Π» собствСнного OLE DB-ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°, поэтому Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΎΡΡ‚Π°Π²Π°Π»ΠΎΡΡŒ, ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ OLE DB for InterBase, ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ Π½Ρ‹Π½Π΅ ΠΊΠ°ΠΊ IBProvider.

ΠžΠ±Π·ΠΎΡ€ возмоТностСй IBProvider

* Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со всСй Π»ΠΈΠ½Π΅ΠΉΠΊΠΎΠΉ Π‘Π£Π‘Π” InterBase, начиная с вСрсии 4 Ρ… ΠΈ заканчивая ΠΊΠ»ΠΎΠ½Π°ΠΌΠΈ InieiBase 6 - Firebird ΠΈ Yattil ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ условиСм Ρ€Π°Π±ΠΎΡ‚Ρ‹ IBProvider являСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ GDS32.dll ΠΎΡ‚ InterBase 4 (см. Π³Π»Π°Π²Ρƒ "Бостав ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ InterBase" (Ρ‡. 4)). IBProvider ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ опрСдСляСт ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ возмоТностСй сСрвСра (Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ base level) ΠΈ клиСнтской части (Ρ‚ Π΅. возмоТности GDS32.dll). Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ автоматичСски подстраиваСтся ΠΏΠΎΠ΄ эти ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

* ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° всСх Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… InterBase. Π•ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° BLOB-ΠΏΠΎΠ»Π΅ΠΉ (Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… ΠΈ тСкстовых), массивов ΠΈ Ρ‚ΠΈΠΏΠΎΠ² DECIMAL/NUMERIC (см. Π³Π»Π°Π²Ρƒ " Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…" (Ρ‡. 1)).

* ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° storage-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с BLOB-полями. Π­Ρ‚ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Π² качСствС входящих ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

* ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ вСсь спСктр OLE DB-Ρ‚ΠΈΠΏΠΎΠ². Помимо Ρ‚ΠΈΠΏΠΎΠ², нСпосрСдствСнно ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… InterBase, IBProvider способСн ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ†Π΅Π»Ρ‹Π΅ числа, Π±ΡƒΠ»Π΅Π²Ρ‹ значСния, строки UNICODE ΠΈ Ρ‚. Π΄.

* ВстроСнная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° конвСртирования Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ, прСобразования массивов, Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ ΠΈ тСкстового прСдставлСния BLOB-ΠΏΠΎΠ»Π΅ΠΉ. Для прСобразования Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… NUMERIC ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с большими Ρ†Π΅Π»Ρ‹ΠΌΠΈ числами, Ρ‡Ρ‚ΠΎ обСспСчиваСт Π΅ΡΡ‚Π΅ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ 64-Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… Ρ†Π΅Π»Ρ‹Ρ….

* ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ доступа ΠΊ своим рСсурсам, поэтому ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ прилоТСния.

* ΠžΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ. Для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π² составС сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π°ΠΆΠ½Π° Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ. ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° повсСмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΌΠΎΡ‰Π½Ρ‹Π΅ возмоТности языка Π‘ΠΈ++ для автоматичСского освобоТдСния рСсурсов ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ситуаций.