首先我采用的是BDE,那么可以向dll传送一个database的handle,然后在dll中生成database来接受这个handle就可以了,但怎样向应用程序传送呢???
后来改为使用ado
我就想干脆使用中间层,在中间层用一个函数得到adoconnection的ConnectionObject,然后在客户端使用一个dcomconnection和一个adoquery组件,写上:
adoquery1.Connection.ConnectionObject:=iunknown(DCOMConnection1.AppServer.getdatac) as _connection;
(注:getdatac就是中间层用来返回connectionobject的函数)
可是运行到这句时,系统会报‘无效索引。’的错误,请问怎样解决这个问题???对于多个应用程序或者dll使用同一个数据库连接,请问大家还有没有什么好的办法???(主要是多个应用程序使用同一个数据库连接)

解决方案 »

  1.   

    为什么要用一个连接,每一个使用一个连接,数据库会处理并发
    年一的DLL是用VC做的还是DELOHI?
      

  2.   

    可以把ADO的连接字符串写在一个ini文件里面啊。然后在用到的时候去ini里面读出这个串。//写ini文件:function TDataAbout.SetAdo(PW, UserID, InitialCatalg, DataSource,
      dbName: OleVariant): OleVariant;
    var
    filename,Adostr:string;
    begin
      result:=0;//正常执行的返回值  AdoStr:='Provider=SQLOLEDB.1;'+
              'Password='+PW+';'+
              'Persist Security Info=True;'+
              'User ID='+ UserID+';'+
              'Initial Catalg='+ InitialCatalg+';'+
              'Data Source='+ DataSource+';'+
              'Use Procedure for Prepare=1;'+
              'Auto Translate=True;'+
              'Packet Size=4096;'+ 
              'Use Encryption for Data=False;'+
              'Tag with column collation when possible=False';//拼出你的ADO连接串   Filename:='AdoCon.ini';//ini文件的名字   if result=0 then
         try
           AdoIniFile:= Tinifile.Create(Filename);
         except
           result:=1;
         end;//创建ini文件   if result=0 then
         try
           AdoIniFile.WriteString('DefaultSet','Set',dbName);
           AdoIniFile.WriteString(dbName,'constr',Adostr);
           AdoIniFile.WriteString(dbName,'defaultDatabase',InitialCatalg);
         except
           result:=2;
         end;//把连接信息写进去   if result=0 then
         try
           AdoIniFile.Destroy;
         except
           result:=3;
         end;//别忘了释放文件,呵呵。
       
    end;
      

  3.   

    怎么大家没有理解我的问题吗?是多个应用程序或者DLL使用一个数据库连接,你们不觉得每一个小模块(如果你把模块都做成应用程序的话)都去连接一次数据库会浪费用户的时间吗?
    用户在打开你的子模块时又让用户作一次无谓的数据库连接等待,要是我也会烦了。不过还好,我已经算是解决了这个问题,就是将应用程序。EXE文件全部改为DLL程序,所有的动态连接库都使用一个数据库连接,用户在打开子模块时的速度问题终于解决了。而且也不用让每一个程序员改动他们的程序多少,就在调用时读一个连接对象就行了。
      

  4.   

    但是如何解决BPL的版本问题呢?我们可能马上要从DELPHI6换到DELPHI7了,会有问题吗?
      

  5.   

    http://www.delphibbs.com/delphibbs/dispq.asp?lid=1236802