三层数据库连接问题:(与其他的提问不同)在线程中连接远程数据库总提示“灾难性错误”,而在程序中连接则没问题,代码如下:(100分)

  • 主题发起人 主题发起人 JUMP1972
  • 开始时间 开始时间
J

JUMP1972

Unregistered / Unconfirmed
GUEST, unregistred user!
主程序中:
DM.SocketConn1.Connected:=false;
DM.SocketConn1.Connected:=true;
这样没有问题,而我在线程中连接,则提示“灾难性错误”,但此时已经连接上了数据库,
线程如下:
unit U_ThrdConnectDB;
interface
uses Classes, SConnect,SysUtils,ActiveX,MConnect,Dialogs;
type
TSocketConnectDBThread=class(TThread)
private
FSocketConn:TSocketConnection;
FDBConnected:Boolean;
protected
procedure Execute;override;
public
constructor Create(SocketConn:TSocketConnection);
property DBConnected:Boolean read FDBConnected;
destructor Destroy;override;
end;
implementation
{ TSocketConnectDBThread }
constructor TSocketConnectDBThread.Create(SocketConn: TSocketConnection);
begin
inherited Create(True);
FreeOnTerminate := True;
FSocketConn:=SocketConn;
Resume;
end;

destructor TSocketConnectDBThread.Destroy;
begin
inherited;
end;

end.

调用线程的代码:
try
if not DM.SocketConn1.Connected then
begin
MyThreadConnectDB:=TSocketConnectDBThread.Create(DM.SocketConn1);
while not MyThreadConnectDB.DBConnecteddo
Application.ProcessMessages;
if MyThreadConnectDB<>nil then
MyThreadConnectDB.Terminate;
if not DM.SocketConn1.Connected then
begin
lblRemoteServer.Caption:='断开';
MessageDlg('连接远程数据查询服务程序失败!无法完成数据查询工作.',mtError,[mbOk],0);
Exit;
end;

请大侠帮忙分析一下:
 
各位大侠:拜托给点意见吧!
 
這個問題我以前差點想破頭﹐還是搞出來了﹐不過﹐我與你的碰到的環境有點不同﹐我是在池的連接下發生的﹐總之﹐這種問題的出現是中間層的錯誤拋到了客戶層﹐你先試試看不用線程連接﹐現在快下班﹐我明天早上看看你的代碼﹐再給你解決。
 
这问题还有是点难度,不好搞。
 
MyThreadConnectDB:=TSocketConnectDBThread.Create(DM.SocketConn1);
while not MyThreadConnectDB.DBConnecteddo
Application.ProcessMessages;
以上是你調用線程的內容﹐但是為什么﹖
Application.ProcessMessages;
這句話的作用你解說給我聽﹖
請先改用
sendmessage.
我現在比較忙﹐下午給你答復
 
我已找出了你的問題所在了
 
SocketConnection 不能直接传进去,需要进行接口转换,
我劝你直接在线程中创建SocketConnection,这样会简单的多.
 
你加入一個
proceduredo
connect
然后在加入的事件過程中寫入﹕
fsocket.connect:=TRue;
再在execute里用同步方式執行﹕
synchronize(doconnect);
即可。我是測試通過
 
多人接受答案了。
 
后退
顶部