全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2187
推到 Plurk!
推到 Facebook!

在IdTCPServer的OnExecute中如何用TADOConnection连接SQL SERVER后保存数据?如何设计?

答題得分者是:careychen
sdshw
一般會員


發表:8
回覆:11
積分:3
註冊:2008-03-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-10-31 20:51:14 IP:123.233.xxx.xxx 訂閱
100多个idTCPClient写的客户端向IdTCPServer服务端传输数据,
服务端接收到数据后用ADO写到SQL SERVER,如何在OnExecute中连接SQL,每个客户端Thread 构造一个TADOConnection吗?
这样的需求该如何设计?

[code delphi]
procedure TMainForm.IdTCPServer1Execute(AThread: TIdPeerThread);

var

AData: TMemoryStream;

begin

AData:= TMemoryStream.Create;

try

AThread.Connection.ReadStream(AData, -1, False);

if SaveToDB(AData) then //SaveToDB函数该如何写??

AThread.Connection.WriteLn(DATA_SAVE_SUCCESS)

else

AThread.Connection.WriteLn(DATA_SAVE_FAIL);

finally

AData.Free;

AThread.Connection.Disconnect;

end;

end;


[/code]
編輯記錄
sdshw 重新編輯於 2008-10-31 20:52:32, 註解 無‧
sdshw
一般會員


發表:8
回覆:11
積分:3
註冊:2008-03-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-10-31 22:48:37 IP:123.233.xxx.xxx 訂閱
方法1:

[code delphi]
function TMainForm.SaveData(AData: TNewData): Boolean;

var

conn: TADOConnection;

begin

conn := TADOConnection.Create(Self);

try

try

conn.Open();

try

//写数据

...

Result := True;

finally

conn.Close;

end;

except

Result := False;

end;

finally

conn.Free;

end;

end;



[/code]

方法2:
在mainform上直接拉一个TADOConnection 命名为conn

[code delphi]
function TMainForm.SaveData(): Boolean;

begin

try

conn.Open();

try

//写数据

...

Result := True;

finally

conn.Close;

end;

except

Result := False;

end;

end;

[/code]

在OnExecute中AThread.Synchronize(SaveData)

这两种方法是否可行,哪种好
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-11-01 12:37:10 IP:60.248.xxx.xxx 訂閱
HI, 不好意思,剛才才看到您的簡訊,其實有一篇 lu 大的回文,他的內容寫的相當的詳細,您可以參考一下

關于使用IdTCPServer、ADOQUERY對SQL數據庫操作的疑問

===================引 用 sdshw 文 章===================
方法1:

[code delphi]
function TMainForm.SaveData(AData: TNewData): Boolean;

var

conn: TADOConnection;

begin

conn := TADOConnection.Create(Self);

try

try

conn.Open();

try

//写数据

...

Result := True;

finally

conn.Close;

end;

except

Result := False;

end;

finally

conn.Free;

end;

end;



[/code]

方法2:
在mainform上直接拉一个TADOConnection 命名为conn

[code delphi]
function TMainForm.SaveData(): Boolean;

begin

try

conn.Open();

try

//写数据

...

Result := True;

finally

conn.Close;

end;

except

Result := False;

end;

end;

[/code]

在OnExecute中AThread.Synchronize(SaveData)

这两种方法是否可行,哪种好
------
價值的展現,來自於你用哪一個角度來看待它!!
dt520
一般會員


發表:11
回覆:61
積分:14
註冊:2003-05-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-05-17 21:20:56 IP:118.245.xxx.xxx 訂閱
法1,是多线程操作数据库。但要考虑你数据库的承受能力。
法2,是单线程操作数据库,客户请求被排队了。
系統時間:2024-04-26 7:06:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!