通过BDE ODBC访问SQL Server 7问题求解(值200分,可惜我没有,很Sorry)(0分)

  • 主题发起人 主题发起人 并不陌生
  • 开始时间 开始时间

并不陌生

Unregistered / Unconfirmed
GUEST, unregistred user!
通过BDE ODBC访问SQL Server 7问题求解(值200分,可惜我没有,很Sorry)
我用Delphi 5 开发数据库应用(SQL Server 7(2000)),在程序执行
过程中,在对数据表进行频繁的关闭打开时,就出现如下提示:
Key Violation.
General SQL error.
[Microsoft][ODBC SQL Server Driver]Connection is busy
with results for another hstmt.
如果一旦出现这样的提示,则必须退出程序,重新进入。为此,
我感到很不安。是不是因为 ODBC的同步异步问题。请各位同行给予
帮助。(我是通过 BDE 实现的)。
 
你的TDatabase有Keepconnection吗?
 
我设置Keepconnection=True,对吗?
 
是啊,还有,检查你的表设计有没有问题,或者贴出代码
 
我也出现了这个问题!
很急!!分不够我加!!!
 
我也是一樣怪以前沒有過
 
这不是你的错,这是ODBC的BUG,我们在用VB做程序的时候也出现过许多这样的问题。
 
我试了一下好像没有问题啊!我的运行环境:Win2k, Delphi6 + remote sql server 7
我的测试代码:
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
for i := 1 to SpinEdit1.Value do
begin
Table1.Open;
Table1.Append;
Table1.Post;
Table1.Close;
Caption := inttostr(i);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
i, j: integer;
begin
for i := 1 to SpinEdit2.Value do
begin
Query1.Open;
Query1.Append;
{ Query1.FieldByName('LOG_COMPANY_ID').AsString := IntToStr(i);
Query1.FieldByName('LOG_OPERATION').AsString := IntToStr(i);
Query1.FieldByName('LOG_USER').AsString := IntToStr(i);
Query1.Fields[0].AsDateTime := Now;
Query1.Post;
} Query1.Close;
Caption := inttostr(i);
end;
end;
 
我來給大家說 解決的方法
一、改用ADO 驅動 則無此問題 但會經常超時。
二、改用 其它數據庫 MYSQL 或其它。
三、改用別的語言 但不要用 C++BULID。
四、用后台的存储过程。
五、不要隨隨便便 在 SELECT、UPDATA、INSERT 、DELETE 的execsql;
OPEN、ACTIVE:=TRUE 前 加Prepare;特别是这几个组合,要少加。
这第五点这个方法能减少90%出现的机率。原因是DELPHI运行太快了导致了你数据
库前一个PREPARE没有释放时又产生一个,SQL Server ODBC driver 只允许一
个活动的hstmt,记住这个问题产生的原因是因为DELPHI 运行太快了。太快的东西
,太好的,太优秀的(DELPHI)和不好的东西(SQL)会产生矛盾。
六、这一点很重要,尽量采用专业的服务器+SISC 硬盘+大内存,不要随随便便用一台机器
装一下NT就是服务器了,很多问题正是它引起的(事实上微软让hstmt尽快释放,而是你的
服务器它不行。碰到这个问题时,当你整理一下硬盘,机率少一点,但不久就会现次出现。
哈 哈

 
接受答案了.
 
后退
顶部