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

請問關於資料庫Commit時所發生的錯誤

尚未結案
keny1024
一般會員


發表:5
回覆:8
積分:2
註冊:2010-03-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2012-04-17 15:46:25 IP:111.240.xxx.xxx 訂閱
各位先進,大家好:
想寫一個關於進貨作業Master-Detail的架構,但在SQLConnection1.Commit時發生了錯誤,訊息如下:
Project Pmain.exe raised exception class TDBXError with message 'SQL State:42S22, SQL Error Code:207'
無效的資料行名稱'SUMMON_FLAG'。
SQL State:42S22, SQL Error Code:207
無效的資料行名稱'STORE_NAME'
SQL State:42S22, SQL Error Code:207
無效的資料行名稱'STORE_NO'
...
SQL State:42S2'.
我的程式碼如下:

[code delphi]
procedure TFrmInto_Stock.BitBtn3Click(Sender: TObject);
var vTD : TTransactionDesc;
rtotal_m,vqty,vprice,vsub_money : real;
begin
if (NOT SQLConnection1.InTransaction) then
begin
vTD.TransactionID := 1;
vTD.IsolationLevel := xilREADCOMMITTED;
SQLConnection1.StartTransaction(vTD);
try
rtotal_m:=0;
ClientDataSet2.First;
while ClientDataSet2.EOF <> TRUE do
begin
if (ClientDataSet2.state <> dsEdit) and (ClientDataSet2.state <> dsInsert) then
ClientDataSet2.Edit;
ClientDataSet2.FieldByName('SUB_TOTAL_M').Value:=ClientDataSet2.FieldByName('PRICE').Value*ClientDataSet2.FieldByName('QTY').Value;
rtotal_m:=rtotal_m ClientDataSet2.FieldByName('SUB_TOTAL_M').Value;
ClientDataSet2.Next;
end;
ClientDataSet1.FieldByName('TOTAL_M').value:=rtotal_m;
ClientDataSet1.Post;
if (ClientDataSet2.state <> dsEdit) and (ClientDataSet2.state <> dsInsert) then
ClientDataSet2.Edit;
if (ClientDataSet1.state <> dsEdit) and (ClientDataSet1.state <> dsInsert) then
ClientDataSet1.Edit;
if ClientDataSet2.ChangeCount > 0 then
ClientDataSet2.ApplyUpdates(0);
if ClientDataSet1.ChangeCount > 0 then
ClientDataSet1.ApplyUpdates(0);
SQLConnection1.Commit(vTD);
except
on e : Exception do
begin
ShowMessage(e.Message);
SQLConnection1.Rollback(vTD);
end;
end;
end;
end;

[/code]

懇請協助
感恩!


inungh
初階會員


發表:0
回覆:27
積分:25
註冊:2011-06-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2012-04-18 06:11:50 IP:70.81.xxx.xxx 訂閱
 It seems that the filed is missing.
Please check your field name is same as your backend database,

inung
------
Inung Huang
keny1024
一般會員


發表:5
回覆:8
積分:2
註冊:2010-03-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2012-04-18 09:46:17 IP:111.240.xxx.xxx 訂閱

===================引 用 inungh 文 章===================
It seems that the filed is missing.
Please check your field name is same as your backend database,

inung

感謝inung的提醒,但我檢查資料庫(MS SQL 2005)中Master的Table及Master的ClientDataSet的Fields Editor欄位名稱並無不符,且不管detail的資料筆數有幾筆,在Debug的狀態下都會發生2次錯誤,detail的資料會存入資料庫,但Master不會,不知是何原因?希望諸位先進指點迷津。

Keny1024
inungh
初階會員


發表:0
回覆:27
積分:25
註冊:2011-06-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2012-04-18 11:05:16 IP:70.81.xxx.xxx 訂閱
 Check the field type and make sure value not out of range.


inung
------
Inung Huang
keny1024
一般會員


發表:5
回覆:8
積分:2
註冊:2010-03-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2012-04-18 16:30:43 IP:111.240.xxx.xxx 訂閱

===================引 用 inungh 文 章===================
Check the field type and make sure value not out of range.


inung

感謝inung的熱心協助,依您的方式檢查並無不符之處,嘗試將這些欄位從master的ClientDataSet中刪除,結果在Debug的狀態下依然會發生2次錯誤,錯誤的訊息還是SQL State:42S22, SQL Error Code:207,無效的資料行名稱已從之前刪除的欄位,變成新的欄位名稱,錯誤就發生在ClientDataSet的AfterCancel事件執行後,不知是何原因?希望諸位前輩指點指點。

Keny1024

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