SELECT * FROM :Tname; 如何将Tname参数传递给SQL

解决方案 »

  1.   

    表名是不能通过参数传递的,只有动态生成SQL语句如:
    adoDataset.commandtext:='Select * from '+Tname;
    adoDataSet.open;
      

  2.   

    procedure TForm1.SearchSQL(TName: String);
    begin
       with ADOQuery1 do begin
        SQL.Clear;
        SQL.Text := 'SELECT * FROM' + TName;
        Open;
      end;
    end;
      

  3.   

    SQL.Text := 'SELECT * FROM' + TName;
    这里不对了,FROM后面没有加空格,一楼的对了!
      

  4.   

    ADOQuery1.SQL.Text :='SELECT * FROM :Tname';
    ADOQuery1.Parameters.ParamByName('Tname').Value:='Table Name';
      

  5.   

    !!!!!ADOQuery1.SQL.Text :='SELECT * FROM :Tname';
    ADOQuery1.Parameters.ParamByName('Tname').Value:='Table Name';!!!!!
    这样不行,没有这样用的。楼主可以考虑一楼的说法。
      

  6.   

    ADOQuery1.SQL.Text :='SELECT * FROM :Tname';
    ADOQuery1.Parameters.ParamByName('Tname').Value:='Table Name';
    两种方法都可以
      

  7.   

    ADOQuery1.SQL.Text :='SELECT * FROM :Tname';
    ADOQuery1.Parameters[0].value:='Table Name';
      

  8.   

    我的方法可以避免 SQL 注入 攻击
      

  9.   

    ADOQuery1.SQL.Text :='SELECT * FROM :Tname';
    ADOQuery1.Parameters.ParamByName('Tname').Value:='Table Name';
      

  10.   

    if adodataset.activex=true then
    begin
      admodataset.activex:=fasle;
      adodataset.close;
      adodataset.commandtext:='';
      adoDataset.commandtext:='Select * from '+Tname;
      adoDataSet.open;
    end;
      

  11.   

    SQL server里面,表名不能当然参数输入。但是可以用存储过程来实现参数
     DECLARE @SQL NVARCHAR(4000) 
        SET @SQL=N' select '+@a+' from '+"'"+@b+"'"+' right join '+"'"+@c+"'"+' on '+"'"+@b+"'"+'.'+@e+'='+"'"+@c+"'"+'.'+@e+' where @f' 
        EXEC sp_executesql @SQL 选动态生成SQL语句然后再执行就可以了。delphi可能也是这样吧。