如何在TQuery中依用户的选择对不同条件进行查询(50分)

  • 主题发起人 主题发起人 wjxhjk
  • 开始时间 开始时间
W

wjxhjk

Unregistered / Unconfirmed
GUEST, unregistred user!
我在编制一个对SQL数据库查询时,想根据用户的选择(如:单位代码,姓名,编号,用户可以从三个变量中选择不确定的变量并输入要查询的变量值)进行查询,请问各位大虾如何进行实现?!!!
 
对 SELECT 语句的 WHERE 部分单做函数。
function Condition(b1, b2, b3: Boolean; s1, s2, s3): String;
...
 
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是代表它的名称)
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;
 
用三个EDIT
在QUERY 中如下写
WITH QUERY1 DO
BEGIN
CLOSE;
SQL。CLEAR;
SQL。ADD(’SELECT * FROM YOUR TABLE WHERE DWBH IS NOT NULL‘);
IF EDIT1。TEXT<>'' THEN
BEGIN
SQL.ADD(' AND FIELD1=:FIELD1');
PARAMBYNAME('FIELD1').ASSTRING:=EDIT1.TEXT;
END;
IF EDIT2。TEXT<>'' THEN
BEGIN
SQL.ADD(' AND FIELD2=:FIELD2');
PARAMBYNAME('FIELD2').ASSTRING:=EDIT2.TEXT;
END;

IF EDIT3。TEXT<>'' THEN
BEGIN
SQL.ADD(' AND FIELD3=:FIELD3');
PARAMBYNAME('FIELD3').ASSTRING:=EDIT3.TEXT;
END;
OPEN;
END;
用这种方法可以进行多个条件的组合查询,关键在找出WHERE 后面的始终成立的条件
如以上用的单位编号非空
 
用条件控制参数了,就是上面几位的方法。
 
用三个radiobox后跟三个edit
当选则时使edit有效,用户可输入条件,此时param..亦有效
然后:

sql:

select fields{if radioboxa.check then add(field1......)....}
from tab_pi
where {if radioboxa.check then add(field1 = :name1 or :field1 = '')}....
.
当然“,”不要忘了加 .
.
(field1,2,3是需查询的字段名,name1,2,3是代表它的名称)
if radiobox1.checked then
parambyname('name1').asstring(asintege等):=edit1.text
if radiobox2.checked then
parambyname('name2').asstring(asintege等) :=edit2.text
if radiobox3.checked then
parambyname('name3').asstring(asintege等):=edit3.text
类型转换也别忘了
 
var
sqlstring:String;
begin
Query.SQL.Clear;
Query.SQL.Add('Select * from Tabl');
if Edit1.Text<>'' then sqlstring:=sqlstring+'and Field1='+Edit1.Text;
if Edit2.Text<>'' then sqlstring:=sqlstring+'and Field2='+Edit2.Text;
if Edit3.Text<>'' then sqlstring:=sqlstring+'and Field3='+Edit3.Text;
if sqlstring<>'' then sqlstring:=Copy(sqlstring,5,Length(sqlstring)-5)
if sqlstring<>'' then Query1.SQL.add('Where '+sqlstring);
 
首先向各位表示感谢。不过我在用xiaonan 的方法时,在程序运行进行查询时,提示
出错,具体信息如下:
Project rkbc.exe raised exeception class EDBEngineError with message
'Invalid use of keyword'.
Token:).
另:liuchuanbo 提示别忘记加 ',',请问应把它加在哪儿。
请各位大虾继续赐教。
 
请各位大虾继续赐教。
 
多人接受答案了。
 
后退
顶部