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

關於DBX的Transaction問題

答題得分者是:2007
GrandRURU
站務副站長


發表:235
回覆:1655
積分:1753
註冊:2005-06-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-11-10 16:09:03 IP:203.75.xxx.xxx 未訂閱
最近在用DBX + MySQL
使用交易時,發生還沒有commit,值就直接寫到資料庫裡的現象(交易行為無視,不論是sql還是用元件函式轉換都一樣)
以下是我的程式區段
[code cpp]
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String OldTime;
String NewTime;
TTransactionDesc TD;
TD.TransactionID = 1;
TD.IsolationLevel = xilREADCOMMITTED;
SQLConnection1->StartTransaction(TD);

OldTime = Now().FormatString("hhmmss");
for(int i=1; i!=5001; i )
{
//ClientDataSet SQLTable
Sa->Insert();
Sa->FieldByName("aa")->AsString = i;
Sa->FieldByName("bb")->AsString =i;
Sa->Post();
//ClientDataSet SQLQuery
//Sa->Close();
//Sa->SQL->Text = "insert into aa values(" AnsiString(i) ", " AnsiString(i) ")";
//Sa->ExecSQL();
}
Sa->ApplyUpdates(-1);
SQLConnection1->Rollback(TD); //這樣寫入的5000筆資料應該不會寫進去才是
NewTime = Now().FormatString("hhmmss") - OldTime;
Form1->Caption = NewTime;
}
[/code]

不知道是哪邊錯位,還請各位大大指教,謝謝!
2007
中階會員


發表:54
回覆:90
積分:98
註冊:2008-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-11-11 13:20:37 IP:220.132.xxx.xxx 未訂閱
大大!!

我用 (C Builder 2007 ) DBX(TSimpleDataSet) MS-SQL OK 啊,Rollback 後,沒有值寫進入去!!

是不是 你的MySQL版本不支援 Transaction,
或是 有設定 可以 設定 關掉或開啟 Transaction 的功能??
嘻嘻~~我不熟,亂猜的。

[code cpp]

String OldTime;
String NewTime;
OldTime = Now().FormatString("hhmmss");

for(int i=1; i!=5001; i )
{
SimpleDataSet1->Append();
SimpleDataSet1->FieldByName("a")->AsString = FormatFloat("0000",i);
SimpleDataSet1->FieldByName("b")->AsString = "Test#" FormatFloat("0000",i);
SimpleDataSet1->Post();
}

TTransactionDesc TD;
TD.TransactionID = 1;
TD.IsolationLevel = xilREADCOMMITTED;
SQLConnection1->StartTransaction(TD);
try
{

SimpleDataSet1->DataSet->Close();
SimpleDataSet1->ApplyUpdates(0);
SQLConnection1->Rollback(TD);

SimpleDataSet1->Close();
SimpleDataSet1->DataSet->Close();

NewTime = Now().FormatString("hhmmss") - OldTime;
Form1->Caption = NewTime;
}
catch (...) {}

[/code]

===================引 用 GrandRURU 文 章===================
最近在用DBX MySQL
使用交易時,發生還沒有commit,值就直接寫到資料庫裡的現象(交易行為無視,不論是sql還是用元件函式轉換都一樣)

不知道是哪邊錯位,還請各位大大指教,謝謝!
編輯記錄
2007 重新編輯於 2008-11-11 13:22:00, 註解 無‧
GrandRURU
站務副站長


發表:235
回覆:1655
積分:1753
註冊:2005-06-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-11-11 14:05:35 IP:203.75.xxx.xxx 未訂閱
2007大,謝謝你嚕
還真被你說中了… = =|||
mysql的table還有分支援跟不支援transaction……
我剛好被mysql分配到不支援的那邊…難怪不吃

MYSQL...還真是不太好用……
===================引 用 2007 文 章===================
大大!!

我用 (C Builder 2007 ) DBX(TSimpleDataSet) MS-SQL OK 啊,Rollback 後,沒有值寫進入去!!

是不是 你的MySQL版本不支援 Transaction,
或是 有設定 可以 設定 關掉或開啟 Transaction 的功能??
嘻嘻~~我不熟,亂猜的。

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