我想在DataModule的OnCreate事件中做路径连接,使TDataBase能够连接到应用程序目录下指定路径的数据库。这段代码要怎么写才好,还请各路大侠指点迷津~~

解决方案 »

  1.   

    可以采用Ini文件或其它的参数传入拼connectstring字符串来联接.
      

  2.   

    我是想通过OnCreate事件来建立连接的``
    你说的,我不是很懂``
      

  3.   

    function ConnectDb(var adoConn: TADOConnection; sDBName, sDBPassCode,
      sDBsource, sDBUserID: String; sDBType: TDB_TYPE): Boolean;
    const
      lnk_ADOCONN_ORACLE = 'PLSQLRSet=1;Provider=OraOLEDB.Oracle.1;'
        + 'Password=%s;Persist Security Info=True;User ID=%s;'
        + 'Data Source=%s';  lnk_ADOCONN_SQLSERVER = 'Provider=SQLOLEDB.1;Password=%s;'
        + 'Persist Security Info=True;User ID=%s;'
        + 'Initial Catalog=%s;Data Source=%s';  lnk_ADOCONN_ACCEPT = 'Provider=Microsoft.Jet.OLEDB.4.0;'
        + 'Data Source=%s;Persist Security Info=True;'
        + 'Jet OLEDB:Database Password=%s';
    begin
      try
        Result := true;
        adoConn.Connected := false;
        adoConn.ConnectionString := '';
        if sDBType = dbACCEPT then
          adoConn.ConnectionString :=
                          Format(lnk_ADOCONN_ACCEPT, [sDBName, sDBPassCode])
        else if sDBType = dbSQLSERVER then
          adoConn.ConnectionString :=
                          Format(lnk_ADOCONN_SQLSERVER,[sDBPassCode, sDBUserID, sDBName, sDBsource])
        else if sDBType = dbOracle then
          adoConn.ConnectionString :=
                          Format(lnk_ADOCONN_ORACLE, [sDBPassCode, sDBUserID, sDBsource]);    adoConn.Connected := true;
        adoConn.Connected := false;
      except
        Result := false;
      end;
    end;
    function TDataModule1.ConnectDBProc: Boolean;
    begin
      Result := true;  s_mta_edb_dbName := s_mta_sysPath + 'mon_xp.mdb';
      s_mta_edb_pwd := 'bj2008';
      s_mta_edb_DataSource := '';
      s_mta_edb_UserID := '';
      s_mta_edb_dbType := Integer(dbACCEPT);  if not ConnectDb(ADOConnection_main,
                       s_mta_edb_dbName,
                       s_mta_edb_pwd,
                       s_mta_edb_DataSource,
                       s_mta_edb_UserID,
                       TDB_TYPE(s_mta_edb_dbType)) then
        begin
          Result := false;
          SystemMsgHint(Application.Handle, '数据库连接失败!');
          Exit;
        end;
    end;这样就可以解决你的问题了 
      

  4.   

    3楼的朋友,很感谢你为我写那么多代码,可是我是用BDE做的,不是用ADO啊```
      

  5.   

    我劝你还是用ADO做吧
    原因:
    1.用ADO的人比较多
    2.ADO用起来比较简单
    3.用ADO,打包软件的时候非常方便,而BDE就不那么容易了
      

  6.   

    我也想啊`可老师要求用BDE做```
      

  7.   

    学校里就是这样  有新的还用老掉牙的 
    跟不上形式  和老师说 现在商业程序开发都用ado     .net  都是ado.net 
    你教我门读书不是要教成书呆子吧 实用的东西 主流的东西 应该才是测试对象不是吗!bde ado 有什么不同 叫法不同 用法都一样 主要控件都是query 一样的
    你做出个ado 的  那个老师如果不是老糊涂 他应该还会夸你!
    就象他要个access数据库 你做出个sqlserver的 oracle的 相信他就不再想考你access了
      

  8.   

    先获取path=extractFileDir(application.exename)
    然后把path赋给database比如:path+'\data'
      

  9.   

    还没弄出来呢,不知道你用的是什么数据据,如果是intrbase相关的参数如下,具体的你自己参照一下吧
    SERVER NAME=d:\pos.gdb  //把这里改成8楼那样的相对路径  extractFileDir(application.exename)+'\ss.gdb';
    USER NAME=sysdba
    OPEN MODE=READ/WRITE
    SCHEMA CACHE SIZE=8
    LANGDRIVER=
    SQLQRYMODE=
    SQLPASSTHRU MODE=SHARED AUTOCOMMIT
    SCHEMA CACHE TIME=-1
    MAX ROWS=-1
    BATCH COUNT=200
    ENABLE SCHEMA CACHE=FALSE
    SCHEMA CACHE DIR=
    ENABLE BCD=FALSE
    BLOBS TO CACHE=64
    BLOB SIZE=32
    WAIT ON LOCKS=FALSE
    COMMIT RETAIN=FALSE
    ROLE NAME=
    PASSWORD=masterkey 如果是Access参数如下:
    DATABASE NAME= 
    USER NAME=
    ODBC DSN=
    OPEN MODE=READ/WRITE
    SCHEMA CACHE SIZE=8
    SQLQRYMODE=
    LANGDRIVER=
    SQLPASSTHRU MODE=SHARED AUTOCOMMIT
    SCHEMA CACHE TIME=-1
    MAX ROWS=-1
    BATCH COUNT=200
    ENABLE SCHEMA CACHE=FALSE
    SCHEMA CACHE DIR=
    ENABLE BCD=FALSE
    ROWSET SIZE=20
    BLOBS TO CACHE=64
    PASSWORD=
    在程序中设置相关参数代码如下:
            sConnect:=TStringList.Create();
            sConnect.Clear;
            sConnect.Add('SERVER NAME=' + );
            sConnect.Add('USER NAME=' + );
            sConnect.Add('OPEN MODE=READ/WRITE');
            sConnect.Add('SCHEMA CACHE SIZE=8');
            sConnect.Add('LANGDRIVER=');
            sConnect.Add('SQLQRYMODE=');
            sConnect.Add('SQLPASSTHRU MODE=SHARED AUTOCOMMIT');
            sConnect.Add('SCHEMA CACHE TIME=-1');
            sConnect.Add('MAX ROWS=-1');
            sConnect.Add('BATCH COUNT=200');
            sConnect.Add('ENABLE SCHEMA CACHE=FALSE');
            sConnect.Add('SCHEMA CACHE DIR=');
            sConnect.Add('ENABLE BCD=FALSE');
            sConnect.Add('BLOBS TO CACHE=64');
            sConnect.Add('BLOB SIZE=32');
            sConnect.Add('PASSWORD=' + password);        DestDatabase.Connected:=false;
            DestDatabase.Params:=sConnect;
      

  10.   

      mainform.temp.DatabaseName:=path+'\data';
      mainform.temp.SQL.Clear;
      mainform.temp.SQL.Append('select * from loginuser.db');
      mainform.temp.open;
      mainform.temp.First;
    这里的temp是一个Tquery