当程序编译完成,才运行的时候,都要先建立一个数据源
但是发表后,不可能安装到其他的计算机后,用户都要从控制面板里面去
设置数据源吧,这样不是很麻烦~!
这个问题应该怎么解决?
谢谢

解决方案 »

  1.   

    没写全
    char* szDesc;
    int mlen;
    szDesc=new char[256];
    sprintf(szDesc,"DSN=%s: DESCRIPTION=TOC support source: DBQ=%s: FIL=MicrosoftAccess: DEFAULTDIR=D:\\Database:: ","TestDB","D:\\Friends.mdb");
    mlen = strlen(szDesc);
      for (int i=0; i<mlen; i++)
      {
    if (szDesc[i] == ':')
      szDesc[i] = '\0';
      } if (FALSE == SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)\0",(LPCSTR)szDesc))
     MessageBox(hwnd,"Failed","INFORMATION",MB_OK);
    else
     MessageBox(hwnd,"Sucess","INFORMATION",MB_OK); break;
    }
      

  2.   

    创建ODBC数据源可以通过调用windows系统子目录下的动态链接库Odbcint.dll中的函数SQLConfigDataSource来实现。该函数可以动态地增加、修改和删除数据源。
    其函数原型如下:
    BOOL SQLConfigDataSource(
    HWND hwndParent, //父窗口句柄
    UINT fRequest,   //操作类型
    LPCSTR lpszDriver, //数据库引擎名称
    PLCSTR lpszAttributes //数据源配置属性
    );
    参数hwndParent是父窗口句柄, 如果把它设置为空NULL,ConfigDataSource将不显示数据源设置对话框,否则按照以下方式调用。比如:
    SQLConfigDataSource(m_hWnd,ODBC_ADD_DSN,m_driver,attr);
    fRequest的取值有以下几种
    ODBC_ADD_DSN 增加一个数据源 ODBC_CONFIG_DSN 配置修改一个存在的数据源
    ODBC_REMOVE_DSN 删除一个已经存在的数据源
    ODBC_ADD_SYS_DSN ODBC_CONFIG_SYS_DSN ODBC_REMOVE_SYS_DSN 就是系统的了
    而参数lpszDriver是数据库引擎的名称,比如是加载的是ACCESS数据库, 那么名称就是"Microsoft Access Driver(*.mdb)"
    参数lpszAttributes为一连串形如"KeyName=***"的字符串,两个keyname之间用"\0"字符隔开。其主要是数据源缺省的驱动程序注册说明,而最主要的关键字是新数据源的名称DSN,其余关键字则根据不同的数据源有不同的要求。获取系统中已经安装的数据库驱动器信息可以通过SQLGetInstalledDrivers函数来实现。该函数定义如下:
    BOOL SQLGetInstalledDrivers(
    LPSTR lpszBuf, //保存驱动器信息的缓冲区
    WORD cbBufMax, //缓冲区最大长度
    WORD * pcbBufOut //返回的实际使用的缓冲区长度
    );