大家好,我按照书上的例子用ODBC连接数据库,在安装好MYSQL和MYSQL驱动后,创建了数据库,在ODBC中配置了数据源,host:localhost,database name:roaddb,user:root,password:空,port:3306,测试成功,然后我用MFC提供的三个类连接ODBC,可是却连接不上去,于是我只好用ACCESS测试一下,创建了一个ACCESS表,在ODBC中配置:数据源名:road,数据库:F:\\MFCTEST\\access\\road.mdb,用书上的例子重新做了一个,可以连接上ACCESS,MYSQL的问题出在GetDefaultConnect()函数上:
return _T("roaddbMySQL ODBC 3.51 Driver;DESC=roaddb;DATABASE=roaddb;SERVER=127.0.0.1;UID=admin;PASSWORD=;PORT=3306;OPTION=0;STMT=;");
ACCESS的GetDefaultConnect()函数为:
return _T("DSN=road;DBQ=F:\\MFCTEST\\access\\road.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;UID=admin;");,请高手们告诉我是什么回事???
return _T("roaddbMySQL ODBC 3.51 Driver;DESC=roaddb;DATABASE=roaddb;SERVER=127.0.0.1;UID=admin;PASSWORD=;PORT=3306;OPTION=0;STMT=;");
ACCESS的GetDefaultConnect()函数为:
return _T("DSN=road;DBQ=F:\\MFCTEST\\access\\road.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;UID=admin;");,请高手们告诉我是什么回事???
解决方案 »
- 怎么在VC6.0中直接使用Firebird的C或C++接口?
- 是不是随便一个带API接口的DLL都能被RUNDLL32.EXE调用???
- 怎么获得我自己从局域网到公网的每一级的IP阿,也就是要能从整个看出来我的所有数据包从我的计算机上到公网所经历的每一级网关
- 大家讨论,怎么杀死3721!
- 关于CALLBACK
- 如何判断一个程序已经运行?
- 求救!一个简单问题,如何去掉View的边框?
- 如果没有宋体9号,会不会影响窗口的市容
- 请问EnumChildWindows在98中是否可以运行
- 求救,再线等待,50分
- VC对MySQL开发的程序,如何在客户机上进行安装?
- 有没有 ip help api 的相关说明??函数用法什么?
看看这篇文章。1.添加odbc数据源road
2.
CString MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" +
"SERVER=localhost;" +
"DATABASE=roaddb;" +
"UID=admin;" +
"PASSWORD=;" +
"OPTION=3";CDatabase db;
if(!db.IsOpen())
{
db.Open(_T("road"),FALSE,FALSE,MyConString,FALSE);
}
2连接字符串里面的那些项,有时候颠倒一下顺序才可以,似乎是mysql odbc的一个bug,
我早年的时候碰到过这个问题,如果不行,可以尝试一下。
TRY
{
pGlobalDB->SetLoginTimeout(1);
pGlobalDB->Open(NULL,FALSE,FALSE,strSql,TRUE);//strSql为连接字符串
}
CATCH_ALL(e)
{
AfxMessageBox(IDS_ERROR01,MB_OK|MB_ICONERROR);
e->Delete();
return FALSE;
}END_CATCH_ALL
在客户机上手工建立一个文本文件,改扩展名为.UDL(Microsoft 数据连接文件),双击编辑。然后在程序利用这个连接文件就可以咯。
_ConnectionPtr m_pConnection;
_CommandPtr m_pCommand;
_ParameterPtr m_pParameter;
// 初始化COM
if (FAILED(::CoInitialize(NULL)))
{
cout<<"COM initialize failed"<<endl;
return 1;
}
// 创建数据库连接对象
if ( FAILED(m_pConnection.CreateInstance("ADODB.Connection")) )
{
cout<<"创建数据库连接对象失败"<<endl;
throw;
} // 选择数据库连接文件
m_pConnection->ConnectionString = "File Name=D:\\connect.UDL";
// 开始连接数据库
if ( FAILED(m_pConnection->Open("","","",NULL)) )
{
cout<<"连接数据库失败"<<endl;
throw;
}
不过我个人感觉mysql不是很理想的dbms,
可能是oracle,sqlserver先入为主了.而且mysql也并非完全免费,这个大家可以到它的官方主页看看.
就技术上而言也不是很完美我采用如下语句创建表,create table{ fld1 char[16], fld2 varchar[250]...}
事实上mysql在真正创建时候发生变化,全部变成varchar类型,我觉得有点不能理解,dbms怎么有权干涉用户的操作呢?我的mysql是4.17版本,大家可以做测试.