pTheConn.CreateInstance(__uuidof(Connection)); // 创建实例
_bstr_t conn="DSN=ybs1;UID=sa;PWD=";
pTheConn->Open(conn,"","",-1);
现在数据源名我固定了一个ybs1,现在我想通过打开文件操作来找到数据源,也就是说当数据源名改动时程序不用改动。如何做。谢谢。

解决方案 »

  1.   

    楼主是不是想把数据源名称写入文件,然后在程序中连接数据源时通过文件中的名称连接?
    如果这样的话你建一个文本文件即可,然后openfile, read
      

  2.   

    SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)\0","DSN=TryDB\0","DBQ=D:\\Database\\try.mdb\0","DEFAULTDIR=D:\\DATABASE\0\0");这样就要吧根据文件名来定
      

  3.   

    一个相似的代码,文件对话框+注册数据源
    CFileDlg FileDlg(TRUE,".mdb","*.mdb",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"mdb文件");
    FileDlg.DoModal();
    CString strDBPath;
    strDBPath = FileDlg.GetPathName();
    HKEY hKey;
        DWORD nLabel;  CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
    CString strMid = strBaseKey + _T("\\ODBC Data Sources") ; if(strDBPath.IsEmpty()) return; CString strDataSource = strBaseKey + _T("\\jxj") ; CString strMdb = _T("Microsoft Access Driver (*.mdb)");
    CString strDBDriver = _T("C:\\WINDOWS\\System32\\odbcjt32.dll");
    CString strFIL = _T("Ms Access;");
    CString strUID = _T("");  RegCreateKeyEx(HKEY_LOCAL_MACHINE,
            strMid,
        0, 
     NULL, 
     REG_OPTION_NON_VOLATILE, 
     KEY_ALL_ACCESS,
     NULL,
     &hKey, 
     &nLabel ); //获取数据源键值句柄  RegSetValueEx(hKey,
     "jxj",
             0,
             REG_SZ,
             (const unsigned char *)((LPCTSTR)strMdb),
             strlen((LPCTSTR)strMdb)+1); //设置数据源类型 RegCreateKeyEx(HKEY_LOCAL_MACHINE,
        strDataSource,
      0, 
      NULL, 
      REG_OPTION_NON_VOLATILE, 
       KEY_ALL_ACCESS,
       NULL,
      &hKey, 
      &nLabel ); //创建数据源子键 RegSetValueEx(hKey,
          _T("DBQ"),
          0,
          REG_SZ,
          (const unsigned char *)((LPCTSTR)strDBPath),
          strlen((LPCTSTR)strDBPath)+1); //数据库表的全路径  RegSetValueEx(hKey,
                _T("Driver"),
          0,
          REG_SZ,
          (const unsigned char *)((LPCTSTR)strDBDriver),
          strlen((LPCTSTR)strDBDriver)+1); //ODBC驱动的全路径 RegSetValueEx(hKey,
          _T("FIL"),
          0,
          REG_SZ,
          (const unsigned char *)((LPCTSTR)strFIL),
          strlen((LPCTSTR)strFIL)+1);//表的类型 RegSetValueEx(hKey,
          _T("UID"),
          0,
          REG_SZ,
          (const unsigned char *)((LPCTSTR)strUID),
          strlen((LPCTSTR)strUID)+1);//必须项
     DWORD DriverId = (DWORD)25;
     RegSetValueEx(hKey,
         _T("DriverId"),
       0,
        REG_DWORD,
        (const BYTE *)(&DriverId),
        sizeof(DWORD));//必须项
      DWORD SafeTrans = (DWORD)0;
    RegSetValueEx(hKey,
         _T("SafeTransactions"),
         0,
      REG_DWORD,
      (const BYTE *)(&SafeTrans),
      sizeof(DWORD));//可选项
    RegCreateKeyEx(HKEY_LOCAL_MACHINE,
        strDataSource + "\\Engines\\Jet",
      0, 
      NULL, 
      REG_OPTION_NON_VOLATILE, 
       KEY_ALL_ACCESS,
       NULL,
      &hKey, 
      &nLabel ); //创建数据源子键
    DWORD MaxBufferSize = (DWORD)800;
    RegSetValueEx(hKey,
         _T("MaxBufferSize"),
         0,
      REG_DWORD,
      (const BYTE *)(&MaxBufferSize),
      sizeof(DWORD)); DWORD PageTimeout = (DWORD)5;
    RegSetValueEx(hKey,
         _T("PageTimeout"),
         0,
      REG_DWORD,
      (const BYTE *)(&PageTimeout),
      sizeof(DWORD)); DWORD Threads = (DWORD)5;
    RegSetValueEx(hKey,
         _T("Threads"),
         0,
      REG_DWORD,
      (const BYTE *)(&Threads),
      sizeof(DWORD)); RegSetValueEx(hKey,
          _T("UserCommitSync"),
          0,
          REG_SZ,
          (const unsigned char *)("yes"),
          strlen("yes"));
      

  4.   

    还不行呀。对了,我用的数据库是SQL server.谢谢各位了
      

  5.   

    写注册表动态创建SQL Server ODBC数据源各个参数的意义:
    DBServer: 数据库所在主机
    DBName:  数据库名称
    DSN:   数据源名称
    UID:   登陆用户
    返回值:
    -1: 没有安装SQL Server驱动程序
    -2: 其他错误
    0: 成功实现函数:
    int MakeSQLServerODBCDSN(LPCTSTR DBServer,LPCTSTR DBName,LPCTSTR DSN,LPCTSTR UID)
    {
     BOOL  bInstallDriver=TRUE;
     CRegKey  regKey; LONG lRet=regKey.Open(HKEY_LOCAL_MACHINE,"Software\\ODBC\\ODBCINST.INI\\SQL Server");
     if(lRet!=ERROR_SUCCESS)
     {
      bInstallDriver=FALSE;
     }
     else
     {
      char  szDirverPath[MAX_PATH]="";
      DWORD  dwCount=100;
      lRet=regKey.QueryValue(szDirverPath,"Driver",&dwCount);
      if((lRet!=ERROR_SUCCESS)||(dwCount<1))
      {
       DWORD dwErr=GetLastError();
       bInstallDriver=FALSE;
      }
      regKey.Close();
     }
     if(!bInstallDriver)
     {
      return -1;
     }
     CString  strKeyValueName="Software\\ODBC\\ODBC.INI\\";
     strKeyValueName+=DSN;
     lRet=regKey.Create(HKEY_LOCAL_MACHINE,strKeyValueName);
     if(lRet!=ERROR_SUCCESS)
     {
      return -2;
     }
     regKey.SetValue(DBName,"Database");
     regKey.SetValue("SQLSrv32.dll","Driver");
     regKey.SetValue(DBServer,"Server");
     regKey.SetValue(UID,"LastUser");
     regKey.m_hKey=HKEY_LOCAL_MACHINE;
     regKey.SetKeyValue("Software\\ODBC\\ODBC.INI\\ODBC Data Sources","SQL Server",DSN);
     regKey.Close();
     return 0;
    }