请教大家一个关于SQL的万能查询的问题..........(50分)

  • 主题发起人 主题发起人 hj6
  • 开始时间 开始时间
H

hj6

Unregistered / Unconfirmed
GUEST, unregistred user!
我的意思是这样的,我把待查询的数据库的所有字段都用TEdit控件列出来,向这个例子我
用的是Delphi4自己带的DBDEMOS下的Country.db数据库,它有五个字段,我就用五个TEdit
来代表它的五个字段,以便让用户在TEdit里输入数据来查找出用户需要的数据。在这五个
代表字段的TEdit中任意一个字段、任意两个字段、任意三个字段、任意四个和五个字段全
部输入内容都能找到要找的记录(只要数据库里存在),并且在各个字段里输入的内容都
不必是数据库字段里的全部内容,只要是其中的一部分就行了。象在这个数据库里
的“Name”字段,我只要在TEdit1里输入“A”,按“Query”,那么
记录“Agentina ..... ...... ...... ......”就会显示出来。谢谢!!!
麻烦大家了。谢谢!!!我用Delphi4+Win95。谢谢!!!

 
inforpower就有这个功能
 
在TEdit的CHANGE事件中对记录过滤。
 
呵呵,我解决过这类问题的。
最后一个问题简单:Sql里用 like % 就可以了
前一个问题复杂一点,说下大概思路吧,要是觉得有用再给我加50分如何 :-)
我这里上网很贵,先下去整理一下,晚上说。





 
用动态的SQL
用五个 Like :XXX
对XXX赋值的时候用%
如果不填的话就用%%
这样就解决了
 
以下是我的源代码,编译运行都没问题,但是按Button1查询却什么也显示不出来,请诸位
大侠看看我的代码是不是有什么问题?谢谢!!!谢谢!!!
procedure TForm1.Button1Click(Sender: TObject);
var
SQL :string;
FirstAND : boolean;
begin
SQL := ' SELECT * FROM Country WHERE ';

FirstAND := false;
if Trim(Edit1.Text) <> '' then
Begin
SQL := SQL + ' Name like "''%'+Trim(Edit1.Text)+'%''"';
FirstAND := true;
end ;

if Trim(Edit2.Text) <> '' then
Begin
if FirstAND then
SQL := SQL + ' AND Capital like "''%'+Trim(Edit2.Text)+'%''"'
else
SQL := SQL + ' Capital like "''%'+Trim(Edit2.Text)+'%''"';
FirstAND := true;
end ;

if Trim(Edit3.Text) <> '' then
Begin
if FirstAND then
SQL := SQL + ' AND Continent like "''%'+Trim(Edit3.Text)+'%''"'
else
SQL := SQL + ' Continent like "''%'+Trim(Edit3.Text)+'%''"';
FirstAND := true;
end;

if Trim(Edit4.Text) <> '' then
begin
if FirstAND then
SQL := SQL + ' AND Area like "''%'+Trim(Edit4.Text)+'%''"'
else
SQL := SQL + ' Area like "''%'+Trim(Edit4.Text)+'%''"';
FirstAND := true;
end;

if Trim(Edit5.Text) <> '' then
begin
if FirstAND then
SQL := SQL + ' AND Population like "''%'+Trim(Edit5.Text)+'%''"'
else
SQL := SQL + ' Population like "''%'+Trim(Edit5.Text)+'%''"';
FirstAND := true;
end;

if FirstAND then
Begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(SQL);
Query1.Open;
end
else Application.MessageBox('你没有输入任何参数!','Find Error!',MB_OK);
end;

end.
 
注意:
''''表示一个'



>> SQL := SQL + ' Name like "''%'+Trim(Edit1.Text)+'%''"';
应改为:
SQL := SQL + ' Name like '+''''+'%'+Trim(Edit1.Text)+'%'+'''';

其他类推...
....

 
我是这样做的
如下:
object Edit1: TEdit
Left = 24
Top = 24
Width = 80
Height = 21
TabOrder = 0
end
object Edit2: TEdit
Left = 126
Top = 24
Width = 80
Height = 21
TabOrder = 1
end
object Edit3: TEdit
Left = 228
Top = 24
Width = 80
Height = 21
TabOrder = 2
end
object Edit4: TEdit
Left = 330
Top = 24
Width = 80
Height = 21
TabOrder = 3
Text = '0'
end
object Edit5: TEdit
Left = 432
Top = 24
Width = 80
Height = 21
TabOrder = 4
Text = '0'
end
object Button1: TButton
Left = 216
Top = 288
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 5
OnClick = Button1Click
end
object DBGrid1: TDBGrid
Left = 24
Top = 56
Width = 489
Height = 217
DataSource = DataSource1
TabOrder = 6
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'MS Sans Serif'
TitleFont.Style = []
end
object DataSource1: TDataSource
DataSet = Query1
Left = 144
Top = 64
end
object Query1: TQuery
DatabaseName = 'DBDEMOS'
SQL.Strings = (
'select * from Country'
'where (Name like :Name)'
'and (Capital like :Capital)'
'and (Continent like :Continent)'
'and (Area > :Area)'
'and (Population > :Population)'
'')
Left = 112
Top = 64
ParamData = <
item
DataType = ftUnknown
Name = 'Name'
ParamType = ptUnknown
end
item
DataType = ftUnknown
Name = 'Capital'
ParamType = ptUnknown
end
item
DataType = ftUnknown
Name = 'Continent'
ParamType = ptUnknown
end
item
DataType = ftUnknown
Name = 'Area'
ParamType = ptUnknown
end
item
DataType = ftUnknown
Name = 'Population'
ParamType = ptUnknown
end>
end


按钮的代码如下:

procedure TForm1.Button1Click(Sender: TObject);
begin
query1.close;
query1.Params[0].value:='%'+edit1.text+'%';
query1.Params[1].value:='%'+edit2.text+'%';
query1.Params[2].Value:='%'+edit3.text+'%';
query1.Params[3].Value:=StrToInt(edit4.text);
query1.Params[4].Value:=STrToInt(edit5.text);
query1.open;
end;

这样就行了


 
谢谢各位的大力支持和详细的讲解,谢谢!!!
 
后退
顶部