我的程序连接的是ACCESS数据库,打包后给客户时,数据库的路径成了问题,怎么才能解决,或者有没有在程序运行时自动搜索数据库路径的代码.谢谢,在线等候~~~~~~~~

解决方案 »

  1.   

    不要使用绝对路径赋值;
    不要先赋值后编译;
    在程序运行时,在连接控件关闭状态下,为其ConnectionString赋值
    譬如ADO
    adoConn.close;
    adoConn.connectionString:= 'P....' + ExtractFilePath(Application.ExeName) + 'xxx.mdb' + '....";
    adoConn.open;
    ...
      

  2.   

    就是楼上说的办法的你把数据库就放在可执行程序的目录下的ExtractFilePath(Application.ExeName)再加上数据库的名称就可以很简单的连接了
      

  3.   

    CONNSTRING := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=';
        // 带密码
      //CONNSTRING := connstring + ExtractFilePath(paramstr(0)) + 'Kq_Std.mdb;Persist Security Info=False;Jet OLEDB:DataBase password=service';
    //不带密码
      CONNSTRING := connstring + ExtractFilePath(paramstr(0)) + 'Kq_Std.mdb;Persist Security Info=False;';
     AdoLogin.ConnectionString := CONNSTRING;
       AdoLogin.LoginPrompt := FALSE;
       AdoLogin.KeepConnection := TRUE;
      

  4.   

    uses
    inifiles
    implementation
    uses FRM_MAIN, dm_master;
    var SVSHRMINI: tinifile;
       filename: string;
       PassBool:boolean; filename := ExtractFilePath(paramstr(0)) + 'Kq_Std.ini';
       SVSHRMINI := TInifile.Create(filename);
       //判断数据库类型
       netstate:= svshrmini.ReadBool('DataBase State', 'NETWORK', false);
         if not netstate then
          //单机状态
       begin
          CONNSTRING := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=';
        //   CONNSTRING := connstring + ExtractFilePath(paramstr(0)) + 'Kq_Std.mdb;Persist Security Info=False;Jet OLEDB:DataBase password=service';
      CONNSTRING := connstring + ExtractFilePath(paramstr(0)) + 'Kq_Std.mdb;Persist Security Info=False;';
          ServerType := 'ACCESS';
       end
       else
       begin
          // 网络数据库状态
      Servername := SVSHRMINI.readstring('Sql State', 'SERVER', '(Loacl)');
       Serveruse := SVSHRMINI.readstring('Sql State', 'UID', 'sa');
       serverpw:=SVSHRMINI.readstring('Sql State', 'PWD', '');
     ServerDB := SVSHRMINI.readstring('Sql State', 'DATABASE', 'Kq_Std');
     CONNSTRING := 'Provider=SQLOLEDB.1;password='+serverpw+';Persist Security Info=true;User ID=';
      CONNSTRING := CONNSTRING + serveruse + ';Initial Catalog=' + serverdb;
      CONNSTRING := CONNSTRING + ';Data Source=' + servername;
       ServerType := 'MSSql'
       end;
       SVSHRMINI.Destroy;
       AdoLogin.ConnectionString := CONNSTRING;
       if netstate then
       begin
          adologin.Provider:='SQLOLEDB';
          adologin.DefaultDatabase :=ServerDB;
          end ;
       AdoLogin.LoginPrompt := FALSE;
       AdoLogin.KeepConnection := TRUE;/////可以勒吧,我就是这样弄的
      

  5.   

    怎么会出错呢?楼主再试试下面的
    var
      adoq: TADOQuery;
    begin
      adoConn.Close;
      adoConn.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;'
      +'Password="";Data Source='
      + ExtractFilePath(Application.ExeName)
      + 'db1.mdb;Persist Security Info=True';
      adoConn.Open;
      adoq:= TADOQuery.Create(nil);
      adoq.Connection:= adoConn;
      adoq.SQL.Clear;
      adoq.SQL.Add('select * from table1');
      adoq.Open;
      ShowMessage(adoq.Fields[1].AsString);
      adoq.Close;
      adoq.Free;