多线程访问数据库的问题
http://www.delphi2007.net/DelphiAPI/html/delphi_20061113111452244.html
有个程序 运行大概五天左右的时间
就报Access violation at address 00D24081 in module 'borlndmm.dll'. Write of address 033F00E8
数据库查询是用dll写的
访问数据库时是用的同一个连接
也就是说会出现多个线程同时依靠这个连接进行查询数据 不知道是不是这个原因导致以上错误
有没有什么解决的办法
旧题新帖? dll 入口定义要帖出来, 入口函数体也要(执行部分就没什么用)
还有那段引起 access violation 的代码是哪句
数据库连接可以由 dll 里面去建立的, 在 dll 间送对像总之有点不好把握
function TOpDataBase.OpenSql(const SqlStr: string): Boolean;
begin
Result := QueryDB_Ado(FDBHandle, PChar(SqlStr), FAdoQuery, FErrStr);
if not Result then
SetConnected(False);
end;
调用以上函数时报错 access violation
dll定义:
Function QueryDB_Ado( P_Handle :Integer;
P_SQLStr :PChar;
Var P_AdoQuery1:TAdoQuery;
P_ErrScript:PChar):Boolean; stdcall; external 'DBAccessDll.dll';
至于dll内部代码是什么 不清楚
不明白的是为什么运行5,6天后才报错呢
主要矛盾在这两个参数
var P_AdoQuery1 :TAdoQuery; // 这个倒不是问题, 不标准
P_ErrScript:PChar // 这个嗯,怎么说
FErrStr 你的定义是什么? Pchar?
如果是 Pchar 那你有没分配内存?应该分配多少内存?dll 作得不好哈, 那你只要分配个几K让他够了
估计这个 dll 调用次数很少, 要不然, 100 次以内应该就会出错
FErrStr 是一个查询数据库报错时返回的信息啊
它的定义是
FErrStr: array[0..255] of Char;
一个数组 不用分配内存吧
如果查询正确的话 这个FErrStr 是用不到的 仅仅是用来存放错误信息
那我就不知了, 帮顶吧