線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1827
推到 Plurk!
推到 Facebook!

如何用SQL語法將欄位a的資料轉入欄位b

答題得分者是:st33chen
LPH
一般會員


發表:53
回覆:43
積分:19
註冊:2003-04-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-04-20 14:36:30 IP:114.46.xxx.xxx 訂閱
資料庫有 Field1,Field2
將Field1的資料轉入Field2
With Qly1 Do
Begin
close;
SQL.Clear;
SQL.Add('update Regi');
SQL.Add('Set Regi_firld1=:ORegipay');
ParamByName('ORegipay').AsString := FieldByName('field2').AsString;
ExecSql;
End;
會出現Field2 not Found
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-04-20 15:07:13 IP:203.75.xxx.xxx 未訂閱
做完Update之後請重新select將資料載進來
再做讀取即可

===================引 用 LPH 文 章===================
資料庫有 Field1,Field2
將Field1的資料轉入Field2
With Qly1 Do
Begin
close;
SQL.Clear;
SQL.Add('update Regi');
SQL.Add('Set Regi_firld1=:ORegipay');
ParamByName('ORegipay').AsString := FieldByName('field2').AsString;
ExecSql;
End;
會出現Field2 not Found
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-04-20 15:18:29 IP:61.67.xxx.xxx 未訂閱
update Regi Set Regi_firld1=:ORegipay
這是你的原文
有幾點以下的問題
1.Qly1 的 sql 語法為此段, 是 update 旳語法
FieldByName('field2').AsString, 這段你未指名出處(前面用with Qly1), 所以系統自然視為來源於
Qly1.FieldByName('field2').AsString, 看出問題了嗎? Qly1 何處有 field2 的宣告
2.update的語法也有瑕疵, 你未加 where 來篩選記錄, 這樣一執行下去, 所有Qly1中 field1 欄位全部被更新為指定的內容, 我想這應該不是你所樂意見到的吧!
3.你的語法並不是很複雜, 很長, 何必使用多次 add 加入, 這是會引影響效能的, 每加入一次, sql 就要重新解譯一次, 把上面的語法一次add進來就好了
===================引 用 LPH 文 章===================
資料庫有 Field1,Field2
將Field1的資料轉入Field2
With Qly1 Do
Begin
close;
SQL.Clear;
SQL.Add('update Regi');
SQL.Add('Set Regi_firld1=:ORegipay');
ParamByName('ORegipay').AsString := FieldByName('field2').AsString;
ExecSql;
End;
會出現Field2 not Found
編輯記錄
P.D. 重新編輯於 2009-04-20 15:23:19, 註解 無‧
LPH
一般會員


發表:53
回覆:43
積分:19
註冊:2003-04-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-04-20 17:13:53 IP:114.46.xxx.xxx 訂閱

===================引 用 P.D. 文 章===================
update Regi Set Regi_firld1=:ORegipay
這是你的原文
有幾點以下的問題
1.Qly1 的 sql 語法為此段, 是 update 旳語法
FieldByName('field2').AsString, 這段你未指名出處(前面用with Qly1), 所以系統自然視為來源於
Qly1.FieldByName('field2').AsString, 看出問題了嗎? Qly1 何處有 field2 的宣告
2.update的語法也有瑕疵, 你未加 where 來篩選記錄, 這樣一執行下去, 所有Qly1中 field1 欄位全部被更新為指定的內容, 我想這應該不是你所樂意見到的吧!
3.你的語法並不是很複雜, 很長, 何必使用多次 add 加入, 這是會引影響效能的, 每加入一次, sql 就要重新解譯一次, 把上面的語法一次add進來就好了
===================引 用 LPH 文 章===================
資料庫有 Field1,Field2
將Field1的資料轉入Field2
With Qly1 Do
Begin
close;
SQL.Clear;
SQL.Add('update Regi');
SQL.Add('Set Regi_firld1=:ORegipay');
ParamByName('ORegipay').AsString := FieldByName('field2').AsString;
ExecSql;
End;
會出現Field2 not Found
不加 Where 是因為更改整個資料表.
FieldByName('field2').AsString; 不是會去自動引用 Qly1 嗎....
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-04-20 18:21:16 IP:122.116.xxx.xxx 未訂閱
您好,

出現 field2 not found 應該是 qly1 已經 close 掉了,
試一下
astr : string;
...
With Qly1 Do
Begin
astr := FieldByName('field2').AsString;
close;
SQL.Clear;
SQL.Add('update Regi');
SQL.Add('Set Regi_firld1=:ORegipay');
ParamByName('ORegipay').AsString := astr;
ExecSql;
End;

參考一下

--------------------------------------

但是, 如果是
資料庫有 Field1,Field2
將Field1的資料轉入Field2
同 table 的話

為何要用參數呢?
直接
SQL.text := 'update Regi set Regi_firld1=ORegipay' 不就好了?

不同 table 的話,

ParamByName('ORegipay').AsString := FieldByName('field2').AsString;

ParamByName('ORegipay').AsString := 叫用 field2 的 query 名.FieldByName('field2').AsString;
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2009-04-20 18:26:31, 註解 無‧
st33chen 重新編輯於 2009-04-20 18:29:21, 註解 無‧
st33chen 重新編輯於 2009-04-20 18:29:50, 註解 無‧
LPH
一般會員


發表:53
回覆:43
積分:19
註冊:2003-04-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-04-20 18:41:53 IP:114.46.xxx.xxx 訂閱

===================引 用 st33chen 文 章===================
您好,

出現 field2 not found 應該是 qly1 已經 close 掉了,
試一下
astr : string;
...
With Qly1 Do
Begin
astr := FieldByName('field2').AsString;
close;
SQL.Clear;
SQL.Add('update Regi');
SQL.Add('Set Regi_firld1=:ORegipay');
ParamByName('ORegipay').AsString := astr;
ExecSql;
End;

參考一下

--------------------------------------

但是, 如果是
資料庫有 Field1,Field2
將Field1的資料轉入Field2
同 table 的話

為何要用參數呢?
直接
SQL.text := 'update Regi set Regi_firld1=ORegipay' 不就好了?

不同 table 的話,

ParamByName('ORegipay').AsString := FieldByName('field2').AsString;

ParamByName('ORegipay').AsString := 叫用 field2 的 query 名.FieldByName('field2').AsString;
原來 可以不用參數....感謝 !!
系統時間:2024-07-02 7:18:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!