大家有沒有碰到過這樣子的情況呢。執行緒根本沒有執行。
下面是執行緒內執行的部份代碼,幫我看看哪有問題。
procedure thAutoMsg.Execute;
var
AdoC : TADOConnection;
qryMsg : TADOQuery;
begin
FreeOnTerminate := True;
AdoC := TADOConnection.Create(nil);
AdoC.ConnectionString := Main_F.conMain.ConnectionString;
AdoC.LoginPrompt := False;
AdoC.KeepConnection := True;
AdoC.CommandTimeout := 60;
AdoC.ConnectionTimeout := 60;
AdoC.Open;
qryMsg := TADOQuery.Create(nil);
qryMsg.Connection := AdoC;
while Main_F.btnCheckOrder17uooStop.Enabled do
begin
uj5u.com熱心網友回復:
執行緒根本沒有執行的話,你給我們看execute里的東東有啥用啊
。在xp下正常?
win7下不正常先確認是否有權限,確認是否用到了什么資料庫驅動之類的。
你還是先斷點單步跟一下再說了。
uj5u.com熱心網友回復:
樓上大哥正解!只有Execute的代碼開不出來個啥!
還是自己跟蹤一下吧!
呵呵!
如果XP下能夠執行的話!
Win7下問題也不大的!
跟Execute代碼關系不大!
呵呵!
uj5u.com熱心網友回復:
哥,有兩點
1. 將AdoC : TADOConnection;定義到執行緒的Private里面定義
將AdoC := TADOConnection.Create(nil);放到執行緒的Create事件里面;
2. 執行緒里面呼叫ADO訪問資料庫要用CoInitialize和CoUnInitialize;
呼叫Coinitialization要Uses Comobj;
uses Comobj;
procedure thAutoMsg.Execute;
var
qryMsg : TADOQuery;
begin
FreeOnTerminate := True;
try
CoInitialize(nil);
AdoC.ConnectionString := Main_F.conMain.ConnectionString;
AdoC.LoginPrompt := False;
AdoC.KeepConnection := True;
AdoC.CommandTimeout := 60;
AdoC.ConnectionTimeout := 60;
AdoC.Open;
qryMsg := TADOQuery.Create(nil);
qryMsg.Connection := AdoC;
while Main_F.btnCheckOrder17uooStop.Enabled do
begin
...
end;
finally
CoUnInitialize;
end;
end;
uj5u.com熱心網友回復:
procedure thAutoMsg.Execute;
var
AdoC : TADOConnection;
qryMsg : TADOQuery;
begin
FreeOnTerminate := True;
AdoC := TADOConnection.Create(nil);
AdoC.ConnectionString := Main_F.conMain.ConnectionString; //這一句有問題,用一個普通的String字串來賦值就可以了,用.ConnectionString屬性就是不行。
AdoC.LoginPrompt := False;
AdoC.KeepConnection := True;
AdoC.CommandTimeout := 60;
AdoC.ConnectionTimeout := 60;
AdoC.Open;
qryMsg := TADOQuery.Create(nil);
qryMsg.Connection := AdoC;
while Main_F.btnCheckOrder17uooStop.Enabled do
begin
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/130892.html
標籤:語言基礎/算法/系統設計
