三个表联接成一个adoqbase,运行时却提示无ta参数parameter ta not found,请帮我分析一下是什么原因?Thanks!
  with AdoqBase do
  begin
    sql.Clear;
    sql.Add('select storage.No,Materiel.name,materiel.spec,');
    sql.Add('materiel.units,materiel.weight,materiel.PartNo,');
    sql.add('materiel.ClientPartNo,storage.Num,storage.DepotNo,') ;
    sql.add('Depot.DepotName  from storage ');
    sql.Add('left join Materiel on Storage.No=Materiel.No');
    sql.Add('left join Depot on storage.DepotNo=Depot.DepotNo');
    sql.Add('where storage.no=:ta');
    Parameters.ParamValues['ta']:='S57701';
  end;改为下面代码仍然提示:parameter ta not found
  with AdoqBase do
  begin
    sql.Clear;
    sql.Add('select storage.No,Materiel.name,materiel.spec,');
    sql.Add('materiel.units,materiel.weight,materiel.PartNo,');
    sql.add('materiel.ClientPartNo,storage.Num,storage.DepotNo,') ;
    sql.add('Depot.DepotName  from storage ');
    sql.Add('left join Materiel on Storage.No=Materiel.No');
    sql.Add('left join Depot on storage.DepotNo=Depot.DepotNo');
    sql.Add('where storage.no=:ta');
    Parameters.Refresh;
    Parameters.ParamValues['ta']:='S57701';
  end;再改为下面代码提示:列名'S57701'无效
with AdoqBase do
  begin
    sql.Clear;
    sql.Add('select storage.No,Materiel.name,materiel.spec,');
    sql.Add('materiel.units,materiel.weight,materiel.PartNo,');
    sql.add('materiel.ClientPartNo,storage.Num,storage.DepotNo,') ;
    sql.add('Depot.DepotName  from storage ');
    sql.Add('left join Materiel on Storage.No=Materiel.No');
    sql.Add('left join Depot on storage.DepotNo=Depot.DepotNo');
    sql.Add('where storage.no='+ 'S57701');
  end;各位大侠,再帮忙啊,TKS!

解决方案 »

  1.   

    with AdoqBase do
      begin
        sql.Clear;
        sql.Add('select storage.No,Materiel.name,materiel.spec,');
        sql.Add('materiel.units,materiel.weight,materiel.PartNo,');
        sql.add('materiel.ClientPartNo,storage.Num,storage.DepotNo,') ;
        sql.add('Depot.DepotName  from storage ');
        sql.Add('left join Materiel on Storage.No=Materiel.No');
        sql.Add('left join Depot on storage.DepotNo=Depot.DepotNo');
        sql.Add('where storage.no=:ta');
        Parameters.Refresh;                 <-----没有打开数据集怎么能进行这样的操作?
        Parameters.ParamValues['ta']:='S57701';
      end;
      

  2.   

    TO:suuare(督察) 那该怎么办啊?
      

  3.   

    TO:angle097113(深思不解) 是字符型的Varchar
    TKS!
      

  4.   

    sql.Add('where storage.no='+ 'S57701');
    这样付值是不对的,因为引号的问题
    可以这样写
    sql.add(format(' where storage.no=''%s'' ',['S57701']));
    也可以这样的
    sql.Add('where storage.no='+ '''S57701''');
    我没看出第一种方法的错误只看where前面应该有空格,
    不过我常这样用的
    Parameters.Parambyname('ta').value:='S57701'
      

  5.   

    var
      p:TParameter;......  p:=ADOQuery1.Parameters.AddParameter;
      p.Name:='ta';
      p.DataType:=ftString;
      p.Value:='aaa';这样试试看行不行
      

  6.   

    with AdoqBase do
      begin
        sql.Clear;
        sql.Add('select storage.No,Materiel.name,materiel.spec,');
        sql.Add('materiel.units,materiel.weight,materiel.PartNo,');
        sql.add('materiel.ClientPartNo,storage.Num,storage.DepotNo,') ;
        sql.add('Depot.DepotName  from storage ');
        sql.Add('left join Materiel on Storage.No=Materiel.No');
        sql.Add('left join Depot on storage.DepotNo=Depot.DepotNo');
        sql.Add('where storage.no=:ta');
        open;
        Parameters.Refresh;
        Parameters.ParamValues['ta']:='S57701';
      end;
      

  7.   

    sql.Add('left join Materiel on Storage.No=Materiel.No //这里要一个空格');
        sql.Add('left join Depot on storage.DepotNo=Depot.DepotNo //这个也要');
        sql.Add('where storage.no=:ta');
      

  8.   

    谢谢各位,下面已搞定,估计是我的DELPHI运行过久出了点问题。  with AdoqBase do
      begin
        sql.Clear;
        sql.Add('select storage.No,Materiel.name,materiel.spec,');
        sql.Add('materiel.units,materiel.weight,materiel.PartNo,');
        sql.add('materiel.ClientPartNo,storage.Num,storage.DepotNo,') ;
        sql.add('Depot.DepotName  from storage ');
        sql.Add('left join Materiel on Storage.No=Materiel.No');
        sql.Add('left join Depot on storage.DepotNo=Depot.DepotNo');
        sql.Add('where storage.no=:ta');
        Parameters.ParamValues['ta']:='s57701';
      end;
      

  9.   

    将最后一种方法的这句
    sql.Add('where storage.no='+ 'S57701');改成:
    sql.Add('where storage.no=''S57701''');
      

  10.   

    为什么只有这样才行啊?
    Parameters.Parambyname('ta').value:='S57701'