奇症:>>>1."連接數據庫失敗!"的錯誤;2.運行時有時出現"死鎖"現象(100分)

  • 主题发起人 主题发起人 dragonx23
  • 开始时间 开始时间
D

dragonx23

Unregistered / Unconfirmed
GUEST, unregistred user!
我用delphi5開發了個midas結構的管理程序,应用服务器為socket服务器,用adoconnection
与sqlserver7.0连接,客户端使用的是socketconnection,clientdataset
以上程序在一個有150台機器的局域網運行,大概每台機器有3個midas程式,即同一時刻我的
应用服务器有400個連接.
問題一:50台機器在運行時,沒多大的問題.但到了150台機器在運行時,則有時出現"連接數據庫
失敗!"的錯誤.請各位幫忙.
問題二:其中一個程式,運行時有時出現"死鎖"現象.在客戶端有一台機器有時會把數據鎖住.
只有它一個可以讀寫.其它的不行.查一下sqlserver7.0.發現鎖死了.但不是經常.請各位幫忙.
以下是保存的代碼:
try
CustomerData.SocketConnection1.AppServer.begin
Trans;
keyid:=Maxno_Get('product_master_keyid','keyid');
//得到唯一的流水號
product_master_Execute(0);
//保存主表
product_detail_Execute(0);
//保存明細表
order_Execute(0);
//保存生產表
CustomerData.SocketConnection1.AppServer.CommitTrans;
Control_Init();
//更新控件數據
except
CustomerData.SocketConnection1.AppServer.RollbackTrans;
MessageDlg('此操作不成功!',mtWarning,[mbOk],0);
end;
 
有沒有朋友可以幫忙啊?給點意見啦!
 
试试多线程看!还有你的事务太多也是一个原因!
 
To freesoft:
先謝謝你,但搞這種midas結構時,在設計remote data module模塊時,它的Threading
model為:apartment而不是single.所以由此我認為是多線程的了.還有事務是多了點,
但還有什么比這更好的辦法沒有(對多表保存)?奇怪的是:同樣的設計,其它程式基本
沒有這種情況.
 
用無狀態對象連接
和對象連接池....
即用多個midas server
這樣就可以了
 
>問題一:50台機器在運行時,沒多大的問題.但到了150台機器在運行時,則有時出現"連接數據庫
失敗!"的錯誤.請各位幫忙.
会不会是连接数超过SQL Server的最大连接数,不要把连接放在数据模块中,放在其他地方,连接时让数个客户端共用一个连接。
>問題二:其中一個程式,運行時有時出現"死鎖"現象.在客戶端有一台機器有時會把數據鎖住.
只有它一個可以讀寫.其它的不行.查一下sqlserver7.0.發現鎖死了.但不是經常.請各位幫忙.
我认为,因为用了事务控制,所以会锁定记录。或者是和ADO的锁类型和隔离级别设置有关。
 
To dragonlee007: 你說的是第一個問題,還是第二個問題,怎樣用無狀態對象連接?能詳細點嗎?
To arong2008:問題一:50台機器在運行時,沒多大的問題.但到了150台機器在運行時,則有時出現"連接數據庫
失敗!"的錯誤.請各位幫忙. >>>我早已試過了,我將最大連接數設為500,后又試過800;
為什么不能把"连接放在数据模块中"?
問題二:其中一個程式,運行時有時出現"死鎖"現象.在客戶端有一台機器有時會把數據鎖住.
只有它一個可以讀寫.其它的不行.查一下sqlserver7.0.發現鎖死了.但不是經常.請各位幫忙.
>>>我知道使用了事務之故,但其它的都一樣,沒事!它是用一段時間才"鎖死"的.

 
>>我早已試過了,我將最大連接數設為500,后又試過800;
為什么不能把"连接放在数据模块中"?
[green]不管是什么DBMS,都有一个最大连接数,每个数据模块放ADOConnection。
每个客户端连接会产生一个新的远程数据模块服务之,也就产生了新的连接,把ADOConnection
放在form里面,就不会随着客户端的增加而产生新的连接。[/green]
>>我知道使用了事務之故,但其它的都一樣,沒事!它是用一段時間才"鎖死"的.
仔细查一查ADO的锁类型和隔离级别设置。再不行我也无能为力了。
 
或許可以試試.
 
有沒有朋友可以幫忙啊?給點意見啦!
 
后退
顶部