
17.06.2009, 11:11
|
Прохожий
|
|
Регистрация: 11.06.2009
Сообщения: 7
Репутация: 10
|
|
ADOQuery вывод в TDBGrid
Как сделать так, чтобы в Grid выводился весь результат запроса, а не только по последнему слову?
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ADODB, DB, Grids, DBGrids;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Edit1: TEdit;
Edit2: TEdit;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBGrid2: TDBGrid;
DataSource2: TDataSource;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function StringToWords(T: string; List: Tstrings = nil): integer;
var
i, z: integer;
s: string;
c: Char;
procedure Check;
begin
if (s > '') and (List <> nil) then
begin
List.Add(S);
z := z + 1;
end;
s := '';
end;
begin
i := 0;
z := 0;
s := '';
if t > '' then
begin
while i <= Length(t) + 1 do
begin
c := t[i];
if (c in ['a'..'z']) or (c in ['A'..'Z']) or (c in ['а'..'я']) or
(c in ['А'..'Я']) and (c <> ' ') then
s := s + c
else
Check;
i := i + 1;
end;
end;
result := z;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Source, Dest, k1,k2,k3: Tstrings;
i,k,j: integer;
begin
Source := TstringList.Create;
Dest := TstringList.Create; // список слов фразы
k1 := TstringList.Create; // все окончания
k2 := TstringList.Create; // список окончаний
k3 := TstringList.Create;
k1.Add('ее|ие|ые|ое|ими|ыми|ей|ий|ый|ой|ем|им|ым|ом|его|ого|ему|ому|их|ых|ую|юю|ая|яя|ою|ею');
Source.Add('приветливый малыш с умом чудесным');
//Source.Add(Edit1.Text);
Edit1.Text:= 'приветливый малыш с умом чудесным';
for i := 0 to Source.Count - 1 do
begin
StringToWords(Source[i], Dest);
StringToWords(k1[i],k2);
Application.ProcessMessages;
end;
for i := 0 to k1.Count - 1 do
begin
StringToWords(k1[i],k2);
Application.ProcessMessages;
end;
{ for i := 0 to Dest.Count - 1 do
begin
ShowMessage(Dest[i]);
end; }
//*******КОНЕЦ ОБРАБОТКИ СЛОВ
for i:=0 to Dest.Count - 1 do
for k:=0 to k2.Count - 1 do
if StringReplace(Dest[i],k2[k],'',[rfIgnoreCase])<>Dest[i] then
begin
Memo1.Lines.Add(StringReplace(Dest[i],k2[k],'',[rfIgnoreCase]));
// ShowMessage(InttoStr(i));
Dest.Strings[i]:=StringReplace(Dest[i],k2[k],'',[rfIgnoreCase]);
end;
// ShowMessage(Dest.Text);
Edit2.Text:=Dest.DelimitedText;
// exit;
// end;
//********* организация запроса к БД
for i:=0 to Dest.Count - 1 do
begin
with Form1.ADOQuery1 do
// for k:=0 to k2.Count - 1 do
//ShowMessage(InttoStr(Length(Dest[i])));
if Length(Dest[i])>1 then begin
//k3[j]:=Dest[i]+k2[j];
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT Name');
ADOQuery1.SQL.Add('FROM WORDS');
//ADOQuery1.SQL.Add(Format('WHERE Name LIKE %s',[QuotedStr(Dest[i]+k2[k])]));
ADOQuery1.SQL.Add(Format('WHERE Name LIKE %s',[QuotedStr(Dest[i]+'%')]));
//ADOQuery1.SQL.Add(Format('WHERE Name LIKE %s',[QuotedStr(s[i]+'%')]));
ADOQuery1.Open;
while not Form1.ADOQuery1.eof do
begin
Memo1.Lines.Add(Form1.ADOQuery1.Fields[0].Text);
ADOQuery1.Next;
end;
end;
end;
//exit;
end;
end.
|