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

DBX 的記錄新增

答題得分者是:GrandRURU
fong97
一般會員


發表:5
回覆:9
積分:2
註冊:2003-08-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-01-10 20:00:46 IP:59.127.xxx.xxx 訂閱


我使用 DBX 連結 MS-SQL
我的Table 中有一位[流水序號] 型態為 IDENTITY
即自動增值欄位
當使用 CLientDataSet.Append時
會出現 Field '流水序號' must have a value
以往都使用AOD介面,所以沒有這個問題
請各位先進幫忙
GrandRURU
站務副站長


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-01-12 12:42:25 IP:203.75.xxx.xxx 未訂閱
新增的時候把自動增加的欄位拿掉試試。


===================引 用 fong97 文 章===================


我使用 DBX 連結 MS-SQL
我的Table 中有一位[流水序號] 型態為 IDENTITY
即自動增值欄位
當使用 CLientDataSet.Append時
會出現 Field '流水序號' must have a value
以往都使用AOD介面,所以沒有這個問題
請各位先進幫忙
fong97
一般會員


發表:5
回覆:9
積分:2
註冊:2003-08-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-01-12 20:18:54 IP:59.127.xxx.xxx 訂閱
感謝 GrandRURU 兄的回應
知道,若Select * From xxx 改成 Select Field1,Field2... From xxx
應該,可解決問題
不過,我需要 [自動增加的欄位] 這個欄位做為其他 Table 的關聯
故,開啟資料時,一定得把它給包含進來
GrandRURU
站務副站長


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-01-13 08:04:42 IP:203.75.xxx.xxx 未訂閱
select發生錯誤?(我用了很多合併table,還沒發生過…)
應該不致於發生才是

會是SQL語法錯誤嗎?

===================引 用 fong97 文 章===================
感謝 GrandRURU 兄的回應
知道,若Select * From xxx 改成 Select Field1,Field2... From xxx
應該,可解決問題
不過,我需要 [自動增加的欄位] 這個欄位做為其他 Table 的關聯
故,開啟資料時,一定得把它給包含進來
fong97
一般會員


發表:5
回覆:9
積分:2
註冊:2003-08-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-01-13 10:27:43 IP:59.127.xxx.xxx 訂閱
SORRY.我表達錯誤,
Select * From XXX 時不會錯誤,不過在 Append時,會出錯
GrandRURU
站務副站長


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-01-13 16:14:22 IP:203.75.xxx.xxx 未訂閱
突然想到很笨的做法
先用select的方式帶出自動編號的欄位,之後再將值填入目的table中……

===================引 用 fong97 文 章===================
SORRY.我表達錯誤,
Select * From XXX 時不會錯誤,不過在 Append時,會出錯
fong97
一般會員


發表:5
回覆:9
積分:2
註冊:2003-08-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-01-13 16:26:53 IP:59.127.xxx.xxx 訂閱
原本想這樣作
clientDataSet1.close;
clientDataSet1.CommandText:=
'insert into Table(部門) values(' Quotedstr('X') ')'
' /*傳回剛新增的自動編號資料 */'
' select scope_identity()'
ClientDataSet1.Execute
這樣可傳回剛剛新增的 值

可是 ClientDataSet1.Execute 沒有傳回值
若用 ClientDataSet1.Open 則更嚴重

不知各位先進,是如何控制 DBX 的
GrandRURU
站務副站長


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-01-13 23:16:38 IP:118.167.xxx.xxx 未訂閱
 相同的語法,請改用sqlquery來試試看

===================引 用 fong97 文 章===================
原本想這樣作
clientDataSet1.close;
clientDataSet1.CommandText:=
'insert into Table(部門) values(' Quotedstr('X') ')'
' /*傳回剛新增的自動編號資料 */'
' select scope_identity()'
ClientDataSet1.Execute
這樣可傳回剛剛新增的 值

可是 ClientDataSet1.Execute 沒有傳回值
若用 ClientDataSet1.Open 則更嚴重

不知各位先進,是如何控制 DBX 的
fong97
一般會員


發表:5
回覆:9
積分:2
註冊:2003-08-08

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-01-14 10:00:22 IP:59.127.xxx.xxx 訂閱
三層式架構
的Client 端,不能用 sqlquery

===================引 用 GrandRURU 文 章===================
相同的語法,請改用sqlquery來試試看

===================引 用 fong97 文 章===================
原本想這樣作
clientDataSet1.close;
clientDataSet1.CommandText:=
'insert into Table(部門) values(' Quotedstr('X') ')'
' /*傳回剛新增的自動編號資料 */'
' select scope_identity()'
ClientDataSet1.Execute
這樣可傳回剛剛新增的 值

可是 ClientDataSet1.Execute 沒有傳回值
若用 ClientDataSet1.Open 則更嚴重

不知各位先進,是如何控制 DBX 的
GrandRURU
站務副站長


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-01-14 11:09:30 IP:203.75.xxx.xxx 未訂閱
TDataSetProvider 的 poAllowCommandText 屬性設為「true」即可使ClientDataSet 操作 SQLQuery

以上

===================引 用 fong97 文 章===================
三層式架構
的Client 端,不能用 sqlquery

===================引 用 GrandRURU 文 章===================
相同的語法,請改用sqlquery來試試看
fong97
一般會員


發表:5
回覆:9
積分:2
註冊:2003-08-08

發送簡訊給我
#11 引用回覆 回覆 發表時間:2009-01-14 16:36:21 IP:59.127.xxx.xxx 訂閱
不行哩,會傳回 Cursor not retuened from Query.
GrandRURU
站務副站長


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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2009-01-14 17:06:58 IP:118.167.xxx.xxx 未訂閱
確認ClientDataSet的ProviderName是否有正確指向目的地
如果是client則再確認RemoteServer是否有指定
fong97
一般會員


發表:5
回覆:9
積分:2
註冊:2003-08-08

發送簡訊給我
#13 引用回覆 回覆 發表時間:2009-01-14 18:42:37 IP:59.127.xxx.xxx 訂閱
這些都有注意到
GrandRURU
站務副站長


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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2009-01-15 10:16:52 IP:203.75.xxx.xxx 未訂閱
剛剛看了一下你的程式碼,好像是有少什麼東西…
[code delphi]
ClientDataSet1.FieldValues['部門']:='A';
[/code]

因為我沒有裝mssql,所以…
請試試看吧
fong97
一般會員


發表:5
回覆:9
積分:2
註冊:2003-08-08

發送簡訊給我
#15 引用回覆 回覆 發表時間:2009-01-15 20:26:20 IP:59.127.xxx.xxx 訂閱
我認為這應該是DBX 對於 MS-SQL的支援性有問題
即使是 Delphi 2009 也相同
在網上找了很多資料,也都是無解,我已經快對Delphi 失去信心,
感謝 GrandRURU 大力的解惑

fong97
一般會員


發表:5
回覆:9
積分:2
註冊:2003-08-08

發送簡訊給我
#16 引用回覆 回覆 發表時間:2009-01-15 23:47:18 IP:59.127.xxx.xxx 訂閱
我找到答案了
procedure TForm1.SQLQuery1AfterOpen(DataSet: TDataSet);
var
i:integer;
begin
for i:=0 to DataSet.Fields.Count -1 do DataSet.Fields[i].Required :=False; <---加上這行
end;
end;

這樣,不管資料庫的設定為何,都可以正常運作
系統時間:2024-05-07 3:28:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!