Procedure form1.aqClick(Sender :Tobject);
begin
  DM.ADOQuery1.Close;
  DM.ADOQuery1.SQL.Clear;
  DM.ADOQuery1.SQL.Add('SELECT * FROM MatterMain where (Pro_No=:a)order by Mat_No DESC');
  DM.ADOQuery1.ParamByName('a').AsString:=Edit1.Text;
  DM.ADOQuery1.Open;
end;  
一进行就出错了!
不知为什么???
如果把  DM.ADOQuery1.SQL.Add('SELECT * FROM MatterMain where (Pro_No=:a)order by Mat_No DESC');
改为:  DM.ADOQuery1.SQL.Add('SELECT * FROM MatterMain where (Pro_No=Edit1.Text) order by Mat_No DESC');
不用动态参数可也同样出错!
可在我以前学C++Builder里可以的哦!

解决方案 »

  1.   

    'SELECT * FROM MatterMain where Pro_No=''' + Edit1.Text + ''' order by Mat_No DESC'
      

  2.   

    DM.ADOQuery1.ParamByName('a').AsString:=Edit1.Text;
    ->DM.ADOQuery1.ParamByName('a').Value:=Edit1.Text;
      

  3.   

    可以按楼上的试试
    你这句
      DM.ADOQuery1.SQL.Add('SELECT * FROM MatterMain where (Pro_No=Edit1.Text) order by Mat_No DESC');
    是把edit1.text当作字符串中的一部分了,当然要出错了
      

  4.   

    DM.ADOQuery1.ParamByName('a').AsString:=Edit1.Text;change:DM.ADOQuery1.Parameters.ParamByName('a').AsString :=Self.Edit1.Text;
      

  5.   

    谢谢各位!
    它的错误提示为
    Undeclared identifier:'Parambyname'
    Missing operator or semicolom
    Could not compile used unit 'Unit1.pas'
      

  6.   

    DM.ADOQuery1.ParamByName('a').AsString:=Edit1.Text;
    ->DM.ADOQuery1.Parameters.ParamByName('a').Value:=Edit1.Text;
      

  7.   

    DM.ADOQuery1.Parameters[0].value:=Edit1.Text;
      

  8.   

    AdoQuery设置动态参数的方法是这样写的,你的写法使用Query的方法,改一下吧
    DM.ADOQuery1.Parameters.ParamByName('a').AsString :=Self.Edit1.Text;