用MIDAS做数据库连接,当超过6个客户端时出错,错误是:“cannot find engine configuration file”这是什么原因啊???

解决方案 »

  1.   

    检查一下服务器代码,一般MIDAS支持几百问题不大
      

  2.   

    MIDAS.dll跟数据库连接完全无关,问题不在这里。或许,你的MIDAS说的是其他的东西,而不是它的本来。
      

  3.   

    midas支持多种连接方式,你用的是哪种?
    个人是从没在实际项目用过midas
      

  4.   

    我的服务器就只有几段代码而已:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls;type
      TForm1 = class(TForm)
        Label1: TLabel;
        Panel1: TPanel;
        Label2: TLabel;
        Label3: TLabel;
        ClientCount: TLabel;
        QueryCount: TLabel;
      private
          FQueryCount: Integer;
        FClientCount: Integer;    { Private declarations }
      public
          procedure UpdateClientCount(Incr: Integer);
        procedure IncQueryCount;    { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    procedure Tform1.UpdateClientCount(Incr: Integer);
    begin
      FClientCount := FClientCount + Incr;
      ClientCount.Caption := IntToStr(FClientCount);
    end;
    procedure Tform1.IncQueryCount;
    begin
      Inc(FQueryCount);
      QueryCount.Caption := IntToStr(FQueryCount);
    end;end.unit Unit2;{$WARN SYMBOL_PLATFORM OFF}interfaceuses
      Windows, Messages, SysUtils, Classes, ComServ, ComObj, VCLCom, DataBkr,
      DBClient, Project2_TLB, StdVcl, Provider, DB, ADODB, DBTables;type
      TPC121 = class(TRemoteDataModule, IPC121)
        DataSetProvider1: TDataSetProvider;
        Session1: TSession;
        Database1: TDatabase;
        Query1: TQuery;
        procedure RemoteDataModuleCreate(Sender: TObject);
        procedure RemoteDataModuleDestroy(Sender: TObject);
        procedure Query1AfterOpen(DataSet: TDataSet);
      private
        { Private declarations }
      protected
        class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;
        function getdatabasename: OleVariant; safecall;
        procedure setdatabasename(const DBName, username, password: WideString);
          safecall;
        function GetTableNames: OleVariant; safecall;
      public
        { Public declarations }
      end;implementation
    uses Variants, Unit1;
    {$R *.DFM}class procedure TPC121.UpdateRegistry(Register: Boolean; const ClassID, ProgID: string);
    begin
      if Register then
      begin
        inherited UpdateRegistry(Register, ClassID, ProgID);
        EnableSocketTransport(ClassID);
        EnableWebTransport(ClassID);
      end else
      begin
        DisableSocketTransport(ClassID);
        DisableWebTransport(ClassID);
        inherited UpdateRegistry(Register, ClassID, ProgID);
      end;
    end;function TPC121.getdatabasename: OleVariant;
    var
      I: Integer;
      DBNames: TStrings;
    begin
      // 建立一个字符串数组存放BDE所有的数据库别名数据。
      DBNames := TStringList.Create;
      try
        // 利用Session控件取得当前BDE所有的数据库别名数据。
        Session1.GetDatabaseNames(DBNames);    /// 建立一个变量数组给函数返回变量Result。
        Result := VarArrayCreate([0, DBNames.Count - 1], varOleStr);    // 最后再把数据库别名数据指定给该变量数组。
        for I := 0 to DBNames.Count - 1 do
          Result[I] := DBNames[I];Finally  //如果错误就把构造的DBNames释放掉。     DBNames.Free;
      end;
    end;
    procedure TPC121.setdatabasename(const DBName, username,
      password: WideString);
    begin
    try
        // 把前台传来的数据库别名、用户上线名称、用户上线密码
        // 等三项数据指定给TDatabase控件,并且执行联机的操作。    Database1.Close;
        Database1.AliasName := DBName;
        if (UserName<>'') and (Password<>'') then begin
          Database1.Params.Values['PASSWORD'] := Password;
          Database1.Params.Values['USER NAME'] := UserName;
        end;
        Database1.Open;
      except
          // 如果联机时发生错误,则产生一个exception给前台程序
        // 前台程序将会利用到这个exception来判断是否要把输入上
        // 线数据的窗口激活。    on E: EDBEngineError do
       raise Exception.Create('Password Required') ;
       end;end;procedure TPC121.RemoteDataModuleCreate(Sender: TObject);
    begin
      // 增加一位前台上线者(调用Form1上的程序)
       Form1.UpdateClientCount(1);end;procedure TPC121.RemoteDataModuleDestroy(Sender: TObject);
    begin
      // 减少一位前台上线者(调用Form1上的程序)
      Form1.UpdateClientCount(-1);end;procedure TPC121.Query1AfterOpen(DataSet: TDataSet);
    begin
      // 新打开一个TQuery查询(调用Form1上的程序)
      Form1.IncQueryCount;end;function TPC121.GetTableNames: OleVariant;
    var
      I: Integer;
      DBTables: TStrings;
    begin
      // 建立一个字符串数组存放所有表名。
      DBTables := TStringList.Create;
      try
        // 利用Database控件取得当前所有表名数据。
        Database1.GetTableNames(DBTables , False);    /// 建立一个变量数组给函数返回变量Result。
        Result := VarArrayCreate([0, DBTables.Count - 1], varOleStr);    // 最后再把表名数据指定给该变量数组。    for I := 0 to DBTables.Count - 1 do
          Result[I] := DBTables[I];  finally
        DBTables.Free;
     end;   end;
    initialization
      TComponentFactory.Create(ComServer, TPC121,
        Class_PC121, ciMultiInstance, tmApartment);
    end.
    你们帮我看看到底是哪里写错了
      

  5.   

    这个问题我也碰到了,不过midas报错的内容不一样而已,主要是使用了Query1,你把TQuery 这个控件换掉或者要TClientDataSet就应该没有问题了
      

  6.   

    cannot find engine configuration file...
    找不到引擎配置文件...把Tquery組件替換成TClientDataSet組件試試看
      

  7.   

    我服务器主要用到四个控件,分别是:query、session、database、datasetprovider,如果要换掉query的话,那我的session连接哪里?如果换成是TClientDataSet,那具体怎样连接?