我做了一个小型系统,打包安装到其他机器后,必须手工重新配置数据源,如何在程序中通过代码实现数据源的自动注册?

解决方案 »

  1.   

    result=((CMyApp *)AfxGetApp())->currentdir+"db1.mdb";
    sprintf(odbc,"DSN=%s? DESCRIPTION=TOC support source? DBQ=%s? FIL=MicrosoftAccess? DEFAULTDIR=c:??",
       (LPTSTR)(LPCTSTR)(((CMyApp *)AfxGetApp())->m_DSN),(LPTSTR)(LPCTSTR)result);
             rv=strlen(odbc);
    for(i=0;i<rv;i++)
       if(odbc[i]=='?') odbc[i]='\0';

    rv=SQLConfigDataSource(NULL,ODBC_ADD_DSN,
    (LPCSTR)"Microsoft Access Driver (*.mdb)\0", (LPCSTR)odbc);
           if(!rv)
     {  //WORD        iError;
      DWORD ErrorCode;
      char lpszErrorMsg[100];
      //WORD cbErrorMsgMax;
      WORD cbMsgError;
      SQLInstallerError(1,&ErrorCode,lpszErrorMsg,100,&cbMsgError);
     }
      

  2.   

    void RegisterDBSource(CString strDSName, CString strDBPath)
    {
    HKEY hKey;
        DWORD nLabel; CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
    CString strMid = strBaseKey + _T("\\ODBC Data Sources") ; if(strDataSourceName.IsEmpty()) return;
    if(strDBPath.IsEmpty()) return; CString strDataSource = strBaseKey + _T("\\") + strDSName; CString strMdb = _T("Microsoft Access Driver (*.mdb)");
    CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
    CString strFIL = _T("Ms Access;");
    CString strUID = _T(""); RegCreateKeyEx(HKEY_CURRENT_USER,
                strMid,
        0, 
    NULL, 
    REG_OPTION_NON_VOLATILE, 
    KEY_ALL_ACCESS,
    NULL,
    &hKey, 
    &nLabel );//获取数据源键值句柄 RegSetValueEx(hKey,
      strDSName,
      0,
      REG_SZ,
      (const unsigned char *)((LPCTSTR)strMdb),
      strlen((LPCTSTR)strMdb)+1);///设置数据源类型 RegCreateKeyEx(HKEY_CURRENT_USER,
            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));//可选项
    }
      

  3.   

    通过注册表来添加ODBC数据源!
      

  4.   

    我是用MFC做的,楼上二位是不是都用WIN32做的?