for col:= 1 to M.Columns do BEGIN
for row:= 1 to M.Rows do write(M[row, col]:5:1);
writeln;
END;
M.Free;
END.
ΠΠ°Π·Ρ Π΄Π°Π½Π½ΡΡ
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ db-ΡΠ°ΠΉΠ»Π° Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
uses DB, DBTables, StdCtrls;
procedure TForm1.Button1Click(Sender: TObject);
var
tSource, TDest: TTable;
begin
TSource:= TTable.create(self);
with tsTSource do begin
DatabaseName:= 'dbdemos';
TableName:= 'customer.db';
open;
end;
TDest:= TTable.create(self);
with TDest do begin
DatabaseName:= 'dbdemos';
TableName:= 'MyNewTbl.db';
FieldDefs.Assign(TSource.FieldDefs);
IndexDefs.Assign(TSource.IndexDefs);
CreateTable;
end;
TSource.close;
end;
ΠΠΎΡΡΡΠΏ
ΠΡΠ΅Π½Ρ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ
ΠΠ°Π½Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ BDE Π²Π½Π°ΡΠ°Π»Π΅ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠ°Π±Π»ΠΈΡΠ΅, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΎΠ½ Π½Π°ΡΠ½Π΅Ρ Ρ Π½Π΅ΠΉ ΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ°Π±Π»ΠΈΡΠ΅, ΠΎΠ½Π° ΠΊΡΡΠΈΡΡΠ΅ΡΡΡ ΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠ°Π±Π»ΠΈΡΠ΅ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠ΅Π³ΠΎ ΡΠ΅Π°Π½ΡΠ° (ΠΏΠΎΠΊΠ° TDatabase.Connection ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ True) ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ. ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΡΡΠΈΡΡΠ΅ΠΌΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈ ΠΏΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ BDE Π½Π°ΠΉΠ΄ΠΈΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ BDE CACHE = TRUE ΠΈ BDE CACHE DIR = 'C:\temp' ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³.
ΠΠ ΠΠΠΠ§ΠΠΠΠ:
ΠΡΠΈ Π»ΡΠ±ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΡΡΡΠΊΡΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΠΠ°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠ΄Π°Π»ΡΡΡ ΠΊΡΡ Π²ΡΡΡΠ½ΡΡ. ΠΠΌΡ ΡΠ°ΠΉΠ»Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ ΡΠ°Π½ΠΈΡΡΡ ΠΊΡΡ, ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ·Π½Π°ΡΡ, ΠΏΠΎΡΠΌΠΎΡΡΠ΅Π² Π² Π»ΡΠ±ΠΎΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ ΡΠ°ΠΉΠ» SCache.INI.
ΠΠΎΠΈΡΠΊ
ΠΠΎΠΈΡΠΊ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ ΠΏΡΠΈ Π²Π²ΠΎΠ΄Π΅
ΠΠ°ΠΊΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΡ Π²Π΅Π»ΠΈΡΠΈΠ½ Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π²Π²ΠΎΠ΄Π°? Π’Π°Π±Π»ΠΈΡΠ½ΡΠΉ ΠΊΡΡΡΠΎΡ (Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎ) Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΡΡ ΠΊ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ΅ΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Π½ΠΎΠ²ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π²ΠΎΠ΄ΠΈΠΌΠΎΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ.
ΠΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΊΠΎΠ΄ ΠΏΠΈΡΠ°Π»ΡΡ ΠΏΠΎΠ΄ Delphi 1. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΈ Π½Π΅ Π»ΡΡΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, Π½ΠΎ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
ΠΠ»Ρ ΠΏΠΎΠΈΡΠΊΠ° Π²Π΅Π»ΠΈΡΠΈΠ½Ρ ΡΠ°Π±Π»ΠΈΡΠ° Π΄Π΅ΡΠΆΠΈΡΡΡ ΠΎΡΠΊΡΡΡΠΎΠΉ. ΠΠ½Π΄Π΅ΠΊΡ Π΄ΠΎΠ»ΠΆΠ΅Π½, Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΡ ΠΏΠΎΠ»Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ EditBox. Π ΡΠ»ΡΡΠ°Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ EditBox, Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ FindNearest ΡΠ°Π±Π»ΠΈΡΡ TTable. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠ°Ρ Π²Π΅Π»ΠΈΡΠΈΠ½Π° ΡΠ½ΠΎΠ²Π° ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ ΡΠ²ΠΎΠΉcΡΠ²Ρ Text ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° EditBox.
Π― ΠΏΡΠΈΠ²Π΅Π» Π»ΠΈΡΡ ΠΎΠ±ΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ Π²ΠΊΠ»ΡΡΠ°Π» ΡΠ°ΠΉΠΌΠ΅Ρ Π½Π° ΠΏΠ΅ΡΠΈΠΎΠ΄ 1/3 ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΈ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ ΡΠΎΠ±ΡΡΠΈΡ OnTimer ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΠ» ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎΠΈΡΠΊΠ° (Ρ Π²ΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ°ΠΉΠΌΠ΅ΡΠ°). ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ»ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°Π±ΠΈΡΠ°ΡΡ Π±Π΅Π· Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ Π½ΡΠΆΠ½ΡΠΉ ΡΠ΅ΠΊΡΡ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΠΏΠΎΠΈΡΠΊ Π² ΡΠ°ΡΡΠ΅ΡΠ΅ Π½Π° Π²Π½ΠΎΠ²Ρ Π²Π²Π΅Π΄Π΅Π½Π½ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» (ΠΏΠΎΠΈΡΠΊ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΠ»ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ Π² 1/3 ΡΠ΅ΠΊΡΠ½Π΄Ρ).
ΠΠ°ΠΌ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ backspace ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»Π° Π² Π»ΡΠ±ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ ΡΡΡΠΎΠΊΠΈ.
ΠΠΌΠ΅ΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ EditBox (ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅), Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π΄ΡΡΠ³ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ListBox. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠ°ΠΊ:
procedure Edit1OnChange(β¦);
var i:integer;
begin
if not updating then exit; {ΡΠ΄Π΅Π»Π°ΠΉΡΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π³Π΄Π΅-Π½ΠΈΠ±ΡΠ΄Ρ Π΅ΡΠ΅ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΈ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΠΈ ΡΠ°ΠΉΠΌΠ΅ΡΠ°}
updating:= false;
Table1.FindNearest([Edit1.text]);
ListBox1.clear;
i:= 0;
while (i < 5) and (not (table1.eof)) do begin
listbox.items.add(Table1.fields[0].asString);
inc(i);
table1.next;
end;
listbox1.itemindex:= 0;
end;
ΠΡΡΡΡΡΠΉ ΠΏΠΎΠΈΡΠΊ Π² Π±Π°Π·Π°Ρ Π΄Π°Π½Π½ΡΡ
Π― ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡ Π½Π° ΠΠ°Ρ ΡΡΠ΄ ΡΡΠΈΠ»ΠΈΡΡ Π±ΡΡΡΡΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ . ΠΠ°Π½Π½Π°Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ ΠΏΠΎΠ»ΡΠΌ, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡ ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΡΡΠΎΠΊΠΈ (Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΡΡ Π² Π²Π΅ΡΡ Π½ΠΈΠΉ ΡΠ΅Π³ΠΈΡΡΡ, Π²ΠΊΠ»ΡΡΠ°Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΈΡΠ»Π°). ΠΠ°Π½Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ ΡΠ°ΠΌΡΠΌ Π±ΡΡΡΡΡΠΌ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π° ΠΏΠΎΠ²Π΅ΡΠΊΡ ΠΎΠ½ΠΎ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π±ΡΡΡΡΠ΅Π΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ , ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Π½ΡΡ ΠΌΠ½ΠΎΡ Π² ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅ (ΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ ΠΏΠΎΠ²Π΅Π·Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅). ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅, ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Ρ ΡΠ°Π²Π½ΠΎ 4.509375354, Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ°Π²Π½ΠΎ 7, Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΈΠ»ΠΈΡΠ° Π·Π°ΡΡΠΈΡΠ°Π΅Ρ "ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅". Π£ΡΠΈΠ»ΠΈΡΠ° ΡΠ΄ΠΎΠ±Π½Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΎΠ½Π° Π·Π° ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΡ ΠΎΠ΄ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΠΏΠΎΠΈΡΠΊ Π±ΠΎΠ»Π΅Π΅, ΡΠ΅ΠΌ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΠ»Π΅. ΠΡΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ, Π΅ΡΠ»ΠΈ Ρ ΠΠ°Ρ ΠΈΠΌΠ΅ΡΡΡΡ, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, Π΄Π²Π° ΠΏΠΎΠ»Ρ Ρ Π°Π΄ΡΠ΅ΡΠ°ΠΌΠΈ. ΠΡΠΎ ΠΌΠΎΡ ΠΏΠ΅ΡΠ²Π°Ρ "ΡΠ΅ΡΡΠ΅Π·Π½Π°Ρ" ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ²ΠΎΠ΅, Ρ ΡΠ΅ΠΌ Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ, ΠΈΠ·ΡΡΠ°Ρ Delphi, ΡΡΠ°Π»Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΏΠΎΠΈΡΠΊΠ° Π² Π»ΡΠ±ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅Π΅ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ . Π ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΠΈΡΠΊ β Π²Π΅ΡΡ ΡΠΎΠΆΠ΅ ΡΡΠ³ΡΠ±ΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠ°Ρ, ΠΊΠ°ΠΊ ΠΈ Π»ΡΠ±ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠΎ ΠΌΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΏΠΎΠ±ΠΎΡΠΎΡΡ ΡΠ²ΠΎΠΉ ΡΡΡΠ°Ρ ΠΏΠ΅ΡΠ΅Π΄ "ΠΊΡΡΡΡΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ" ΠΈ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΉ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ, ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠΈΠ²ΡΠΈΠΉ ΠΌΠ΅Π½Ρ (ΠΈ, Π½Π°Π΄Π΅ΡΡΡ, Π΄ΡΡΠ³ΠΈΡ ) ΡΠ²ΠΎΠ΅ΠΉ ΡΠΊΠΎΡΠΎΡΡΡΡ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ "ΠΌΡΠ»ΡΡΠΈ"-ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΠΏΠΎΠ»ΡΠΌ. Π― Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΠΎΠ½ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΡΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌ, ΠΊΡΠΎ ΡΠ°ΡΡΠΎ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌΠΈ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ. Π’Π΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π»Π΅Π³ΠΊΠ° Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ, Π½ΠΎ Π΅ΡΠ»ΠΈ Ρ ΠΠ°Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π²ΠΎΠΏΡΠΎΡΡ, ΠΏΠΎΡΠ»ΠΈΡΠ΅ ΠΌΠ½Π΅ ΠΏΠΈΡΡΠΌΠΎ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΠΏΠΎΡΡΠΎΠΉ, Ρ Π±ΡΠ΄Ρ ΡΠ°Π΄ ΠΠ°ΠΌ ΠΏΠΎΠΌΠΎΡΡ. ΠΠΎΡΠΌΠΎΡΡΠ΅Π² ΠΊΠΎΠ΄, ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠ·Π½Π°ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠΈΠΏΡ ΠΏΠΎΠ»Π΅ΠΉ (Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΠ΅ Π½Π΅ ΡΠΎΡΡΠ°Π²ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ). ΠΡΠ»ΠΈ ΠΊΡΠΎ-Π»ΠΈΠ±ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡ ΠΎΡΠΈΠ±ΠΎΡΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ ΡΠ°ΡΡΠΈΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΡΡΠΈΠ»ΠΈΡΡ, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΠΎΡΠ»ΠΈΡΠ΅ ΡΡΠΎ ΠΌΠ½Π΅, Ρ Π±ΡΠ΄Ρ Π²Π΅ΡΡΠΌΠ° Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ.
unit Finder;
interface
uses DB, DBTables, SysUtils;
function GrabMemoFieldAsPChar(TheField: TMemoField): PChar;
function DoFindIn(TheField: TField; SFor: String): Boolean;
function FindIt(TheTable : TDataSet; TheFields: array of integer; SearchBackward: Boolean; FromBeginning: Boolean; SFor: String): boolean;
{ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ FindIt β if FindIt(NotesSearchT, [NotesSearchT.FieldByName('Leadman').Index], False, True, SearchText.Text) then DoSomething; }
implementation
function GrabMemoFieldAsPChar(TheField: TMemoField): PChar;
begin
with TBlobStream.Create(TheField, bmRead) do begin
GetMem(Result, Size + 1);
FillChar(Result^, Size + 1, #0);
Read(Result^, Size);
Free;
end;
end;
function DoFindIn(TheField : TField; SFor : String): Boolean;
var
PChForMemo: PChar;
begin
Result:= False;
case TheField.DataType of
ftString: begin
if (Pos(SFor, UpperCase(TheField.AsString))> 0) then Result := True;
end;
ftInteger: begin
if (Pos(SFor, TheField.AsString)> 0) then Result:= True;
end;
ftBoolean: begin
if SFor = UpperCase(TheField.AsString) then Result:= True;
end;
ftFloat: begin
if (Pos(SFor, TheField.AsString) > 0) then Result := True;
end;
ftCurrency: begin
if (Pos(SFor, TheField.AsString) > 0) then Result := True;
end;
ftDate..ftDateTime: begin
if (Pos(SFor, TheField.AsString) > 0) then Result := True;
end;
ftMemo: begin
SFor[Ord(SFor[0]) + 1]:= #0;
PChForMemo:= GrabMemoFieldAsPChar(TMemoField(TheField));
StrUpper(PChForMemo);
if not (StrPos( PChForMemo, @SFor[1] ) = nil) then Result:= True;
FreeMem(PChForMemo, StrLen(PChForMemo + 1));
end;
end;
end;
function FindIt(TheTable: TDataSet; TheFields: array of integer; SearchBackward: Boolean; FromBeginning: Boolean; SFor: String): boolean;
var
i, HighTheFields, LowTheFields: integer;
BM: TBookmark;
begin
TheTable.DisableControls;
BM:= TheTable.GetBookmark;
try
LowTheFields:= Low(TheFields);
HighTheFields:= High(TheFields);
SFor:= UpperCase(SFor);
Result:= False;
if FromBeginning then TheTable.First;
if SearchBackwardthen begin
TheTable.Prior;
while not TheTable.BOF do begin
for i:= LowTheFields to HighTheFields do begin
if DoFindIn(TheTable.Fields[TheFields[i]], SFor) then begin
Result := True;
Break;
end;
end;
if Result then Break else TheTable.Prior;
end;
end else begin
TheTable.Next;
while not TheTable.EOF do begin
for i:= LowTheFields to HighTheFields do begin
if DoFindIn(TheTable.Fields[TheFields[i]], SFor) then begin
Result:= True;
Break;
end;
end;
if Result then Break else TheTable.Next;
end;
end;
finally
TheTable.EnableControls;
if not Result then TheTable.GotoBookmark(BM);
TheTable.FreeBookmark(BM);
end;
end;
end.
ΠΠ°Π»ΡΠΊΡΠ»ΡΡΠΈΡ
Π₯ΠΈΡΡΠΎΡΡΡ OnCalcFields
Π‘ΠΎΠ±ΡΡΠΈΠ΅ OncalcFields Π³Π΅Π½Π΅ΡΠΈΡΡΡ ΠΠ§ΠΠΠ¬ ΡΠ°ΡΡΠΎ ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΠ°Π±Π»ΠΈΡΠ° Ρ Π½Π΅ΠΊΠΈΠΌ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΠΌ ΠΏΠΎΠ»Π΅ΠΌ, ΠΈ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ°Π±Π»ΠΈΡΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄: