有经验的大侠快来帮俺看看这个CGI程序,俺怎么也调不通!(200分)

  • 主题发起人 主题发起人 老Q
  • 开始时间 开始时间

老Q

Unregistered / Unconfirmed
GUEST, unregistred user!
页面上有两个单行文本框和一个下拉列表框,要求根据它们三个的组合
进行查询,如果其中一个不为空,另两个为空,则只根据这一个条件进
行查询;如果两个不为空,一个为空,则根据两个不为空的进行查询;
如果全部为空,则查询全部。代码如下:

procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
temp1,temp2,temp3:string;
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select * from cuoshi.db');
Query1.SQL.Add('Where jh<>''''');
temp1:='"'+Request.QueryFields.Values['jhname']+'"';
temp2:='"'+Request.QueryFields.Values['cslx']+'"';
temp3:='"'+Request.queryFields.values['csdate']+'"';
if temp1<>'' then
Query1.SQL.Add(' and jh= '+temp1);
if temp2<>'' then
Query1.SQL.Add(' and cslx= '+temp2);
if temp3<>'' then
Query1.SQL.Add(' and csdate= '+temp3);
Query1.Prepare;
Query1.Open;
if Query1.RecordCount=0 then begin
DataSetTableProducer1.Footer.Add('<P>对不起,找不到您刚才输入的资料<P>');
DataSetTableProducer1.Footer.Add('请您退回去,再输入条件重新查询<P>')
end;
DataSetTableProducer1.Footer.Add('</HTML>');
Response.Content:=DataSetTableProducer1.Content;
end;
 
Where jh<>'' 这里:
据我所知,在oracle,''是作为null处理的,jh<>'' 就如同 jh<>null
和null作比较,返回也是null,即使jh不是null,条件也不真,所以不能返回数据。

其它数据库我就不清楚是否如此了。
 
把Query1.SQL.Add('Where jh<>''''');改为
Query1.SQL.Add('Where **>0');
(**为某字段名,应为int类型)
 
where中的条件语句有问题
=======================
条件语句间的括号漏了,应该是:(条件1) and (条件2)...
 
肯定是你的组合的SQL语句有问题,把组合的SQL语句显示出来看一下
 
我不懂。
 
这个问题我自己已经解决了,谢谢大家热心帮助!
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
842
import
I
I
回复
0
查看
684
import
I
I
回复
0
查看
608
import
I
后退
顶部