当我用下面这段代码,调用的是本地数据库时,运行后能实现查询功能。
procedure TQprecForm.Button1Click(Sender: TObject);
begin
  With Query1 Do
  begin
    close;
    SQL.clear;
    SQL.Add('SELECT NUM,PNAME,PAGE FROM MP');
    SQL.Add('WHERE PNAME=:Name');
    ParamByName('Name').AsString:=NameEdit.Text;
    if not Prepared then
    Prepare;
    Open;
  end;
end;
但当我调用服务器上的Oracle数据库中的表时,运行成功但是输入与库表相匹配的数据后,DBGrid上显示的数据却都是空值。
而当我用
With Query1 Do
  begin
    close;
    SQL.clear;
    SQL.Add('SELECT NUM,PNAME,Page FROM MP');
    SQL.Add('WHERE PName='+''''+NameEdit.Text+'''');
    Open;
  end;
这段代码时,输入同样的查询值,在DBGrid就能显示出数据。
问题是不是出在调用远程数据库上?
那在调用远程数据库时,带参数的SQL应该怎么写?
请大家帮忙!!谢谢!!

解决方案 »

  1.   

    你上面写的SQL语句是正确的,是不是你哪个地方搞错了?
      

  2.   

    跟踪一下看最后的SQL语句是什么,应该不是你想的吧
      

  3.   

    那如何跟踪SQL呢!
    请指教!
      

  4.   

    用Delphi的SQL Montior
    如果是SQLServer还可以是使用事件探查器,Oracle不知道用什么东东
      

  5.   

    procedure TQprecForm.Button1Click(Sender: TObject);
    begin
      With Query1 Do
      begin
        close;
        SQL.clear;
        SQL.Add('SELECT NUM,PNAME,PAGE FROM MP');
        SQL.Add('WHERE PNAME='':Name''');//试一下这样
        ParamByName('Name').AsString:=NameEdit.Text;
    //或者你可以将这句改为    ParamByName('Name').AsString:=QuoteStr(NameEdit.Text);
        if not Prepared then
        Prepare;
        Open;
      end;
    end;
      

  6.   

    问题是不是出在调用远程数据库上?
    不是。那在调用远程数据库时,带参数的SQL应该怎么写?
    With Query1 Do
      begin
        close;
        SQL.clear;
        SQL.Add('SELECT NUM,PNAME,PAGE FROM MP');
        SQL.Add('WHERE PNAME=:Name');
        ParamByName('Name').AsString:=QuoteStr(NameEdit.Text);
    //或者ParamByName('Name').AsString:=''''+NameEdit.Text+'''';
        if not Prepared then
        Prepare;
        Open;
      end;
      

  7.   

    有意思 关注下 其实你可以用个弹出框来显示你最后提交的SQL语句 看看是不是对 不过我看不出哪错了 或许象楼上说的QuoteStr(NameEdit.Text);
      

  8.   

    在Delphi中使用SQL语言时,要注意一点,我们是用字符串格式调用的。
    'WHERE PNAME=:Name' 这句表示 当 PNAME 等于 :Name 时。
    而'WHERE PName='+''''+NameEdit.Text+'''' 也可以写成 'WHERE PName='''+NameEdit.Text+'''' 表示 当 PName 等于 一个字符串 时(这个字符串的内容为NameEdit.Text),我在编程中也遇到类似的问题,后来就这样解决了。