我在用SQLConfigDataSource配置数据源的时候,我这样来写:
strcpy(TempString,"DSN=ShuJuKu");
TempLen=strlen(TempString);
NowLen=TempLen+1;
memcpy(tempattrib_A,TempString,TempLen);
tempattrib[TempLen]=0;

strcpy(TempString,"DESCRIPTION=数据源");
TempLen=strlen(TempString);
memcpy(&tempattrib[NowLen],TempString,TempLen);
NowLen +=TempLen;
tempattrib[NowLen]=0;
NowLen++; strcpy(TempString,"SERVER=");
TempLen=strlen(TempString);
memcpy(&tempattrib[NowLen],TempString,TempLen);
NowLen +=TempLen;
         attribs="UseProcForPrepare=Yes\0OEMTOANSI=NO\0DataBase=dlcja\0";
memcpy(&tempattrib[NowLen],attribs,60);
         
         if (!SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN,"Sql Server",   (LPCSTR)tempattrib))
AfxMessageBox("创建ShuJuKu数据源失败"); 在数据源是Sql Sever的情况下,是成功的,但是当我把数据源换成是Oralce ODBC Driver或Microsoft ODBC for Oracle,配置又不会成功,是不是接口问题,还是微软在这方面有对oracle不兼容的方面。还有 SQLConfigDataSource配好后,为什么数据源为oracle的时候,UserID不显示。小弟在这里恳请高人指教。

解决方案 »

  1.   

    创建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 //返回的实际使用的缓冲区长度
    );