请教SQL查询语句(50分)

  • 主题发起人 主题发起人 ohmymother
  • 开始时间 开始时间
O

ohmymother

Unregistered / Unconfirmed
GUEST, unregistred user!
有两张表 A.日发数结算(书刊名,操作员,工号,期数,日期,发数)
B.日退数结算(书刊名,操作员,工号,期数,日期,退数)
做连接查询为以下形式
书刊名 操作员 工号 期数 日期 [red]发数 退数[/red]
--- --- --- --- --- --- ---

ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT A.退数,B.书刊名,B.期数,B.发数,B.日期,B.操作员,B.工号 ');
ADOQuery1.SQL.Add('FROM 日退数结算 AS A ,日发数结算 AS B ');
ADOQuery1.SQL.Add('WHERE A.书刊名=B.书刊名 and A.日期=B.日期 and A.工号=B.工号 and A.期数=B.期数 and B.日期 between :s0 and :s1 and [red]B.书刊名 like "%'+edit1.text+'%"'[/red]);
ADOQuery1.Parameters.ParamByName('s0').Value := DateTimePicker1.DateTime;
ADOQuery1.Parameters.ParamByName('s1').Value := DateTimePicker2.DateTime;

请教为什么[red] B.书刊名 like "%'+edit1.text+'%"'[/red]这个条件不起作用?
查询分析器里可以查出来,到程序里就不行。
 
你那個日期條件起作用了嗎?
 
数据库类型?? oracel 应为
'...like ''%'+edit1.text+'%'''
access :
'...like "*'+edit1.text+'*"'
 
這樣的語句不嚴謹啊,所以有的條件不起作用了
 
to qvbyaolin 前辈:
日期起作用了,就是这个不起作用(B.书刊名 like "%'+edit1.text+'%"),
edit1.text也传进SQL的。这个SQL写的是不好,但是不知道改怎么改,烦请前辈指教。

to bmsr 前辈:
我想这里是没有问题的,我用的是ACCESS。
 
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT A.退数,B.书刊名,B.期数,B.发数,B.日期,B.操作员,B.工号 ');
ADOQuery1.SQL.Add('FROM 日退数结算 AS A ,日发数结算 AS B ');
ADOQuery1.SQL.Add('WHERE (A.书刊名=B.书刊名) and (A.日期=B.日期) and (A.工号=B.工号) and (A.期数=B.期数) and (B.日期 between :s0 and :s1) and (B.书刊名 like "%'+edit1.text+'%")');
ADOQuery1.Parameters.ParamByName('s0').Value := DateTimePicker1.DateTime;
ADOQuery1.Parameters.ParamByName('s1').Value := DateTimePicker2.DateTime;

这样才试!
 
to lileisa 前辈:
我有试过还是一样。
 
你可以试试将(A.书刊名=B.书刊名) and (A.日期=B.日期) and (A.工号=B.工号) and (A.期数=B.期数)这些条件写到inner join 里面去
 
to xinjinren 前辈:
试了下您的方法
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT B.书刊名,B.期数,B.发数,B.日期,B.操作员,B.工号,A.退数 ');
ADOQuery1.SQL.Add('FROM 日退数结算 A inner join 日发数结算 B on B.书刊名=A.书刊名 and A.期数=B.期数 and A.日期=B.日期 and A.操作员=B.操作员');
ADOQuery1.SQL.Add('WHERE (B.日期 between :s0 and :s1) and (B.操作员 like "%' +edit2.text+ '%") ');
ADOQuery1.Parameters.ParamByName('s0').Value := DateTimePicker1.DateTime;
ADOQuery1.Parameters.ParamByName('s1').Value := DateTimePicker2.DateTime;
ADOQuery1.Open;

现在[red]B.操作员 like "%' +edit2.text+ '%"[/red]这个条件出来了,但是日期条件没了.[:(]
 
你把条件都写到inner join里面去好了[:D]
包括(B.日期 between :s0 and :s1) and (B.操作员 like "%' +edit2.text+ '%") '
 
多人接受答案了。
 
后退
顶部