end; {ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ}
end;
Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ ParamsΠΡΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π·Π½Π°ΡΡΠ΅Π³ΠΎ SQL. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π½Π΅ Π·Π½Π°Π΅Ρ ΡΡΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°. ΠΡΠ°ΠΊ, Π²Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ° ΠΊΠ°ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ SQL-Π·Π°ΠΏΡΠΎΡΠ°. Π Delphi, Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ SQL-Π·Π°ΠΏΡΠΎΡΠ° Π½Π° Π»Π΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ. ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². ΠΠ»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π² Π·Π°ΠΏΡΠΎΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅ (:), Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅ ΠΏΡΠΈΠΌΠ΅Ρ SQL-Π·Π°ΠΏΡΠΎΡΠ° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°:
select * from EMPLOYEE
where DEPT_NO = :Dept_no
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ, ΠΈΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΄Π»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Params ΠΎΠ±ΡΠ΅ΠΊΡΠ° Query1. Π©Π΅Π»ΠΊΠ½ΠΈΡΠ΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅ 'β¦'. ΠΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². ΠΡΠ±Π΅ΡΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Dept_no. ΠΠ°ΡΠ΅ΠΌ Π² Π²ΡΠΏΠ°Π΄Π°ΡΡΠ΅ΠΌ ΡΠΏΠΈΡΠΊΠ΅ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Integer. ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π·Π°Π΄Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π²Π²Π΅Π΄ΠΈΡΠ΅ Π½ΡΠΆΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΠΎΠ»Π΅ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Β«ValueΒ».
ΠΠ»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ SQL-Π·Π°ΠΏΡΠΎΡΠ° Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ²ΡΠ·Π°ΡΡ (bind). ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΌΠΎΠ³ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ, Π·Π°ΠΏΡΠΎΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ, Π° Π΄Π°Π½Π½ΡΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ. ΠΠ»Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Params ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ ParamByName. Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ Params ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ· ΡΠ΅Π±Ρ ΠΌΠ°ΡΡΠΈΠ² TParams. ΠΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π΅Π³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡ. ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°,
Query1.params[0].asInteger := 900;
Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ asInteger ΡΠΈΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΊΠ°ΠΊ ΡΠΈΠΏ Integer (Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΡ ΡΠ°ΠΌΠΎ Π·Π° ΡΠ΅Π±Ρ). ΠΡΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½ΠΎ ΡΠΎ, ΡΡΠΎ ΠΏΠΎΠ»Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ Integer. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΡΠΈΠΏ ΠΏΠΎΠ»Ρ VARCHAR(10), Delphi ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ . Π’Π°ΠΊ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠΎΠ³ Π±Ρ Π±ΡΡΡ Π·Π°ΠΏΠΈΡΠ°Π½ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
Query1.params[0].asString := '900';
ΠΈΠ»ΠΈ ΡΠ°ΠΊ:
Query1.params[0].asString := edit1.text;
ΠΡΠ»ΠΈ Π²ΠΌΠ΅ΡΡΠΎ Π½ΠΎΠΌΠ΅ΡΠ° ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π²Ρ Ρ ΠΎΡΠ΅Π»ΠΈ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, ΡΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ParamByName. ΠΠ°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ TParam Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
Query1.ParamByName('DEPT_NO').asInteger := 900;
Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 2 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΈΠΌΠ΅ΡΠ°.
ΠΠΈΡΡΠΈΠ½Π³ 2procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Query1.close; {ΠΠ΅Π°ΠΊΡΠΈΠ²ΠΈΡΡΠ΅ΠΌ Π·Π°ΠΏΡΠΎΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΌΠ΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎΡΡΠΈ }
if not Query1.prepared then
Query1.prepare; {Π£Π±Π΅Π΄ΠΈΠΌΡΡ ΡΡΠΎ Π·Π°ΠΏΡΠΎΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½}
{ΠΠ΅ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΈ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ.}
if edit1.text <> '' {ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π½Π° ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ ΠΏΡΡΡΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°} then
Query1.ParamByName('DEPT_NO').AsString := edit1.text
else Begin
Query1.ParamByName('DEPT_NO').AsInteger := 0;
edit1.text := '0';
end;
try {ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠΈΠΊ ΠΎΡΠΈΠ±ΠΎΠΊ}
Query1.Open; {ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π·Π°ΠΏΡΠΎΡ ΠΈ ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ }
except {ΡΠ΅ΠΊΡΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ}
On e : EDatabaseError do {e β Π½ΠΎΠ²ΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΎΡΠΈΠ±ΠΊΠΈ}
messagedlg(e.message, mtError, [mbOK],0); {ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ message ΠΎΠ±ΡΠ΅ΠΊΡΠ° e}
end; {ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ}
end;
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, ΠΏΠ΅ΡΠ²ΡΠΌ Π΄Π΅Π»ΠΎΠΌ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»ΠΈΠ²Π°ΡΡΡΡ Π·Π°ΠΏΡΠΎΡ. ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° prepare, Delphi ΠΏΠΎΡΡΠ»Π°Π΅Ρ SQL Π·Π°ΠΏΡΠΎΡ Π½Π° ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ. Π‘Π΅ΡΠ²Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°Π·Π±ΠΎΡ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π·Π°ΠΏΡΠΎΡΠ°. ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠ° ΡΠΎΡΡΠΎΠΈΡ Π² Π΅Π³ΠΎ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ ΡΠ°Π·Π±ΠΎΡΠ΅ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ. ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΎΠΉ Π·Π΄Π΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠ»ΡΠΆΠΈΡΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Π·Π°ΠΏΡΠΎΡΠ° ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΏΡΠΎΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½, ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΡΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π½ΠΎΠ²ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΈ Π·Π°ΠΏΡΠΎΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ Π΄Π°Π½Π½ΡΡΠ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠ³ Π²Π²Π΅ΡΡΠΈ Π½ΠΎΠΌΠ΅Ρ ΠΎΡΠ΄Π΅Π»Π°, ΠΈ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠ° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π»ΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΎΠ² ΡΡΠΎΠ³ΠΎ ΠΎΡΠ΄Π΅Π»Π°. Π ΠΊΠ°ΠΊ Π½Π°ΡΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π±Π»ΠΈΡΡ DEPARTMENT, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅ΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ ΠΈ ΠΎΡΠ΄Π΅Π»Π°ΠΌΠΈ?
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ TTable Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ Table1. ΠΠ»Ρ Table1 ΠΈΠΌΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ IBLOCAL, ΠΈΠΌΡ ΡΠ°Π±Π»ΠΈΡΡ β DEPARTMENT. DataSource2 TDatasource ΡΠ²ΡΠ·Π°Π½ Ρ Table1. Π’Π°Π±Π»ΠΈΡΠ° ΡΠ°ΠΊΠΆΠ΅ Π°ΠΊΡΠΈΠ²Π½Π° ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ Π·Π°ΠΏΠΈΡΠΈ Π² TDBGrid.
Π‘ΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ TQuery ΠΊ TTable β ΡΠ΅ΡΠ΅Π· TDatasource. ΠΡΡΡ Π΄Π²Π° ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠΏΠΎΡΠΎΠ±Π° ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ ΠΊΠΎΠ΄ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ ΡΠΎΠ±ΡΡΠΈΡ TDatasource OnDataChange. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π»ΠΈΡΡΠΈΠ½Π³ 3 Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΡΡΡ ΡΠ΅Ρ Π½ΠΈΠΊΡ.
ΠΠΈΡΡΠΈΠ½Π³ 3 β ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΡ OnDataChange Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉprocedure TForm1.DataSource2DataChange(Sender: TObject; Field: TField);
begin
Query1.Close;
if not Query1.prepared then Query1.prepare;
Query1.ParamByName('Dept_no').asInteger := Table1Dept_No.asInteger;
try
Query1.Open;
except On e : EDatabaseError do
messageDlg(e.message, mtError, [mbOK], 0);
end;
end;
Π’Π΅Ρ Π½ΠΈΠΊΠ° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ OnDataChange ΠΎΡΠ΅Π½Ρ Π³ΠΈΠ±ΠΊΠ°, Π½ΠΎ Π΅ΡΡΡ Π΅ΡΠ΅ Π»Π΅Π³ΡΠ΅ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Query ΠΊ ΡΠ°Π±Π»ΠΈΡΠ΅. ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ TQuery ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Datasource. ΠΠΏΡΠ΅Π΄Π΅Π»ΡΡ TDatasource Π΄Π»Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π° Datasource, ΠΎΠ±ΡΠ΅ΠΊΡ TQuery ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅Ρ ΠΈΠΌΠ΅Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π² SQL-Π·Π°ΠΏΡΠΎΡΠ΅ Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΏΠΎΠ»Π΅ΠΉ Π² TDatasource. Π ΡΠ»ΡΡΠ°Π΅ ΠΎΠ±ΡΠΈΡ ΠΈΠΌΠ΅Π½, ΡΠ°ΠΊΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π·Π°ΠΏΠΎΠ»Π½ΡΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 3 (*** ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π²ΡΡΠ΅ ***).
Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, ΡΠ΅Ρ Π½ΠΈΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Datasource Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ»Ρ ΠΏΠΎΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠ° ΠΊ ΡΠ°Π±Π»ΠΈΡΠ΅ DEPT_NO Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 4.
ΠΠΈΡΡΠΈΠ½Π³ 4 β Π‘Π²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ TQuery c TTable ΡΠ΅ΡΠ΅Π· ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ DatasourceΠΡΠ±Π΅ΡΠΈΡΠ΅ Ρ Query1 ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ SQL ΠΈ Π²Π²Π΅Π΄ΠΈΡΠ΅:
select * from EMPLOYEE
where DEPT_NO = :dept_no
ΠΡΠ±Π΅ΡΠΈΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Datasource ΠΈ Π½Π°Π·Π½Π°ΡΡΡΠ΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π΄Π°Π½Π½ΡΡ , ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ Table1 (Datasource2 Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅)
ΠΡΠ±Π΅ΡΠΈΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Active ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π΅Π³ΠΎ Π² True
ΠΡΠΎ Π²ΡΠ΅, Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΊΠΎΠΉ ΡΠΈΠΏ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΉ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ. Π ΠΏΡΠΈΠΌΠ΅ΡΡ, Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ Column ΠΈΠ»ΠΈ Table. ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠ°, Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΈΠΌΡ ΡΠ°Π±Π»ΠΈΡΡ, Π²Ρ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅Ρ Π½ΠΈΠΊΡ ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΠΈ ΡΡΡΠΎΠΊΠΈ. ΠΡΡΠ³Π°Ρ ΡΠ΅Ρ Π½ΠΈΠΊΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Format.
ΠΠΎΠΌΠ°Π½Π΄Π° FormatΠΠΎΠΌΠ°Π½Π΄Π° Format Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ (%s, %d, %n ΠΈ ΠΏΡ.) ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ,
Format('Select * from %s', ['EMPLOYEE'])
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π²ΡΡΠ΅ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π±ΡΠ΄Π΅Ρ 'Select * from EMPLOYEE'. Π€ΡΠ½ΠΊΡΠΈΡ Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎ Π΄Π΅Π»Π°Π΅Ρ Π·Π°ΠΌΠ΅Π½Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π·Π°ΠΌΠ΅Π½Π° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠ»Π΅Π²Π° Π½Π°ΠΏΡΠ°Π²ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ,
tblName := 'EMPLOYEE';
fldName := 'EMP_ID';
fldValue := 3;
Format('Select * from %s where %s=%d', [tblName, fldName, fldValue])
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ 'Select * from EMPLOYEE where EMP_ID=3'. Π’Π°ΠΊΠ°Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΡΡ Π³ΠΈΠ±ΠΊΠΎΡΡΡ ΠΏΡΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π·Π°ΠΏΡΠΎΡΠ°. ΠΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π½ΠΈΠΆΠ΅ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 5, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ²Π΅ΡΡΠΈ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°Ρ ΠΏΠΎΠ»Π΅ salary. ΠΠ»Ρ ΠΏΠΎΠ»Ρ salary ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π΄Π°Π²Π°ΡΡ ΠΊΡΠΈΡΠ΅ΡΠΈΠΈ.
ΠΠΈΡΡΠΈΠ½Π³ 5 β ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Format Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ SQL-Π·Π°ΠΏΡΠΎΡΠ°procedure TForm1.BitBtn1Click(Sender: TObject);
var
sqlString : string; {Π·Π΄Π΅ΡΡ Ρ ΡΠ°Π½ΠΈΡΡΡ SQL-Π·Π°ΠΏΡΠΎΡ}
fmtStr1, fmtStr2 : string; {Π·Π΄Π΅ΡΡ Ρ ΡΠ°Π½ΠΈΡΡΡ ΡΡΡΠΎΠΊΠ°, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΠ°Ρ Π΄Π»Ρ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ}
begin
{ Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ°ΡΠΊΠ°ΡΠ° Π·Π°ΠΏΡΠΎΡΠ° }
sqlString := 'Select EMP_NO %s from employee where SALARY %s';
if showSalaryChkBox.checked {ΠΡΠ»ΠΈ checkbox Salary ΠΎΡΠΌΠ΅ΡΠ΅Π½} then
fmtStr1 := ', SALARY'
else fmtStr1 := '';
if salaryEdit.text <> '' { ΠΡΠ»ΠΈ ΠΏΠΎΠ»Π΅ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Salary Π½Π΅ ΠΏΡΡΡΠΎΠ΅ } then
fmtStr2 := salaryEdit.text
else fmtStr2 := '>0';
Query1.Close; {ΠΠ΅Π°ΠΊΡΠΈΠ²ΠΈΡΡΠ΅ΠΌ Π·Π°ΠΏΡΠΎΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΌΠ΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎΡΡΠΈ }
Query1.SQL.Clear; {Π‘ΡΠΈΡΠ°Π΅ΠΌ Π»ΡΠ±ΠΎΠΉ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ Π·Π°ΠΏΡΠΎΡ}
Query1.SQL.Add(Format(sqlString,[fmtStr1, fmtStr2])); {ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ}
{ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΡΠΎΠΊΡ ΠΊ ΡΠ²ΠΎΠΉΡΡΠ²Ρ SQL}
try {ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠΈΠΊ ΠΎΡΠΈΠ±ΠΎΠΊ}
Query1.Open; {ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π·Π°ΠΏΡΠΎΡ ΠΈ ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ }
except {ΡΠ΅ΠΊΡΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ}
On e : EDatabaseError do {e β Π½ΠΎΠ²ΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΎΡΠΈΠ±ΠΊΠΈ}
messageDlg(e.message, mtError,[mbOK],0);
{ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ message ΠΎΠ±ΡΠ΅ΠΊΡΠ° e}
end; {ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ}
end;
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Ρ Clear ΠΈ Add ΡΠ²ΠΎΠΉΡΡΠ²Π° SQL. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Β«ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠΉΒ» Π·Π°ΠΏΡΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ΅ΡΡΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΠΈ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π³Π°ΡΠ°Π½ΡΠΈΠΈ ΡΡΠΎ Π½ΠΎΠ²ΡΠΉ Π·Π°ΠΏΡΠΎΡ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ ΠΆΠ΅ ΡΠ°Π±Π»ΠΈΡΡ ΠΈ ΡΡΠΎΠ»Π±ΡΡ, Delphi, ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° SQL, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΠΎΠ±ΡΠ°ΡΠ½ΡΡ Β«ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ΅Β» (unprepare). ΠΡΠ»ΠΈ TQuery Π½Π΅ Π±ΡΠ» ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½ (Ρ.Π΅. ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Prepared ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ Π² False), Delphi Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠ°Π²Π»ΠΈΠ²Π°Π΅Ρ Π΅Π³ΠΎ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ. ΠΠΎΡΡΠΎΠΌΡ Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π±Ρ Π±ΡΠ» Π²ΡΠ·Π²Π°Π½ ΠΌΠ΅ΡΠΎΠ΄ Prepare, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΡ ΡΡΠΎΠ³ΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ»ΡΠ·Ρ.