需要包transcation但不知如何解決 |
尚未結案
|
lauracyt
一般會員 發表:4 回覆:3 積分:1 註冊:2002-03-18 發送簡訊給我 |
需要包transcation但不知如何解決
各位前?感謝之前的協助
晚?有一事相?教 包SQL SERVER TRANSCATION的?題
需要包transcation但不知如何解決 在SQL MONITOR下看到:
STRAT TRANSCATION
UPADTE GLBI SET BICODE='DO'...
SELECT * FROM GLBFTR,GLBGTR....
.....程式內有包含WHILE 回圈及INSERT其他TABLE等?述句
UPDATE GLBI SET BICODE='NT'...
//於是SQL SERVER就不回應了....
//但晚?拿掉TRANSCATION就正常了
//可是不解的是...
//若單?拿那幾句包transcation跑是沒?題的
//晚?的BDE 設定的是 SQLPASSTHRU MODE:SHARED AUTOCOMMIT
// DATABASE TransIsolation屬性設定為tiReadCommitted
//晚?於其他的設定都拿來配,結果都是沒回應,
//甚至連EXECSQL('SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED')
//也是都沒回應, 我?怎麼辦
ps他的姐妹情況就是:回圈update glbftr 後又select glbftr就沒回應了
//也是都沒回應, 我?怎麼辦
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
|
lauracyt
一般會員 發表:4 回覆:3 積分:1 註冊:2002-03-18 發送簡訊給我 |
引言: 可否將您的問題再用繁體Big5碼再寫過一次,看不太懂耶? ~~~Delphi K.Top討論區站長~~~各位前輩不好意思 需要包transcation但不知如何解決 晚輩有一事請教 包SQL SERVER TRANSCATION的問題 需要包transcation但不知如何解決 在SQL MONITOR下看到: STRAT TRANSCATION UPADTE GLBI SET BICODE='DO'... //以上UPDATE程式是以回圈執行 SELECT * FROM GLBI WHERE BICODE='NT'... //於是SQL SERVER就不回應了.... //但拿掉TRANSCATION就正常了 |
yamapig
一般會員 發表:12 回覆:47 積分:21 註冊:2002-03-26 發送簡訊給我 |
|
lauracyt
一般會員 發表:4 回覆:3 積分:1 註冊:2002-03-18 發送簡訊給我 |
引言: 我有試過,可以正常執行啊! 把BDE 設定 SQLPASSTHRU MODE: 改成 SHARED NotAUTOCOMMIT 再試試看.... 靜中見真境 淡中識本然 發表人 - yamapig 於 2002/09/03 13:09:05謝謝你我試過更改bde但還是不行 以下就是我常被lock的程式碼: 希望各位前輩能幫忙解決這,該如何包transcation DATABASE1.StartTransaction; QUERY1.CLOSE; QUERY1.SQL.CLEAR; QUERY1.SQL.Add('SELECT * FROM GLBI WHERE BICODE=''DO'''); QUERY1.OPEN; WHILE NOT QUERY1.EOF DO BEGIN QUERY2.CLOSE; QUERY2.SQL.CLEAR; QUERY2.SQL.Add('UPDATE GLBI SET BINO=BINO 1 WHERE BICODE=''XX'' AND BIPLNT=''TF'' AND BIYYMM=09109'); QUERY2.EXECSQL; QUERY1.NEXT; END; QUERY2.CLOSE; QUERY2.SQL.CLEAR; QUERY2.SQL.Add('SELECT * FROM GLBI WHERE BIPLNT=''TF'' AND BIYYMM=09109'); QUERY2.OPEN; DATABASE1.COMMIT; |
lauracyt
一般會員 發表:4 回覆:3 積分:1 註冊:2002-03-18 發送簡訊給我 |
以下就是我常被lock的程式碼:
希望各位前輩能幫忙解決這,該如何包transcation DATABASE1.StartTransaction;
QUERY1.CLOSE;
QUERY1.SQL.CLEAR;
QUERY1.SQL.Add('SELECT * FROM GLBI WHERE BICODE=''DO''');
QUERY1.OPEN;
WHILE NOT QUERY1.EOF DO
BEGIN
QUERY2.CLOSE;
QUERY2.SQL.CLEAR;
QUERY2.SQL.Add('UPDATE GLBI SET BINO=BINO 1 WHERE BICODE=''XX'' AND BIPLNT=''TF'' AND BIYYMM=09109');
QUERY2.EXECSQL;
QUERY1.NEXT;
END;
QUERY2.CLOSE;
QUERY2.SQL.CLEAR;
QUERY2.SQL.Add('SELECT * FROM GLBI WHERE BIPLNT=''TF'' AND BIYYMM=09109');
QUERY2.OPEN; DATABASE1.COMMIT;
|
Wesly
中階會員 發表:14 回覆:103 積分:53 註冊:2002-05-31 發送簡訊給我 |
DATABASE1.StartTransaction;
try
QUERY1.CLOSE;
QUERY1.SQL.CLEAR;
QUERY1.SQL.Add('SELECT * FROM GLBI WHERE BICODE=''DO''');
QUERY1.OPEN;
WHILE NOT QUERY1.EOF DO
BEGIN
QUERY2.CLOSE;
QUERY2.SQL.CLEAR;
QUERY2.SQL.Add('UPDATE GLBI SET BINO=BINO 1 WHERE BICODE=''XX'' AND BIPLNT=''TF'' AND BIYYMM=09109');
QUERY2.EXECSQL;
QUERY1.NEXT;
END; DATABASE1.COMMIT;
except
Database1.Rollback;
end;
//本開啟動作要放在Commit 或 Rollback之後, 因為在Transaction下
//Update的Table會被Lock, 所以沒有回應
QUERY2.CLOSE;
QUERY2.SQL.CLEAR;
QUERY2.SQL.Add('SELECT * FROM GLBI WHERE BIPLNT=''TF'' AND BIYYMM=09109');
QUERY2.OPEN; //如果您一定在裏面下, 在MS-SQL的資料庫中語法如下
SELECT * FROM GLBI with(nolock) WHERE BIPLNT=''TF'' AND BIYYMM=09109
應該就可以了, 但若為別的資料庫, 我就不知道了, 希望能對您有些幫助
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |