请问用wxWidgets连接数据库的有关问题 卡在最后一步
请教用wxWidgets连接数据库的问题 卡在最后一步
请教各位使用wxWidgets的高手,在下刚开始学习wxWidgets,在使用ODBC连接数据库的时候发生了问题,折腾了一天,上网找了N多资料无法解决,实在是没辙了。
本机配置了一个ACCESS的测试用数据源,就一个极简单的表和两个字段。
数据源已使用MFC另行编译工程测试通过,配置和使用无问题。
IDE环境:Visual Studio 2008下挂上wxWidgets 2.8.10库,已编译多个程序未发现问题,并且wxWidgets库中Setup.h已修改,Samples\Db这个ODBC示范例子能正确运行。
问题描述:1、文本框没有显示绑定的字段数据;
2、点击按钮,提示“error3”,数据库连接指针没有正确的移动到下一行;
从预设的error0、1、2都没有提示来看,数据源已正确连接并打开,就是不知道为什么无法显示和获取。
以下是代码:
窗口头文件:
窗口定义文件:
APP头文件:
请教各位使用wxWidgets的高手,在下刚开始学习wxWidgets,在使用ODBC连接数据库的时候发生了问题,折腾了一天,上网找了N多资料无法解决,实在是没辙了。
本机配置了一个ACCESS的测试用数据源,就一个极简单的表和两个字段。
数据源已使用MFC另行编译工程测试通过,配置和使用无问题。
IDE环境:Visual Studio 2008下挂上wxWidgets 2.8.10库,已编译多个程序未发现问题,并且wxWidgets库中Setup.h已修改,Samples\Db这个ODBC示范例子能正确运行。
问题描述:1、文本框没有显示绑定的字段数据;
2、点击按钮,提示“error3”,数据库连接指针没有正确的移动到下一行;
从预设的error0、1、2都没有提示来看,数据源已正确连接并打开,就是不知道为什么无法显示和获取。
以下是代码:
窗口头文件:
- C/C++ code
#ifndef THEFRAME_2009_12_26_H_ #define THEFRAME_2009_12_26_H_ #pragma once #include "wx/wx.h" #include <wx/db.h> #include <wx/dbtable.h> class theFrame : public wxFrame { public: theFrame(const wxString &Title, const wxPoint& pos, const wxSize& size); virtual ~theFrame(); void OnSize(wxSizeEvent &Event); void OnButton(wxCommandEvent &Event); wxDbConnectInf *ConnectConfig; wxDb *theConnect; wxStaticText *theTex; wxDbTable *tbl; int theID; wxChar theName[10]; protected: private: DECLARE_EVENT_TABLE() }; #endif
窗口定义文件:
- C/C++ code
#include "theFrame.h" //告诉引擎将事件和处理函数联系起来 BEGIN_EVENT_TABLE(theFrame, wxFrame) EVT_SIZE(theFrame::OnSize) EVT_BUTTON(wxID_OK, theFrame::OnButton) END_EVENT_TABLE() theFrame::theFrame(const wxString& Title, const wxPoint& pos, const wxSize& size) : wxFrame((wxFrame *)NULL, wxID_ANY, Title, pos, size) { theID = 0; memset(theName, 0, sizeof(theName)); tbl = NULL; theConnect = NULL; ConnectConfig = NULL; //放置一个文本标签显示数据 theTex = new wxStaticText(this, wxID_ANY, theName, wxPoint(0, 0), wxSize(100, 100), 0, wxT("Text")); wxColor theCo; theCo.Set(255,255,255); theTex->SetBackgroundColour(theCo); //放置一个按钮进行逐行滚动 wxButton *theB = new wxButton(this, wxID_OK, wxT("Get"), wxPoint(0, 200)); //启动和配置数据库环境 ConnectConfig = new wxDbConnectInf(NULL, wxT("DB1"), wxT(""), wxT("")); theConnect = NULL; theConnect = wxDbGetConnection(ConnectConfig); if (!theConnect) { //判断链接数据库是否成功 wxMessageBox(wxT("Error0")); } } theFrame::~theFrame() { if (NULL != tbl) wxDELETE(tbl); wxDbFreeConnection(theConnect); theConnect = NULL; wxDbCloseConnections(); if (NULL != ConnectConfig) delete ConnectConfig; } void theFrame::OnSize(wxSizeEvent &Event) { } void theFrame::OnButton(wxCommandEvent &Event) { tbl=new wxDbTable(theConnect,wxT("S1"),10,wxT(""), wxDB_QUERY_ONLY, wxT("")); if (!tbl->Open()) { //判断是否正确打开表 wxMessageBox("error1"); return; } if (!tbl->GetDb()) { //判断是否正确获取表数据 wxMessageBox("error2"); return; } //数据和变量绑定 tbl->SetColDefs(0, wxT("ID"), DB_DATA_TYPE_INTEGER, &theID, SQL_C_LONG, sizeof(theID), false, true); tbl->SetColDefs(0, wxT("theName"), DB_DATA_TYPE_VARCHAR, theName, SQL_C_CHAR, sizeof(theName), false, true); bool Test = tbl->GetNext(); if (false == Test) { //判断是否成功读取了下一行 wxMessageBox("error3"); } //重置标签上的数据 theTex->SetLabel(theName); theTex->SetClientSize(wxSize(100, 100)); }
APP头文件:
- C/C++ code
#ifndef THEAPP_2009_12_26_H_ #define THEAPP_2009_12_26_H_ #include "theFrame.h" //wxApp:程序基类 class theApp : public wxApp { public: virtual bool OnInit(); protected: private: }; #endif