请问怎么构建一个动态dsn?最好示例一下(

解决方案 »

  1.   

    //增加odbc数据源
    void CDemo1App::SetODBCSource()
    {
    CString strAccessPath = m_strExePath + "test.mdb";
    int iLen = strAccessPath.GetLength();
    char cpConfig[MAX_PATH];

    strcpy(cpConfig, "DSN=daliu\0");
    strcpy(cpConfig + 10, "DBQ=");
    strcpy(cpConfig + 14, strAccessPath);
    strcpy(cpConfig + 14 + iLen, "\0");
    strcpy(cpConfig + 15 + iLen, "DEFAULTDIR=");
    strcpy(cpConfig + 15 + iLen + 11, m_strExePath);
    strcpy(cpConfig + 25 + iLen + m_strExePath.GetLength(), "\0\0"); if(!SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN,"Microsoft Access Driver (*.mdb)\0",cpConfig))
    {
    //AfxMessageBox("add odbc source failed!");

    }
    }
      

  2.   

    补充:其实m_strExePath是打开文件对话框返回的文件路径名
    而且楼上的好像只能配置Microsoft Access Driver (*.mdb)
    其实你要先把数据提供程序驱动枚举出来,再根据需要选择适合自己的。
      

  3.   

    如何注册foxpro数据库呢?
    格式上有什么区别?
      

  4.   

    能否帮我看看下面的问题,或许对楼主有用,同时也解决了我的问题,而且在VC和CB的数据库部分还可以额外加分:为什么下面的SQLConfigDataSource总是返回false,123的数据源已经在我机器里存在,而且连接正常。    bool ( __stdcall *SQLConfigDataSource)(HWND, WORD, LPCSTR, LPCSTR) = NULL;
        HINSTANCE hODBCDll = LoadLibrary("odbccp32.dll");
        if (!hODBCDll)
        {
            AfxMessageBox("动态库加载失败!");
    return ;
        }

        (FARPROC &) SQLConfigDataSource = GetProcAddress
                                        (hODBCDll, "SQLConfigDataSource");
        if (!SQLConfigDataSource)
        {
            FreeLibrary(hODBCDll);
            return ;
        } //添加数据源
    BOOL lreturn = SQLConfigDataSource(NULL, 
    1,//配置数据源
    "SQL Server",//数据库驱动
    "DSN = 123\0"//数据源名称
    "Server = MyServer\0"//数据库服务器名称或者IP地址
    "Database = master\0");//数据库名称