delphi2007 教程

delphi2007 教程

首页 新随笔 联系 聚合 管理
  1013 Posts :: 0 Stories :: 28 Comments :: 0 Trackbacks
多线程访问数据库的问题 Delphi / Windows SDK/API
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     是用不到的   仅仅是用来存放错误信息

那我就不知了,   帮顶吧

posted on 2009-02-03 09:49 delphi2007 阅读(219) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。