当前位置:编程学习 > VC++ >>

vc++中用odbc连接mysql数据库运行时出错

以下是我在MFC下的程序段,是在弹出对话框时运行这个函数的。
连接应该是没有问题,但是在程序运行弹出对话框的时候出错,而且没有任何提示信息(错误对话框是空的),请哪位好心的大哥帮帮忙!
说明:
m_database(CDatabase)
CTrainset_5 派生自 CRecordset
程序:
void CMainDlg::RefreshData()
{
   if(!m_database.IsOpen())
   {
    m_database.Open(_T("example"));
   }
   m_ListCtrl.DeleteAllItems();
   CTrainset_5 m_train(&m_database);
   m_train.Open(AFX_DB_USE_DEFAULT_TYPE,m_query);
   CDBVariant varValue;
   int i=0;
   if(!m_train.GetRecordCount()==0)
   {
    m_train.MoveFirst();
   }
   while(!m_train.IsEOF())
   {
    int temp=0;
    m_train.GetFieldValue(temp,varValue);//此函数建立了Record和varValue的连接
    m_ListCtrl.InsertItem(i,(char*)varValue.m_pstring);//先插入,后设定文本
 
    m_train.GetFieldValue(1,varValue);
    m_ListCtrl.SetItemText(i,1,varValue.m_pstring->GetBuffer(1));

    m_train.GetFieldValue(2,varValue);
    m_ListCtrl.SetItemText(i,2,varValue.m_pstring->GetBuffer(1));

    m_train.GetFieldValue(3,varValue);
    m_ListCtrl.SetItemText(i,3,varValue.m_pstring->GetBuffer(1));

    m_train.GetFieldValue(4,varValue);
    m_ListCtrl.SetItemText(i,4,varValue.m_pstring->GetBuffer(1));

    m_train.GetFieldValue(5,varValue);
    m_ListCtrl.SetItemText(i,5,varValue.m_pstring->GetBuffer(1));

    m_train.GetFieldValue(6,varValue);
    m_ListCtrl.SetItemText(i,6,varValue.m_pstring->GetBuffer(1));

    m_train.GetFieldValue(7,varValue);
    m_ListCtrl.SetItemText(i,7,varValue.m_pstring->GetBuffer(1));

    m_train.GetFieldValue(8,varValue);
    m_ListCtrl.SetItemText(i,8,varValue.m_pstring->GetBuffer(1));
   
    i++;
    m_train.MoveNext();
   }
}

 

经过单步执行后发现是在执行m_train.Open(AFX_DB_USE_DEFAULT_TYPE,m_query);时出错的
执行时进入了以下调用:
CATCH_ALL(e)
{
  CWinThread* pWinThread = AfxGetThread();
  if ( pWinThread != NULL )
  {
   lResult = pWinThread->ProcessWndProcException(e, &pThreadState->m_lastSentMsg);在这步弹出了出错框
   TRACE1("Warning: Uncaught exception in WindowProc (returning %ld).\n",
    lResult);
  }
  else
  {
   TRACE0("Warning: Uncaught exception in WindowProc.\n");
   lResult = 0;
  }
  DELETE_EXCEPTION(e);
}

答案:如果你用的是vc6的话:
   1、按F5运行你的程序
   2、在出错时,选择“重试”
    3、按ALT+7调出“调用栈”窗口
   4、双击从上往下的最近一个自己定义的函数,系统会自动把该函数所在的文件显示出来,此时程序就暂停在光标处。一般来说错误就出在这附近,你可以通过查看变量的值来确认。参考这里的实现 我写的一个用jsp连接MySQL数据库的代码。要正确的使用这段代码,你需要首先在MySQL数据库里创建一username表,表里面创建两个字符型的字段,字段名分别为:uid,pwd,然后插入几条测试数据。欢迎各位提出改进的意见。以下用两种方式来实现JSP连接MySql数据库。第一种方式,用JSP实现。 程序代码 <%@ page contentType="text/html; charset=gb2312" language="java"  import="java.sql.*"%><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><%     //**************************************     *********  JDBC_ODBC连接MySql数据库,不需要设置数据源    *********************************/                        //********** 数据库连接代码 开始 ******/       //以下几项请自行修改    String server="localhost";        //MYSQL 服务器的地址    String dbname="test";            //MYSQL 数据库的名字    String user="root";                //MYSQL 数据库的登录用户名    String pass="chfanwsp";            //MYSQL 数据库的登录密码    String port="3306";    //SQL Server 服务器的端口号,默认为1433        //数据库连接字符串     String url ="jdbc:mysql://"+server+":"+port+"/"+dbname+"?user="+user+"&password="+pass+"&useUnicode=true&characterEncoding=GB2312";     //加载驱动程序    Class.forName("org.gjt.mm.mysql.Driver").newInstance();    //建立连接    Connection con

上一个:关于VC++和Wintc...
下一个:用VC++如何实现一个目录选择的浏览按钮

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,