全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1160
推到 Plurk!
推到 Facebook!

表名可以作为动态参数吗

答題得分者是:cashxin2002
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-09 13:38:09 IP:218.70.xxx.xxx 未訂閱
大大: 请问表名可以作 为动态参数吗? 我用的delphi6 和oracle8.16 commandtext 中语句如下: select * from :tablename 但是当我到这一步时 adodataset1.Parameters.ParamByName('tablename').Value :='FF'; 报“ora-00903 无效表名” 的错误,这是为什么? 在问一下如何在调试的时候,知道动态参数到底接受的是什么数值? 我用showmessage(adodataset1.commandtext)显示的是写的原sql语句 select * from :tablename 如何实现显示select * from FF的讯息呢? 有劳各位大大了! 發表人 - zzmbeyond01 於 2004/03/09 13:42:36
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-09 14:23:36 IP:210.65.xxx.xxx 未訂閱
Hi zzmbeyond01,    
procedure TForm1.Button3Click(Sender: TObject);
var
    TableName : String;
begin
    TableName := 'TAS_DATA';
    ADODataSet1.Close;
    ADODataSet1.CommandText := 'select :p_input,t.* from '   TableName   ' t where tas_id = :p_tas_id';
    ADODataSet1.Parameters.ParseSQL(ADODataSet1.CommandText,True);
    ADODataSet1.Parameters.ParamByName('p_input').Value := 'InputText';
    ADODataSet1.Parameters.ParamByName('p_tas_id').Value := '0000002';
    ADODataSet1.Open;
end;
動態參數可以放在 Select 的語法中,也已在 Where 的條件句中(一般用法是用條件句中),但是不可以取代 Table Name,因此必須改用上述方法,於程式中將 CommandText 於程式中組合好後,再交由 DB 執行 發表人 -
------
Fishman
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-09 14:39:23 IP:63.84.xxx.xxx 未訂閱
您好﹗    小弟在實作中通常會使用如下的方法﹕ 1﹒建立TableName變數宣告﹐動態指定SQL語法中將使用到的TableName 2﹒使用StringReplace函數來更新真正的TableName    範例﹕
public
    { Public declarations }
  TableNameFirst, TableNameSecond, TableNameMonth : String;    procedure TForm17.ComboBox1Change(Sender: TObject);
begin
  if ComboBox1.ItemIndex <> -1 then
    begin
      BitBtn1.Enabled := True;
      BitBtn2.Enabled := True;
      Case ComboBox1.ItemIndex of
        0 : begin
              TableNameFirst := 'Product_Jan_First';
              TableNameSecond := 'Product_Jan_Second';
              TableNameMonth := 'Product_Jan';
            end;
        1 : begin
              TableNameFirst := 'Product_Feb_First';
              TableNameSecond := 'Product_Feb_Second';
              TableNameMonth := 'Product_Feb';
            end;
        ......略
  
procedure TForm17.BitBtn1Click(Sender: TObject);
begin
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Text := 'Insert Into TableName Select Idno, '
      'Name From Employee Where Salary_Type = '
      ':SalaryType and Idno Not In '
      '(Select Idno From TableName)';
  ADOQuery1.SQL.Text := StringReplace(ADOQuery1.SQL.Text,
    'TableName', TableNameFirst, [rfReplaceAll, rfIgnoreCase]);
  ADOQuery1.Parameters.ParamByName('SalaryType').Value := 'g''yoz]yf';
  ADOQuery1.ExecSQL;
end;
參考看看﹗ ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-09 14:46:48 IP:210.65.xxx.xxx 未訂閱
Hi,    感謝 cashxin2002 版大指教,又多學了一招     ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-09 15:02:37 IP:218.70.xxx.xxx 未訂閱
多谢两位大大,让小弟大开眼界
系統時間:2024-06-28 19:12:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!