我现在正在做一个三层的应用系统,客户端并发100个左右。第一次做多层系统,水平实在比较菜。数据库用sqlserver,应用服务器用datebase连接数据库,属性如下:Aliasname为ODBC1,datebasename为DB_ODBC1。客户端用DCOM连接远端服务器。程序在本地编译运行,一直很正常。今天拿到另外一台机器运行,数据库设置和ODBC设置都一样,但是无法运行,提示错误:DB_ODBC1找不到 :(不知道是什么原因?另外请教这样的结构是否合理?如果有不同意见,请指点。

解决方案 »

  1.   

    能否介绍一下ADO相比之下的好处?
      

  2.   

    我都不知自己写的是不是三层模式但是我还是觉得用Ado好用Adoquery最方便了
      

  3.   

    请教,ado和bde在性能方面的差异呢?另外:我前面的问题怎么没人解答??
      

  4.   

    用ado,用得比較順手,而且不要去建什麼數據源,自動連接資料庫就行~~~~~~~~
      

  5.   

    ADOquery最在好处是比较灵活!
    你可以比较看看
      

  6.   

    ado 可以和database直接联系。而且可以随时更改其连接方式。
    给你一个例子:
    procedure TForm1.FormShow(Sender: TObject);
    var
      root: TextFile;
      server,name,password: string;
      connection:string;
      myado:tadotable;
      begin
      form1.dianjiaoshi_name:=tstringlist.Create;
      form1.dianjiaoshi_num:=tstringlist.Create;
      form1.dianjiaoshi_state:=tstringlist.Create;
      form1.jiaoshi_name:=tstringlist.Create;
      form1.jiaoshi_num:=tstringlist.Create;
      form1.jiaoshi_xi:=tstringlist.Create;    try
        AssignFile(root,'c:\root.ini'); { File selected in dialog }
        Reset(root);
        Readln(root, server);                        { Read first line of file }
        Readln(root, name);
        Readln(root, password);
        CloseFile(root);
        except
        messagedlg('无法找到启动文件!请配置系统后使用!',mtWarning,[mbOk],0);
        //form1.ShowModal;
        form1.N6.OnClick(nil);
        showmessage('请重新启动系统!');
        form6.Close;
        form1.Close;
        exit;
        end;
        //connection:='Provider=SQLOLEDB.1;Password=love;Persist Security Info=True;User ID=sa;Initial Catalog=djsh;Data Source=lily;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=LILY;Use Encryption for Data=False;Tag with column collation when possible=False';    connection:='Provider=SQLOLEDB.1;Password='''+password+''';Persist Security Info=True;User ID='''+name+''';Initial Catalog=djsh;Data Source='''+server+''';';
        connection:=connection+'Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID='''+server+''';Use Encryption for Data=False;Tag with column collation when possible=False';    form1.ADOConnection1.ConnectionString:=connection;try
    form1.ADOConnection1.Connected:=true;
    myado:=tadotable.Create(self);
    myado.Connection:=form1.ADOConnection1;
    myado.TableName:='classroom';
    myado.Open;
    while not myado.Eof do
    beginform1.dianjiaoshi_name.Add(trim(myado.FieldValues['教室名称']));
    form1.dianjiaoshi_num.Add(trim(myado.FieldValues['教室编号']));
    form1.dianjiaoshi_state.Add(trim(myado.FieldByName('当前状态').AsString));
    myado.Next;
    end;
    form1.ComboBox10.Items.Assign(form1.dianjiaoshi_num);myado.Close;
    myado.Free;
    myado:=tadotable.Create(self);
    myado.Connection:=form1.ADOConnection1;
    myado.TableName:='teacher';
    myado.Open;
    while not myado.Eof do
    begin
    form1.jiaoshi_name.Add(trim(myado.FieldValues['教师姓名']));
    form1.jiaoshi_num.Add(trim(myado.FieldValues['教师编号']));
    form1.jiaoshi_xi.Add(trim(myado.FieldValues['所属系']));
    myado.Next;
    end;
    form1.ComboBox11.Items.Assign(form1.jiaoshi_num);
    myado.Close;
    myado.Free;
    except
    form1.N5.Enabled:=false;
    form1.N11.Enabled:=false;
    form1.N16.Enabled:=false;
    form1.depart.Visible:=false;messagedlg('服务器连接失败!请确认系统是否正确配置!',mtWarning,[mbOk],0);
    form1.N6.OnClick(nil);
    sleep(2000);
    form1.close;
    end;
    form1.N5.Enabled:=false;
    form1.N11.Enabled:=false;
    form1.N16.Enabled:=false;
    form1.depart.Visible:=false;end;procedure TForm1.N12Click(Sender: TObject);
    begin
    form1.ADOTable1.Close;
    form1.ADOTable1.Open;
    form1.depart.Visible:=true;
    form1.depart.ActivePageIndex:=0;
    form1.teacher.Visible:=true;
    form1.depar.Visible:=false;
    form1.classroom.Visible:=false;
    form1.distribute.Visible:=false;
    form1.find1.Visible:=false;
    form1.find2.Visible:=false;
    form1.application.Visible:=false;
    //form1.PageControl.ActivePageIndex:=0;end;
      

  7.   

    请问如果我现在改用ADO方式,是否只要在应用服务器端修改,用ado连接,用adodateset代替以前的bde的query?客户端程序要作改动么?
      

  8.   

    我把应用服务器段改成了ADO+ADODataset的方式,结果客户端用commandtext方式进行查询时错误提示:不能在打开的Dataset中执行此操作!客户端程序未作改动,原来用bde连接正常,请问是不是ADODataset设置有问题?有什么参数设置要注意?或者客户端需要做一些调整?
      

  9.   

    何为三层,客户端用BDE岂不是直接面向数据库?三层最简单的模式客户端+MADIS+服务端采用ADO链接。无关BDE与ADO的好与坏。
      

  10.   

    服务器端用ado或者bde连接数据库,客户端不用,用的dcom连接服务器。
      

  11.   

    DCOM可能在Windows2000下有些问题
      

  12.   

    你的ODBC你测试了吗?
    在另一台机器上?
      

  13.   

    还要请教lwk_hlj(阿凯(为双星努力)),后来我换成了ado+ADOdataset连接,客户端程序未作修改,结果用commandtext方式进行查询时错误提示:不能在打开的Dataset中执行此操作!请问是什么原因?如何解决?
      

  14.   

    郁闷,不问这么多问题了。服务器端ado+ADOquery+datasetprovider,客户端dcom连接,结果用commandtext方式进行查询时错误提示:不能在打开的Dataset中执行此操作!请各位大哥指点!在线哭等啊!解决立刻揭帖,100分双手奉上。
      

  15.   

    客户端代码:      ClientDataSet_Query1.close;
          ClientDataSet_Query1.CommandText:=tempstr;
          ClientDataSet_Query1.open;是否服务器端的ADOquery或者datasetprovider什么地方设置不对?还是程序有问题?