用VC6编一数据库程序,首先要在ODBC定义一数据源DBSOR。如果把该程序直接复制到其他机器上,除要复制相关的数据库文件(ACCESS数据库)外,是否还要在该机器上创建相应的数据源DBSOR?
如果不想这样,要求能直接复制程序和数据库就可以运行,程序中哪些地方需要做相应的调整啊?

解决方案 »

  1.   

    用SQLConfigDataSource在程序里面动态配置数据源就可以了。。不需要在程序外面手工配置ODBC数据源。。http://www.vckbase.com/document/viewdoc/?id=452
    参考上面这篇文章的源程序,在BOOL CLhwyApp::InitInstance()这个函数里面调用了上面所说的函数。。
      

  2.   

    创建数据源,一般在InitInstance()里写
    CString sPath;
    GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
    sPath.ReleaseBuffer();
    int nPos;
    // nPos=sPath.ReverseFind ('\\');
    // sPath=sPath.Left (nPos);
    nPos=sPath.ReverseFind('\\');
        sPath=sPath.Left (nPos);
    CString lpszFile = sPath + "\\DriTrain.mdb"; 
        char* szDesc;
    int mlen;
    szDesc=new char[256];
    sprintf(szDesc,"DSN=%s? DESCRIPTION=TOC support source? DBQ=%s? FIL=MicrosoftAccess? DEFAULTDIR=%s?? ","DriTrain",lpszFile,sPath); mlen = strlen(szDesc);
        for (int i=0; i<mlen; i++)
         if (szDesc[i] == '?')
           szDesc[i] = '\0';
      //  AfxMessageBox((LPCSTR)szDesc);    SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)\0",(LPCSTR)szDesc);
    删除数据源,一般在ExitInstance()写
    CString sPath;
    GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
    sPath.ReleaseBuffer();
    int nPos;
    // nPos=sPath.ReverseFind ('\\');
    // sPath=sPath.Left (nPos);
    nPos=sPath.ReverseFind('\\');
        sPath=sPath.Left (nPos);
    CString lpszFile = sPath + "\\DriTrain.mdb"; 
        char* szDesc;
    int mlen;
    szDesc=new char[256];
    sprintf(szDesc,"DSN=%s? DESCRIPTION=TOC support source? DBQ=%s? FIL=MicrosoftAccess? DEFAULTDIR=%s?? ","DriTrain",lpszFile,sPath); mlen = strlen(szDesc);
        for (int i=0; i<mlen; i++)
         if (szDesc[i] == '?')
           szDesc[i] = '\0';
      //  AfxMessageBox((LPCSTR)szDesc);    SQLConfigDataSource(NULL,ODBC_REMOVE_DSN,"Microsoft Access Driver (*.mdb)\0",(LPCSTR)szDesc);
        //动态删除数据源
      

  3.   

    偶看到别人写的程序,是用DAO访问的,不用创建数据源;运行了该程序后,ODBC数据源里也没有,可见并不是通过程序代码实现自动添加数据源;
    而且能支持手工选择数据库文件,选择后,以后就一直使用该文件,除非又重新选择了数据库文件
      

  4.   

    可以,用SQLConfigDataSource在程序里面动态配置数据源就可以了。。http://www.vckbase.com/document/viewdoc/?id=452
    参考上面这篇文章的源程序,在BOOL CLhwyApp::InitInstance()这个函数里面调用了上面所说的函数。。这个程序运行后,在ODBC数据源里可以看到添加了一个数据源;但偶看到别人写的程序就没有,(程序还在运行中,未退出)怪!