大家好,我按照书上的例子用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;");,请高手们告诉我是什么回事???

解决方案 »

  1.   

    http://dev.mysql.com/doc/connector/odbc/en/faq_3.html#DSN_on_Windows
    看看这篇文章。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.   

    1首先在控制面板里面,看看mysql odbc是否可以连接,如果可以表示安装的正确。
    2连接字符串里面的那些项,有时候颠倒一下顺序才可以,似乎是mysql odbc的一个bug,
    我早年的时候碰到过这个问题,如果不行,可以尝试一下。
      

  3.   

    如果ODBC连接成功,但是在程序中无法连接成功,可能是连接字符串出现了问题,建议你仔细检查一下连接字符串,还可以捕捉一下异常。
    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
      

  4.   

    能行的方法
    在客户机上手工建立一个文本文件,改扩展名为.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;
    }
      

  5.   

    用myodbc连接方式,然后用ado数据库访问方式,
    不过我个人感觉mysql不是很理想的dbms,
    可能是oracle,sqlserver先入为主了.而且mysql也并非完全免费,这个大家可以到它的官方主页看看.
    就技术上而言也不是很完美我采用如下语句创建表,create table{ fld1 char[16], fld2 varchar[250]...}
    事实上mysql在真正创建时候发生变化,全部变成varchar类型,我觉得有点不能理解,dbms怎么有权干涉用户的操作呢?我的mysql是4.17版本,大家可以做测试.