关于sql的组合查询(100分)

  • 主题发起人 主题发起人 jonyhuang
  • 开始时间 开始时间
J

jonyhuang

Unregistered / Unconfirmed
GUEST, unregistred user!
编制一个对SQL数据库查询时,想根据用户的选择(如:单位代码,姓名,编号,用户可以
从三个变量中选择一个到三个条件任意进行组合查询.

1.设置 TQuery 的 SQL属性
select fields from tab_pi
where (field1 = :name1 or :field1 = '')
and (field2 = :name2 or :field2 = '')
and (field3 = :name3 or :field3 = '')
.
.
.
(field1,2,3是需查询的字段名,name1,2,3是代表它的名称,field1,2,3对应name1,2,3)
2.设置 TQuery 的 params属性
把刚才建立的 name1,2,3的属性设好(data type 和 value(随便输入))(不须管它)
3.在程序中
with queryxxx do
begin
if active then close;
条件1
parambyname('name1').asstring(asintege等):=输入的查询值
条件2
parambyname('name2').asstring(asintege等) :=输入的查询值
条件3
parambyname('name3').asstring(asintege等):=输入的查询值
open;
end;
这段程序在查询本地的数据库时,用tquer通过没问题,但在用tadoquery查询服务器上的sql
表时就编译同不过,显示:[Error] testsongUnit.pas(61): Undeclared
identifier: 'parambyname'错误,用tquer却无法连上服务器,请问如何处理。谢谢!
jonyhuang
 
看帮助里面ADOQuery应该是Parameters属性。
用TQuery为何连不上数据库呢?
 
请问如何用tquery联上服务器上的sql表,adoquery使用ADOConnection接上,tquery1用啥
jonyhuang
 
query使用datasouce和数据库相连,

而datasource通过databasename和数据库相连,通过dataset和query相连.

懂了吗?
 
你应该用3个EDIT
然后如下
procedure AddQueryTj(Qry:Tquery;const FieldName,Value:string);
begin
With Qry do
begin
Sql.add(' And '+FieldName+'=:P '+FieldName);
ParamByName('p'+Fieldname).asstring:=Value;
end;
end;
调用
with query1 do
begin
close;
sql.clear;
sql.add('select * from youtable where 1=1')
if edit1.text<>'' then
AddQueryTj(query1,field1,edit1.text);
if edit2.text<>'' then
AddQueryTj(query1,field2,edit2.text);
if edit3.text<>'' then
AddQueryTj(query1,field3,edit3.text);
open;
end;
修改一下ADDQUERYTJ还可以进行别的 ><等运算
 
问个低级的问题:第二个field1前面的:是什么意思???????
 
改版
procedure AddQueryTj(Qry:Tquery;const Logical,FieldName,Oprt,Value:string);
begin
With Qry do
begin
If Logical='And' then
Sql.add(' And '+FieldName+Oprt+':P '+FieldName);
If Logical='Or' then
Sql.add(' Or '+FieldName+Oprt+':P '+FieldName);
ParamByName('p'+Fieldname).asstring:=Value;
end;
end;
调用
with query1 do
begin
close;
sql.clear;
sql.add('select * from youtable where 1=1')
if edit1.text<>'' then
AddQueryTj(query1,'And',field1,'=',edit1.text);
if edit2.text<>'' then
AddQueryTj(query1,'Or',field2,'<>'edit2.text);
if edit3.text<>'' then
AddQueryTj(query1,'and',field3,'=',edit3.text);
open;
end;

 
接受答案了.
 
后退
顶部