用thread去連結本地端的accdb資料庫出問題 |
尚未結案
|
17kobe
初階會員 發表:86 回覆:73 積分:31 註冊:2007-07-30 發送簡訊給我 |
[code delphi] TADOConn1.Connected := False; TADOConn1.CursorLocation := clUseServer; TADOConn1.LoginPrompt := FALSE; TADOConn1.Provider := 'Microsoft.ACE.OLEDB.12.0'; TADOConn1.ConnectionString := dm1.ADOConnection1.ConnectionString; TADOQuery1 := TADOQuery.create(nil); TADOQuery2 := TADOQuery.create(nil); try TADOConn1.Open; //此行出問題 . . . finally TADOQuery1.Close; TADOQuery2.Close; TADOConn1.close; if Assigned(TADOQuery1) then FreeAndNil(TADOQuery1); if Assigned(TADOQuery2) then FreeAndNil(TADOQuery2); if Assigned(TADOConn1) then FreeAndNil(TADOConn1); end; [/code] 一次可能同時連結15個執行序,然後持續連結共100個。常常是在後面的時候open會失敗,請問是因為不能連結(開太多ADOConnecion)太多嗎,還是我寫法有問題呢?或者是有等待可以連結的機制。 |
2007
中階會員 發表:54 回覆:90 積分:98 註冊:2008-08-12 發送簡訊給我 |
每一個 執行序 就獨立用一個 TADOConnection 元件 嗎?? 如果是的話,改成共用同一個 TADOConnection 試看看!!! ===================引 用 17kobe 文 章=================== [code delphi] TADOConn1.Connected := False; TADOConn1.CursorLocation := clUseServer; TADOConn1.LoginPrompt := FALSE; TADOConn1.Provider := 'Microsoft.ACE.OLEDB.12.0'; TADOConn1.ConnectionString := dm1.ADOConnection1.ConnectionString; TADOQuery1 := TADOQuery.create(nil); TADOQuery2 := TADOQuery.create(nil); try TADOConn1.Open; //此行出問題 . . . finally TADOQuery1.Close; TADOQuery2.Close; TADOConn1.close; if Assigned(TADOQuery1) then FreeAndNil(TADOQuery1); if Assigned(TADOQuery2) then FreeAndNil(TADOQuery2); if Assigned(TADOConn1) then FreeAndNil(TADOConn1); end; [/code] 一次可能同時連結15個執行序,然後持續連結共100個。常常是在後面的時候open會失敗,請問是因為不能連結(開太多ADOConnecion)太多嗎,還是我寫法有問題呢?或者是有等待可以連結的機制。 |
17kobe
初階會員 發表:86 回覆:73 積分:31 註冊:2007-07-30 發送簡訊給我 |
之前改成共用一個ADOConnection會有List index out of bounds
http://delphi.ktop.com.tw/board.php?cid=30&fid=66&tid=94882 我的程式架構是 主程式控制一個同時開5個執行序thread1,總共須要把60多個開完. thread1 thread1中包含3種非同步執行序thread2, thread3, thread4 這種thread,改成用動態建立,各自有其ADOConnection,造成連到後面50幾個時會出現ADOConn.Open;此行錯誤,不給我連了. |
2007
中階會員 發表:54 回覆:90 積分:98 註冊:2008-08-12 發送簡訊給我 |
關於你說的:之前改成共用一個ADOConnection會有List index out of bounds 的問題!!!
應該去找出問題所在, 也許~~也許~~ 是你多個 thread 同時對同一個 Table 做開啟、新增或刪除~~造成的吧!!! 在Thread中跑ADO Connection及Query 請問在多線程程式中如何將各個線程查詢出的資料在主線程中作運算 CoInitialize(nil); . . . . . CoUninitialize; 我認為~~認為~~認為~~ 我認為啦~~~ 還是不要用太多的 TADOConnection 元件 (每一個 thread 都獨立一個 )。 至少 access 當資料庫,本來就不是一個很好的 資料庫,常會遇到 資料庫 損壞的問題, 加上你用太多 TADOConnection ,若程式處理不當(電腦當機、程式發生例外、......), 也許會造成資料庫的資料不一致,資料損壞,資料庫開不啟來之類的問題吧!!! ===================引 用 17kobe 文 章=================== 之前改成共用一個ADOConnection會有List index out of bounds http://delphi.ktop.com.tw/board.php?cid=30&fid=66&tid=94882 我的程式架構是 主程式控制一個同時開5個執行序thread1,總共須要把60多個開完. thread1 thread1中包含3種非同步執行序thread2, thread3, thread4 這種thread,改成用動態建立,各自有其ADOConnection,造成連到後面50幾個時會出現ADOConn.Open;此行錯誤,不給我連了. |
Ktop_Robot
站務副站長 發表:0 回覆:3511 積分:0 註冊:2007-04-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |