dll里的adoconnection一般只测试一下能不能连上数据库把
要是用于操作的最好放到,和adoquery,adotable一块的位置
比如form上
或者datamoudle里

解决方案 »

  1.   

    dll可以用外面的datamodule吗?
    dll可以建立自己的datamodule吗?
    谢谢!
      

  2.   

    我是想把一些常用的查询放在dll中,如帐号登陆,查询帐号权限。
    各位有没有这方面的经验。
      

  3.   

    好象不行,如果能解决请copy给我一份
    [email protected]
    thanks
      

  4.   

    library Project1;uses
      SysUtils,
      Classes,
      Windows, Messages,Graphics, Controls,
       Db, ADODB;
    {$R *.RES}Function shihuafei(shichang:integer;ADOC:TADOConnection):currency ;stdcall;
    var
    ADOT:Tadotable;
    qsd:integer;
    qfl:Currency ;
    hsd:integer;
    hfl:Currency ;begin
      ADOT:=TADOTable.create(nil);
      ADoT.Connection:=Adoc;
      Adot.TableName:='syscfg';
      Adot.Active :=True;  AdoT.Locate('note','市话前几分钟计费时间段',[loPartialKey]);
      qsd:=strtoint(Adot.fieldbyname('syscfg').asstring);
      AdoT.Locate('note','市话前3分钟费率',[loPartialKey]);
      qfl:=strtocurr(Adot.fieldbyname('syscfg').Asstring);
      AdoT.Locate('note','市话几分钟后的计费时间段',[loPartialKey]);
      hsd:=strtoint(Adot.fieldbyname('syscfg').asstring);
      AdoT.Locate('note','市话以后每分钟费率',[loPartialKey]);
      hfl:=strtocurr(Adot.fieldbyname('syscfg').asstring);
      ADOT.free;
     if shichang<=qsd then Result:= qfl
       else if ((shichang-qsd) mod hsd)<>0 then result:= ((shichang-qsd) div hsd +1)* hfl + qfl
        else  result:= ((shichang-qsd) div hsd)* hfl + qfl;
    end;
    exports
     shihuafei;end.
      

  5.   

    ADOT:=TADOTable.create(nil);nil 不会对释放什么的有影响吧?
      

  6.   

    不行啊!
    Access Violation at address 77991485 in module 'oldaut32.dll'.read of address 0013c000
    //----------------------代码如下--------------------------------
    library Account;uses
      SysUtils,
      Classes,
      ADOdb;type
    {$R *.RES}function GetAccountInfo(ADOCnn: TADOConnection; uAccount, uPassword: WideString; out uStaffId: integer; uName: WideString): integer; stdcall;
    var
      AdoQry: TAdoQuery;
    begin
      Result := 1;
      if (not length(uAccount) > 0) and (not length(uPassword) > 0) then
      begin
        Result := 1;
        exit;
      end;  if ADOCnn.Connected then
      begin
        AdoQry := TAdoQuery.Create(nil);
        with AdoQry do
        begin
          Connection := AdoCnn;
          Close;
          SQL.Clear;
          SQL.Add('select * from Vacc0204_ActiveAcountInfo where Account=' + '''' + uAccount + '''' + ' and uPassword=' + '''' + uPassword + '''');
          try
            Open;
            if RecordCount > 0 then
            begin
              First;
              uStaffId := FieldByName('StaffID').asinteger;
              uName := FieldByName('Pname').asstring;
              Result := 0;
            end
            else begin
              Result := 1;
            end;
          except
            Result := 1;
          end;
          Close;
          Free;
        end;
      end
      else Result := 1;
    end;exports
      GetAccountInfo;
    beginend.