Π ΠΈΡ 2.68. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ TpFIBDataSet
Π‘ΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΠΎΡΠ΅Π²ΠΈΠ΄Π΅Π½ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ . Π‘ΠΏΠΈΡΠΎΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° FieldsC: TComboBox Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π°Π·Π²Π°Π½ΠΈΡΠΌΠΈ ΠΏΠΎΠ»Π΅ΠΉ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ BIOLIFE.
FilteringDS.SelectSQL: SELECT * FROM BIOLIFE
procedure TMainForm.btnConnectClickfSender: TObject);
var Index: Integer;
begin
with MainDB do begin
ConnectParams.UserName := edtUserName.Text;
ConnectParams.Password := edtPassword.Text;
DBName := edtDataBase.Text;
try
Open;
FilteredDS.Open;
FieldsC.Items.Clear;
for Index := 0 to pred(FilteredDS.FieldCount) do
FieldsC.Items.Add(FilteredDS.Fields[Index].FieldName);
except
MessageDlgt'Error of connection to a database!', mtError, [mbOk], 0) ;
Close;
end;
end;
end;
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ±ΡΠ°ΡΡ ΠΏΠΎΠ»Π΅ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° FieldsC, ΡΠΊΠ°Π·Π°ΡΡ Π² ΠΏΠΎΠ»Π΅ FilterE: TEdit ΡΡΡΠΎΠΊΡ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΈ ΠΏΠΎΡΠ»Π΅ Π½Π°ΠΆΠ°ΡΠΈΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Button I ("Activate Filter"):
procedure TMainForm.ButtonlClick(Sender: T0b3ect);
begin
FilteredDS.Filtered := false;
FilteredDS.Filtered := true;
end;
Π² DBGrid 1 ΠΎΡΡΠ°Π½ΡΡΡΡ Π²ΠΈΠ΄Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΠΏΠΎΠ»Π΅ ΠΈΡΠΊΠΎΠΌΡΡ ΡΡΡΠΎΠΊΡ ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΡ OnFilterRecord Ρ FilteringDS:
procedure TMainForm.FilteredDSFilterRecord(DataSet: TDataSet;
var Accept: Boolean); begin
Accept := DOS(FilterE.Text,
FilteredDS.FieldByName(FieldsC.Text).AsString) <> 0
end;
ΠΠΎΡΠ»Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ FilteredDS.Filtered := true OnFilterRecord Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ Π±ΡΡΠ΅ΡΠ΅. ΠΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ, ΡΡΠΎΠ±Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°Ρ Π·Π°ΠΏΠΈΡΡ ΠΎΡΡΠ°Π²Π°Π»Π°ΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π΄Π°ΡΡ Π΄Π»Ρ Π½Π΅Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Accept ΡΠ°Π²Π½ΡΠΌ True. ΠΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΊΠΎΠ΄Π° Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΌΡ ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π²ΠΈΠ΄Π½ΡΠΌΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π² ΠΈΡΠΊΠΎΠΌΠΎΠΌ ΠΏΠΎΠ»Π΅ (FieldsC.Text) Π·Π°Π΄Π°Π½Π½ΡΡ ΡΡΡΠΎΠΊΡ (FilterE.Text). ΠΡΠ»ΠΈ ΠΌΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΠ±Π΅ΡΠ΅ΠΌ ΠΏΠΎΠ»Π΅ COMMON_NAME ΠΈ ΡΠΊΠ°ΠΆΠ΅ΠΌ ΡΡΡΠΎΠΊΡ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° "Π", ΡΠΎ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π²Π΅ Π²ΠΈΠ΄ΠΈΠΌΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ (ΡΠΈΡ. 2.69).
Π ΠΈΡ 2.69. ΠΡΠΈΠΌΠ΅Ρ Π΄Π²ΡΡ "ΠΎΡΡΠΈΠ»ΡΡΡΠΎΠ²Π°Π½Π½ΡΡ " Π·Π°ΠΏΠΈΡΠ΅ΠΉ
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π°ΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π΄Π»Ρ ΡΠΈΠ»ΡΡΡΠ° ΡΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΎ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ ΠΌΡ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΎ ΡΠΎΡΠ½ΠΎΠΌΡ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΡΠΊΠΎΠΌΠΎΠΉ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠΈ - Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π±ΠΎΠ»ΡΡΡΡ Π±ΡΠΊΠ²Ρ "Π". ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ»ΠΎΠΆΠ½ΠΈΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΠΎΠΈΡΠΊΠ°. ΠΠΎΠ»ΠΎΠΆΠΈΠΌ Π½Π° ΡΠΎΡΠΌΡ CaseC: TcheckBox (ΡΠΌ. ΡΠΈΡ. 2.69, "Case sensitive") ΠΈ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ΅ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ OnFilterRecord ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
procedure TMainForm.FilteredDSFilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
if CaseC.Checked then
Accept := pos(FilterE.Text,
FilteredDS.FieldByName(FieldsC.Text).AsString) <> 0
else
Accept := pos(AnsiUpperCase(FilterE.Text),
AnsiUpperCase(FilteredDS.FieldByName(FieldsC.Text).AsString))
<> 0;
end;
ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΡΠΊΠ»ΡΡΠΈΡ "ΡΠ»Π°ΠΆΠΎΠΊ" "Case sensitive", ΡΠΎ ΡΠΈΠ»ΡΡΡ ΠΏΠΎ ΡΡΡΠΎΠΊΠ΅ "Π" Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»ΡΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΠΏΠΈΡΠ΅ΠΉ - Π²ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄Π½Ρ Π±ΡΠΊΠ²Ρ "Π", Π½Π΅Π²Π°ΠΆΠ½ΠΎ ΠΌΠ°Π»Π΅Π½ΡΠΊΡΡ ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΡΡ (ΡΠΈΡ. 2.70).
Π ΠΈΡ 2.70. ΠΠ°ΠΏΠΈΡΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ Π±ΡΠΊΠ²Ρ "Π"
ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ Π΄Π°Π΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ Π² ΡΡΠΊΠΈ ΠΎΡΠ΅Π½Ρ Π³ΠΈΠ±ΠΊΠΎΠ΅ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π½Π΅ ΡΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½, ΠΊΠ°ΠΊ SQL Π² ΡΡΠ»ΠΎΠ²ΠΈΡΡ WHERE. ΠΠ° ΠΎΡΠ½ΠΎΠ²Π΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡΠ΅Π½Ρ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π±ΡΡΡΡΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΎ ΠΏΠ΅ΡΠ²ΡΠΌ Π±ΡΠΊΠ²Π°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°Π±ΠΈΡΠ°Π΅Ρ Π² ΠΏΠΎΠ»Π΅ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠ±ΡΡΠΈΠΉ InterBase ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ FIBPIus
InterBase Π΄Π°Π΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π΄Π»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ ΡΡΠ΅Π΄Π΅ Event Alerts. Π‘ΡΡΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ. ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΡ ΠΈΠ· ΡΡΠΈΠ³Π³Π΅ΡΠΎΠ² ΠΈΠ»ΠΈ Ρ ΡΠ°Π½ΠΈΠΌΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ POST_EVENT:
CREATE PROCEDURE SHOW_EVENT(
EVENT_ID INTEGER)
AS
BEGIN
IF (:EVENT_ID = 1) THEN POST_EVENT 'TEST_EVENT1';
IF (.EVENT_ID = 2) THEN POST_EVENT 'TEST_EVENT2';
IF (.EVENT_ID = 3) THEN POST_EVENT 'TEST_EVENT3';
EXIT;
END
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (ΡΠΈΡ 2.71), ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΡ ΠΡΠ»ΠΈ Π²Ρ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π΄Π²ΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°Ρ , ΡΠΎ ΠΎΠ±Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π²Π½Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡΡΠΎΠ³ΠΎ, ΠΊΡΠΎ ΠΈΡ ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°Π»
Π ΠΈΡ 2.71. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ InterBase events, ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° TSIBfibEventAlerter
ΠΠ»Ρ Π²ΡΠ·ΠΎΠ²Π° Ρ ΡΠ°Π½ΠΈΠΌΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ pFIBStoiedPioc TpFIBStoredPioc, Π·Π°Π΄Π°Π² ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ StoiedProcName (ΡΠΈΡ 2.72)
Π ΠΈΡ 2.72. ΠΡΠ·ΠΎΠ² Ρ ΡΠ°Π½ΠΈΠΌΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° TpFIBStoredPioc
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ TpFIBStoredProc ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΡΠΌΡΠΌ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠΌ TpFIBQuery ΠΈ ΡΠ°ΠΌ ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ SQL Π² Π²ΠΈΠ΄Π΅ ' EXECUTE PROCEDURE ...' ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π·Π°Π΄Π°Π΅ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ StoiedProcName
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ SffifibEventAlerterl: TSffifibEventAlerterlΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠ±ΡΡΠΈΠΉ InterBase ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ , Ρ.Π΅. Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΠΈΠΏΠ° TpFIBDatabase (ΡΠΈΡ 2.73)
Π ΠΈΡ 2.73. Π‘Π²ΠΎΠΉΡΡΠ²Π° SIBfibEventAlerterl
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ AutoRegister Π² False, ΡΡΠΎΠ±Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΡΡΡΠ½ΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π½ΡΠΆΠ½ΡΠ΅ Π½Π°ΠΌ ΡΠΎΠ±ΡΡΠΈΡ, Π° Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Events ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌ ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ (ΡΠΈΡ. 2.74).
Π ΠΈΡ 2.74. Π‘ΠΏΠΈΡΠΎΠΊ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠΎΠ±ΡΡΠΈΠΉ
Π§ΡΠΎΠ±Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ SIBfibEventAlerterl "ΠΏΠΎΠ»ΡΡΠ°Π»" ΡΠΎΠ±ΡΡΠΈΡ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ . ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΡ OnConnect Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° pFIBDatabasel:
procedure TForml.pFIBDatabaselConnect(Sender: TObject);
begin
if not SIBfibEventAlerterl.Registered then
SIBfibEventAlerterl.RegisterEvents;
end;
Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ Π·Π°ΠΊΡΡΡΠΈΠ΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ "ΠΎΡΠΊΠ»ΡΡΠΈΡΡ" SIBfibEventAlerterl. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΡ BeforeDisconnect ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° pFIBDatabasel:
procedure TForml.pFIBDatabaselBeforeDisconnect(Sender:
TObject);
begin
if SIBfibEventAlerterl.Registered then
SIBfibEventAlerterl.UnRegisterEvents;
end;
ΠΠ°Π΄Π°Π΄ΠΈΠΌ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Tag Ρ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΡΠ°Π²Π½ΡΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ 1, 2 ΠΈ 3, ΠΈ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΎΠ±ΡΠΈΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΡ OnClick Π΄Π»Ρ Π½ΠΈΡ :
procedure TForml.ButtonsClick(Sender: TObject);
begin
if not pFIBTransactionl.InTransaction then
pFIBTransactionl.StartTransaction;
pFIBStoredProcl.Params[0].Aslnteger := TButton(Sender).Tag;
try
pFIBStoredProcl.ExecProc;
pFIBTransactionl.Commit;
except
pFIBTransactionl.Rollback;
end;
end;
Π‘ΠΌΡΡΠ» ΠΊΠΎΠ΄Π° ΠΎΡΠ΅Π²ΠΈΠ΄Π΅Π½ - ΠΌΡ Π·Π°Π΄Π°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Tag Ρ ΠΊΠ½ΠΎΠΏΠΊΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ Π½Π°ΠΆΠ°Π» ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° ExecProc ΠΈ Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π°Π΅ΠΌ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ, Π»ΠΈΠ±ΠΎ ΠΎΡΠΌΠ΅Π½ΡΠ΅ΠΌ Π΅Π΅ Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΠ°ΠΌ ΠΎΡΡΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΡ OnEventAlert ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° SIBfibEventAlerterl:
procedure TForml . SIBf ibEvent Alerter 1 Event Alert (Sender : TObject ;
EventName: String, EventCount: Integer);
begin
ShowMessage(EventName + ' : ' + IntToStr(EventCount));
end;
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ EventName Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ΅Π΄ΡΠ΅Π³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ, a EventCount Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΠ±ΡΡΠΈΠΉ EventName. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° EventCount ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π·ΡΡΡΠ½Π΅Π½ΠΈΠΉ. ΠΡΠ°ΠΊ, ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΠΎΠ±ΡΡΠΈΡΠΌΠΈ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ ΡΠ΅Π°Π»ΡΠ½ΠΎ ΠΎΠ½ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ. ΠΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π΅ΡΠ»ΠΈ Π²Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ 'NEW_CUSTOMER' ΠΏΡΠΈ Π²ΡΡΠ°Π²ΠΊΠ΅ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² ΡΠ°Π±Π»ΠΈΡΡ, ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ Commit ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ Π²ΡΡΠ°Π²ΠΊΠΈ 1000 Π·Π°ΠΏΠΈΡΠ΅ΠΉ, ΡΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ OnEventAlert Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ Commit, ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° EventCount Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π½ΠΎ 1000. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ 1000 ΡΠ°Π·, Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π½ΠΎΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΎΠ±ΠΎ Π²ΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ, Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½ΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΠ»ΠΈ.
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡΡΡΠΈΡΡ Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π½Π° Π»ΡΠ±ΡΡ ΠΈΠ· ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ΅Π΄ΡΠ΅ΠΌ ΡΠΎΠ±ΡΡΠΈΠΈ, ΠΏΡΠΈΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΡΠΆΠ΅ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ, Π΅ΡΠ»ΠΈ Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΡΡΠ΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· ΠΈ Π΄Π°ΠΆΠ΅ Π½Π° ΡΠ°Π·Π½ΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°Ρ , Π²ΡΠ΅ ΠΊΠΎΠΏΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π½ΠΎΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΎ ΡΠΎΠ±ΡΡΠΈΡΡ .
"ΠΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²Π°Ρ" ΡΠ°Π±ΠΎΡΠ° Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌ Π±ΡΡΠ΅ΡΠΎΠΌ TpFIBDataSet
TpFIBDataSet Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌ Π±ΡΡΠ΅ΡΠΎΠΌ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ ΡΠ°Π½ΡΡΡΡ Π·Π°ΠΏΠΈΡΠΈ. Π ΠΎΠ±ΡΠ΅ΠΌ-ΡΠΎ, Π΄Π°Π½Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°ΡΡ TpFIBDataSet Π² Π°Π½Π°Π»ΠΎΠ³ TClientDataSet, ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° InterBase. ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π±ΡΠ΄Π΅Ρ, ΠΏΠΎΠΆΠ°Π»ΡΠΉ, ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³Π° Π²ΡΠ±ΠΎΡΠ°, ΡΠΎΡΡΠΎΡΡΠ΅Π³ΠΎ ΠΈΠ· Π΄Π²ΡΡ ΡΠΏΠΈΡΠΊΠΎΠ² (ΡΠΈΡ. 2.75).
Π ΠΈΡ 2.75. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ΅ΡΠ° TpFIBDataSet Π΄Π»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° Π²ΡΠ±ΠΎΡΠ°
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ EMPLOYEE.GDB, Π²Ρ ΠΎΠ΄ΡΡΡΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΏΠΎΡΡΠ°Π²ΠΊΡ InterBase ΠΈ FIBPlus. ΠΠΎΠΊΠ°ΠΆΠ΅ΠΌ Π·Π°ΠΏΡΠΎΡΡ Π΄Π»Ρ SourceDS:
SelectSQL:
SELECT
CUS.CUST_NO,
CUS.CUSTOMER
FROM
CUSTOMER CUS
ORDER BY CUS.CUSTOMER
UpdateSQL:
UPDATE CUSTOMER SET
CUSTOMER = ?CUSTOMER
WHERE
CUST_NO = ?OLD_CUST_NO
InsertSQL:
INSERT INTO CUSTOMER(
CUST_NO,
CUSTOMER
)
VALUES(
?CUST_NO,
?CUSTOMER
)
DeleteSQL:
DELETE FROM CUSTOMER
WHERE
CUST_NO = ?OLD_CUST_NO
RefreshSQL:
SELECT
CUS.CUST_NO,
CUS.CUSTOMER
FROM
CUSTOMER CUS
WHERE
(
CUS.CUST_NO = ?OLD_CUST_NO
)
Π’Π΅ ΠΆΠ΅ ΡΠ°ΠΌΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² TargetDS, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±Π»Π°Π΄Π°ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ ΠΏΠΎΠ»Π΅ΠΉ. ΠΡΠΊΡΠΎΠ΅ΠΌ ΠΎΠ±Π° Π·Π°ΠΏΡΠΎΡΠ° ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΡΠΌΡ:
procedure TDualListForm.FormCreate(Sender: TObject);
begin
SourceDS.Open;
TargetDS.CacheOpen;
end;
ΠΡΠ»ΠΈ ΠΌΡ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ Π² ΠΊΠΎΠ΄Π΅ ΡΠ²Π½ΠΎΠ³ΠΎ ΠΎΡΠΊΡΡΡΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΡΠΎ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Connected > ΠΊΠΎΠΌΠΏΠΎΠ½Π΅ΡΠ° TpFlBDatabase Π±ΡΠ»ΠΎ Π·Π°Π΄Π°Π½ΠΎ Π² True Π² design-time.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ TargetDS ΠΌΡ Π°ΠΊΡΠΈΠ²ΠΈΡΡΠ΅ΠΌ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° CacheOpen. ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π·Π°ΠΏΡΠΎΡ ΠΈΠ· SelectSQL, Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠ°Π²Π»ΠΈΠ²Π°Π΅Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ Π±ΡΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π·Π°ΠΏΡΠΎΡΠ° Π² SelectSQL. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ Π·Π°ΠΏΠΈΡΠΈ Π² Π»Π΅Π²ΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅ ΠΈ ΠΏΡΡΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ Π² ΠΏΡΠ°Π²ΠΎΠΌ. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΡ Π·Π°ΠΏΠΈΡΠΈ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° Π² Π΄ΡΡΠ³ΠΎΠΉ: