我的程序是在A机上写的,用的是A机上的数据库SQL2000,用DELPHI6.0的ADO和BDE(Query)连接数据库 ,在A机上编译通过,其中用BDE的时候要输入用户名和密码,可生成EXE文件,可执行把他拷贝到B机上也可以执行EXE文件,但是把程序拿到B机上编译老是出错,说 project project1.exe 
raised expection class EoleExpection with message“连接字符串属性无效”。press stop,setup or run to continue。  应如何解决? 我B机也是用SQL2000,DELPHI6.0的。

解决方案 »

  1.   

    编译时ADOConnectin不要连接数据库,启动时动态指定连接字符串
      

  2.   

    IniFileNameStr:=ExpandFileName(ExtractFilePath(Application.ExeName)+'\Database.ini');
        MyIniFileStr:=TIniFile.Create(IniFileNameStr);
        ServerNameStr:=MyIniFileStr.ReadString('DataBase','DataServer','wrong');
        DataBaseNameStr:=MyIniFileStr.ReadString('DataBase','DataBaseName','wrong');
        UserStr:=MyIniFileStr.ReadString('DataBase','UserName','wrong');    ConnectStr:='provider=SQLOLEDB.1;Persist Security Info=false;'+      //手动配置连接字串
                     'User ID='+UserStr+';'+
                     'Initial Catalog='+DataBaseNameStr+';'+
                     'Data Source='+ServerNameStr;
       ADOConnection1.Connected:=false;
       ADOConnection1.ConnectionString:=ConnectStr;
       ADOConnection1.Connected:=true;
      

  3.   

    用的时候先把ConnectionString设置为空。。
      

  4.   

    是不是在FormCreate 的事件下写动态连接数据库?
      procedure TForm1.FormCreate(Sender: TObject);
    begin
      ADOConnection1.ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=rsxx;Data Source=AA;Username=bb;Password=111111';
      ADOConnection1.LoginPrompt:=false;
      ADOQuery1.Connection:=ADOConnection1;
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('select xm from jg');
      ADOQuery1.Open;
    end;
      

  5.   

    连接字符串需要动态写,另外将adoconnection的connectionstring属性清空
      

  6.   

    同上意见……
    如不想写在程序里的话,还可以通过读INI文件、注册表及UDL文件(ADO数据链接文件)来实现。
      

  7.   

    你的做法在本机上是可以的,因为你的服务器是本机的,但是你那到别的机上就没有服务器了,要指向A机的服务器名或ID,他们说的动态连接数据库是指通过配置INI文件后读取INI文件的内容来完成的,这样是比较好的做法,你先做一数据库信息的INI文件,再读取INI文件内容来达到连接,下面是我的一般做法,我做了一个INI文件和DLL文件来进行数据库连接
    这是制作INI文件原码
    implementation
    var
    myinifile:TInifile;
    {$R *.dfm}procedure TForm1.suiButton2Click(Sender: TObject);
    begin
    close;
    end;procedure TForm1.suiButton1Click(Sender: TObject);
    var
    filename:string;
    begin
      filename:=ExtractFilePath(paramstr(0))+'zdqreg.ini';
     myinifile:=TInifile.Create(filename);
     myinifile.writestring('main','DBServerName',trim(suiedit1.Text));
      myinifile.writestring('main','DBName',trim(suiedit2.Text));
      myinifile.writestring('main','userID',trim(suiedit3.Text));
      myinifile.writestring('main','password',trim(pwEncrypt(suiedit4.Text)));
      application.MessageBox('注册服务器成功!','提示',64);
    end;DLL函数的制作
    -----------这个是输出参数
    exports
       GetRegInfo;  //获取注册表信息
    --------------------------function GetRegInfo(Flag:Integer):ShortString;
    var
        filename,p:string;
        fp:Tinifile;
    begin
      filename:= ExtractFilePath(ParamStr(0))+'zdqreg.ini';
       fp:=Tinifile.create(filename);
       case Flag of
          1:begin   //1数据库服务器名称
             p := 'DBServerName';
            end;
          2:begin   //数据库名称
              p := 'DBName';
            end;
          3:begin   //登陆帐号
              p := 'userID';
            end;
          4:begin   //登陆密码
              p := 'password';
            end;
         5:begin   //连接方式
              p := 'LinkAppsMode';
           end;
       end;
     Result:=fp.readstring('main',p,'');
    end;在DELPHI中调用
    var
      Form1: TForm1;
      Function GetRegInfo(Flag:Integer):ShortString;external 'zdqreg.dll';//导入DLL
    implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
    ADOConnection1.ConnectionString:=' Provider=SQLOLEDB.1;'+'Persist Security Info=False;User ID='+GetRegInfo(3)+';Password='+GetRegInfo(4)+';'+
                      'Initial Catalog='+GetRegInfo(2)+';Data Source='+GetRegInfo(1);
    end;end.你看看做DLL和INI文件的操作应该很快就会了,有问题再发信息给我
      

  8.   

    BDE设置了吗?
    建议在数据库连接的时候用一种连接方式,我是比较习惯用ADO
    而且连接数据库的时候最好用一个DATAMODAL,并且尽量在数据库连接的时候用代码来实现。
      

  9.   

    ADO的ConnectionString有错,连接的机器名可能会是不一样的,应该要动态取到机器上的机器名,而不是自己写定原来的机器名
      

  10.   

    不知道为什么,我动态连接数据库后,老是出现这样的错误。[Fatal Error] Could not create output file 'E:\rsc\041030\主文件\Project1.exe'
      

  11.   

    在本机的连接搬过去是容易出问题,
    你用动态连接吧
    或者就用access,ado,sqlserver,不用bde
      

  12.   

    我写了这个(yonghudenglu),算不算是动态连接数据库哦?在A的时候可编译通过,生成EXE文件,拿到B机也可以执行,但是为什么把程序拿到B机,编译的时候老是出现这样的错误:[Fatal Error] Could not create output file 'E:\rsc\041030\主文件\Project1.exe',为什么?应如何解决?
    ---connect.ini文件--
    [connect]
    Server=DB
    DB=rsx
    User=sa
    Ps=6148
    -------------
    unit yonghudenglu;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Buttons, Mask, DB, DBTables, ADODB,inifiles;type
      TF_yonghudenglu = class(TForm)
        BitBtn1: TBitBtn;
        BitBtn2: TBitBtn;
        GroupBox1: TGroupBox;
        Label1: TLabel;
        Label2: TLabel;
        ComboBox1: TComboBox;
        MaskEdit1: TMaskEdit;
        ADOQuery1: TADOQuery;
        ADOConnection1: TADOConnection;
        procedure BitBtn1Click(Sender: TObject);
        procedure BitBtn2Click(Sender: TObject);
        procedure FormShow(Sender: TObject);
        procedure FormActivate(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    var
      F_yonghudenglu: TF_yonghudenglu;
    implementationuses main, quanxianguanli, DM_xt, datersda;{$R *.dfm}procedure TF_yonghudenglu.BitBtn1Click(Sender: TObject);
                //取消按钮
    begin
     close;
    end;procedure TF_yonghudenglu.BitBtn2Click(Sender: TObject);
    begin
      if Combobox1.Text='' then
         Combobox1.SetFocus
      else if trim(maskedit1.Text)='' then
          maskedit1.SetFocus
      else
      begin
        with DM_xt_shujuku do
        begin
        ADOQ_denglu.Close;
        ADOQ_denglu.SQL.Clear;
        ADOQ_denglu.SQL.Add('select rybh,mm,xm from users ');
        ADOQ_denglu.SQL.Add('where ltrim(rtrim(rybh))='+''''+trim(Combobox1.Text)+'''');
        ADOQ_denglu.SQL.Add(' and ltrim(rtrim(mm))='+''''+trim(maskedit1.text)+'''');
        ADOQ_denglu.Open;
        if (ADOQ_denglu.RecordCount<>1) or
        (trim(maskedit1.Text)<>trim(ADOQ_denglu.FieldValues['mm'])) then
        begin
          showmessage('口令不对,请检查。');
          MaskEdit1.Text:='';
          MaskEdit1.SetFocus ;
        end
        else
          begin
            F_main.StatusBar1.Panels[1].text:='   '+ComboBox1.Text;
            F_yonghudenglu.Visible:=false;
            F_quanxianguanli.READ_BMAM_PMS(pms_rybh,pms_mkbs);
            F_main.ShowModal;
            F_yonghudenglu.Close;
          end;
        end;
      end;
    end;procedure TF_yonghudenglu.FormShow(Sender: TObject);
    begin
      Combobox1.Text:='';
      maskedit1.Text:='';
    end;procedure TF_yonghudenglu.FormActivate(Sender: TObject);
    begin
      Combobox1.SetFocus;
    end;procedure TF_yonghudenglu.FormCreate(Sender: TObject);
    var
      filename:string;
      ConnectIni:TIniFile;
      servername,DB,User,Ps:string;
    begin
      filename:=ExtractFilePath(paramstr(0))+'connect.ini';
      ConnectIni:=TInifile.Create(filename);
      ServerName:=ConnectIni.ReadString('connect','server','null');
      DB:=ConnectIni.ReadString('connect','DB','null');
      User:=ConnectIni.ReadString('connect','User','null');
      Ps:=ConnectIni.ReadString('connect','Ps','null');
      AdoConnection1.ConnectionString:='Provider=SQLOLEDB.1;Password='+ps+';Persist Security Info=True;';
      AdoConnection1.ConnectionString:=AdoConnection1.ConnectionString+'User ID='+User+';Initial Catalog='+DB+';Data Source='+ServerName+'';
      AdoConnection1.Connected:=True;
      ADOConnection1.LoginPrompt:=false;
      ADOQuery1.Connection:=ADOConnection1;
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('select rybh from users');
      ADOQuery1.open;
      while not ADOQuery1.EOF do
        begin
          combobox1.Items.Add(ADOQuery1.FieldValues['rybh']);
          ADOQuery1.next;
        end;end;end.
      

  13.   

    Fatal Error] Could not create output file 'E:\rsc\041030\主文件\Project1.exe'
    错误的解决方法就是重启看看,是编译器出错了,重启都不行的话,那就没有办法了,我以前也遇过这样的情况
      

  14.   

    还有一种情况就是你的程序似乎在Delphi中打开的。你编译过。但是可能是把那个已经编译好的EXE文件删除了。你关闭再重新打开一下看看。
      

  15.   

    谢谢ksaiy和zd801104,正如你们所说,我在编译之前已经打开过EXE文件,重启后就可以编译啦。
      

  16.   

    分不够,我不好意思在这里再问了,请各位大侠到这里看看http://community.csdn.net/Expert/PostNew.asp?room=5305