sql:select xingming,xuehao from banji where xingming like ('%王%') and xuehao like ('%21%')delphi:
 with Query1 do
      begin
      close;
      sql.Clear ;
      sql.add('select xingming,xuehao from banji  where xingming like  :a1  :a2  xuehao like :a3  ');
      parambyname('a1').asstring :='%'+trim(edit1.text)+'%';
      parambyname('a2').asstring :=combobox1.text;
      parambyname('a3').asstring :='%'+trim(edit2.text)+'%';
      open    ;
      end;
变量 a1 是输入的姓名,a3 是输入的学号,a2 是输入的连接符 可以使and 或者 or执行时提示出错在:a2这里。xingming like  :a1 是没有错的。
请问这个怎么写。谢谢。

解决方案 »

  1.   

    你这样输入的SQL语句变成了:
    select xingming,xuehao from banji where xingming like '%某某%' 'and' xuehao like '%xx%'
    这样就错了。连接符不能用参数的形式。你这个可以用IF语句判断,或者拼接字符串的形式。
      

  2.   

    显然%的旁边并无like所必须的引号。
    parambyname('a1').asstring :=quotedstr('%'+trim(edit1.text)+'%');
    依次类推
      

  3.   


      with Query1 do begin
        close;
        sql.Text:='select xingming,xuehao from banji where xingming like '
                 +QuotedStr('%'+trim(edit1.text)+'% ')
                 +combobox1.text
                 +' xuehao like '
                 +QuotedStr(' %'+trim(edit2.text)+'%');
        open ;
      end;
      

  4.   

    :a1 的方式(绑定变量)在oracle里效率比较高。
    不过也有缺点,当绑定的变量作为字段名称的时候是不能使用group by的。
      

  5.   

    like后面应该是 '% %'这样的,SQL里面的'号,可以用chr(39)来代替
      

  6.   

    用变量like :a1 '+combobox1.text+' xuehao
      

  7.   

    lz 你想实现的是在combobox1中选择哪个连接语句,sql就怎么执行。
    例如:
    combobox1中选择的是and那么sql语句中就是and连接,是or就是or连接对吧。
    首先你的思路是错误的,delphi中不连接不能用参数。想实现你的功能,可以用if实现。
    例如:
    if combobox1.text=and then
    begin
    …………
    end
    else
    if combobox1.text=or then
    begin
    ……
    end;
    这样就可以实现你的功能了,虽说有点麻烦。
      

  8.   

    不好意思写错了!!!!!汗!!!

    if combobox1.Items=0 then
    begin
    ……
    end
    else
    if…………
      

  9.   

    if combobox1.itemindex=0 then
    begin
    ^^^^^
    end
    else
    if^^^^^^^^
    我日,平常有提示,还真没注意过这些细节!