关于改动ODBC配置的问题
//---------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "UnitODBC.h"
#include "odbcinst.h"
//---------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFormODBC *FormODBC;
//---------------------------------------
__fastcall TFormODBC::TFormODBC(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------
void __fastcall TFormODBC::ButtonLocalhostClick(TObject *Sender)
{
SQLConfigDataSource(this,ODBC_CONFIG_SYS_DSN,"MySQL ODBC 5.1 Driver","DSN=localization\Server=localhost");
}
//---------------------------------------
代码如上,想点击ButtonLocalhost按钮之后将名为localization的System DSN的server改为localhost,但是我运行之后报错如下:
[ILINK32 Error] Error: Unresolved external 'SQLConfigDataSource' referenced from C:\DOCUMENTS AND SETTINGS\GENE XIE\DESKTOP\MY WORK\LOCALIZATION\RESEARCH_EVN\DEBUG\UNITODBC.OBJ
请大家帮忙看看出什么问题了,要怎么处理,谢谢!
[解决办法]
你使用了ODBC库文件中的函数,而系统在指定的路径又找不到该库文件。
将SQLConfigDataSource改为:
::SQLConfigDataSource(this,ODBC_CONFIG_SYS_DSN,"MySQL ODBC 5.1 Driver","DSN=localization\Server=localhost");
[解决办法]
若要使用 ::SQLConfigDataSource,必须包括 Odbcinst.h 头文件并使用 Odbcinst.lib 导入库。另外,Odbccp32.dll(对于 16 位系统为 Odbcinst.dll)必须在运行时路径中。
[解决办法]
BCB本身就有odbc支持,在程序头上加
#include <odbcinst.h>
#pragma link "odbccp32.lib"
就可以了
另外
SQLConfigDataSource(this,ODBC_CONFIG_SYS_DSN,"MySQL ODBC 5.1 Driver","DSN=localization\Server=localhost");
中的\要改为\\
[解决办法]
我在2010下测试了一下,的确不行了,因为新版的odbccp32.dll已改变
解决方案:
进入命令行,并在工程目录下执行:
implib odbccp32n c:\windows\system32\odbccp32.dll
然后在你原程序中改
#pragma link "odbccp32.lib"
为
#pragma link "odbccp32n.lib"
并改
::SQLConfigDataSource(this,ODBC_CONFIG_SYS_DSN,"MySQL ODBC 5.1 Driver","DSN=localization\\Server=localhost");
为
SQLConfigDataSource(Handle,ODBC_CONFIG_SYS_DSN,"MySQL ODBC 5.1 Driver","DSN=localization\\Server=localhost");
就OK了
(以上程序在BDS2010+WIN7下通过)
原程序在bcb6上可以运行
[解决办法]
是我记错了,应该这样
SQLConfigDataSource(0,ODBC_CONFIG_SYS_DSN,"MySQL ODBC 5.1 Driver","DSN=localization\0Server=localhost\0");
如果第一参数为Handle,会出现对话框.为0的话,自动完成