比較兩個TAdoQuery 的 Insert into |
|
jjyeah
一般會員 發表:10 回覆:11 積分:4 註冊:2002-06-27 發送簡訊給我 |
各位高手:
我使用AdoQuery在資料庫中插入一筆記錄,這筆記錄有4個欄位,資料型態分別為
ftstring,ftinteger,ftinteger,ftstring
我試過以下兩種方法
1.
Adoqry.SQL.Clear;
Adoqry.SQL.Add('insert into table1 values('123',null,20,null)');
AdoQry.ExecSql; 2.Cds 為ClientDatset 動態建立的dataset
Adoqry.SQL.Clear ;
Adoqry.SQL.Add('Insert into table1 values(:v1,:v2,:v3,:v4)');
Aq2.Parameters[0].Value :=Cds.fieldbyname('Field1').AsString ;
Aq2.Parameters[1].Value :=NULL;
Aq2.Parameters[2].Value :=cds.fieldbyname('Field2').AsInteger ;
Aq2.Parameters[3].Value :=cds.fieldbyname('Field3').AsString ;
Adoqry.ExecSql; 第一個方法可以過,但第二個方法一直出現下列問題:
(1).:v2的值設為Null時,會出現"提供不一致或不完全的資訊導致參數不適當被 拒.
(2).若將v2:=0,則出現[ODBC Microsoft Access驅動程式]無效的精確度數值!
(要將v2設為null or 0是因為在cds中沒有v2這個欄位的資料)
(3).當field3為空字串時,亦會發生(1)型態的錯誤.
(4).我也曾嘗試只插入三個欄位的資料,但會出現參數不足的錯誤. 以上就是我遇到的問題,覺得很迷惑,為什麼直接指定參數數值時沒問題,動態給定確會遇到那麼多的問題,還是說AdoQuery中還有其他參數要設定?希望各高手不吝指教,thanks.
|
Diviner
初階會員 發表:36 回覆:112 積分:34 註冊:2002-03-13 發送簡訊給我 |
引言: 2.Cds 為ClientDatset 動態建立的dataset Adoqry.SQL.Clear ; Adoqry.SQL.Add('Insert into table1 values(:v1,:v2,:v3,:v4)'); Aq2.Parameters[0].Value :=Cds.fieldbyname('Field1').AsString ; Aq2.Parameters[1].Value :=NULL; Aq2.Parameters[2].Value :=cds.fieldbyname('Field2').AsInteger ; Aq2.Parameters[3].Value :=cds.fieldbyname('Field3').AsString ; Adoqry.ExecSql;你不如直接用常數試試放入 Parameters 中, 看看會不會有同樣錯誤, 以上句子我沒問題啊。 奇怪的是, Aq2 是如何走出來的, 一開始不是用 Adoqry 嗎? -- 小卜子 發表人 - diviner 於 2002/07/08 13:06:57
------
-- 小卜子 |
jjyeah
一般會員 發表:10 回覆:11 積分:4 註冊:2002-06-27 發送簡訊給我 |
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
引言: 各位高手: 我使用AdoQuery在資料庫中插入一筆記錄,這筆記錄有4個欄位,資料型態分別為 ftstring,ftinteger,ftinteger,ftstring 我試過以下兩種方法 1. Adoqry.SQL.Clear; Adoqry.SQL.Add('insert into table1 values('123',null,20,null)'); AdoQry.ExecSql; 2.Cds 為ClientDatset 動態建立的dataset Adoqry.SQL.Clear ; Adoqry.SQL.Add('Insert into table1 values(:v1,:v2,:v3,:v4)'); Aq2.Parameters[0].Value :=Cds.fieldbyname('Field1').AsString ; Aq2.Parameters[1].Value :=NULL;-- Aq2.Parameters[2].Value :=cds.fieldbyname('Field2').AsInteger ; Aq2.Parameters[3].Value :=cds.fieldbyname('Field3').AsString ; Adoqry.ExecSql; 第一個方法可以過,但第二個方法一直出現下列問題: (1).:v2的值設為Null時,會出現"提供不一致或不完全的資訊導致參數不適當被 拒. (2).若將v2:=0,則出現[ODBC Microsoft Access驅動程式]無效的精確度數值! (要將v2設為null or 0是因為在cds中沒有v2這個欄位的資料) (3).當field3為空字串時,亦會發生(1)型態的錯誤. (4).我也曾嘗試只插入三個欄位的資料,但會出現參數不足的錯誤. 以上就是我遇到的問題,覺得很迷惑,為什麼直接指定參數數值時沒問題,動態給定確會遇到那麼多的問題,還是說AdoQuery中還有其他參數要設定?希望各高手不吝指教,thanks.此行改成如下試試 Aq2.Parameters[1].Value :=NULL; Aq2.Parameters[1].clear; @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@ |
jjyeah
一般會員 發表:10 回覆:11 積分:4 註冊:2002-06-27 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |