procedure TForm1.RadioGroup1Click(Sender: TObject);
var
   itemname,itemid,formname:string;
   i,formid:integer;
begin
   itemname:=radiogroup1.Buttons[radiogroup1.ItemIndex].Caption;
   if adoquery1.Locate('mingcheng',itemname,[loCaseInsensitive])=false then
      begin
      showmessage('找不到相应的子项目编号');
      exit;
      end;   itemid:=adoquery1.FieldByName('zhangid').AsString;
   formid:=adoquery1.FieldByName('zh').AsInteger;
  // showmessage(inttostr(formid));
   case formid of
     1:formname:='jixie';
     2:formname:='dianqi';
     3:formname:='reli';
     4:formname:='luyao';
     5:formname:='jingzhi';
     6:formname:='guandao';
     7:formname:='xiaofang';
     8:formname:='shuinuanqi';
     9:formname:='kongtiao';
     10:formname:='zidonghua';
     11:formname:='fanghu';
     12:formname:='zhineng';
     13:formname:='feiyong';
   end;
    checklistbox1.Items.Clear;
    adoquery2.Close;
    adoquery2.SQL.Clear;
    adoquery2.SQL.Text:='select * from :formname where zjh =:par2';
    //ADOQuery2.Parameters[0].Value:= formname;
    ADOQuery2.Parameters[1].Value:= itemid;
    adoquery2.Open;
   // showmessage(inttostr(adoquery2.recordcount));
   for i:=0 to adoquery2.recordcount-1 do
    begin
    checklistbox1.Items.Append(adoquery2.fieldbyname('mc').AsString);
    adoquery2.Next;
    end;
end;如果将:formname换成实际的表名称就可以了,高手们请帮忙!谢了!

解决方案 »

  1.   

    StringReplace(Query1.SQL.Text,':fromname',formname, rfReplaceAll);
      

  2.   

    就是说formname是个表示数据库表的名字,难道说表名是不能用变量来替代的?adoquery2.SQL.Text:='select * from jixie where zjh =:par2';
      //  ADOQuery2.Parameters[0].Value:= formname;
        ADOQuery2.Parameters[1].Value:= itemid;
    如果将:formname换成实际的表名jixie就可以了
    是怎么回事呢
    用ADOtable应该是可以的!
      

  3.   

    好像不行啊,incompatible types:'TReplaceFlags'and'Enumeration'
      

  4.   

    就是说formname是个表示数据库表的名字,难道说表名是不能用变量来替代的?
    ---------------------------------------------------------------
    可以用变量'select * from '+ formname +'';
      

  5.   

    哎,我也遇到類似的問題,
    在存儲過程中不能直接把表名、字段名當成參數。非用 exec 來執行一個語句字符串才行,
    用 exec 有個不好的就是前面所定義的變量將無效。select * from aTable where aField=@aValue
    select * from bTable where aField=@aValue
    =>
    create proc aProc
    @tblName varchar(30),
    @aValue varchar(30)
    as
    declare @sql varchar(1000)
    declare @tblName varchar(30)
    select @tblName=
    select @sql='select * from '+@tblName+' where aField='+@aValue+' '
    exec(@sql)
    GO
      

  6.   

    搶貼:有沒有高手幫幫忙,
    三層結構,改了 ClientDataset.CommandText(在原有SQL語句後面加 where 語句) 然後再 Open,居然不會返回記錄,這是怎麼回事呀?原貼地址:
    http://community.csdn.net/Expert/topic/4978/4978011.xml?temp=.4281275
      

  7.   

    谢谢 andyzhou1101
    'select * from '+ formname +'';成功了