MyException - 我的异常网
当前位置:我的异常网» C++ » 请问用wxWidgets连接数据库的有关问题 卡在最后一步

请问用wxWidgets连接数据库的有关问题 卡在最后一步

www.MyException.Cn  网友分享于:2013-06-15  浏览:38次
请教用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都没有提示来看,数据源已正确连接并打开,就是不知道为什么无法显示和获取。

以下是代码:

窗口头文件:
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

文章评论

科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
总结2014中国互联网十大段子
总结2014中国互联网十大段子
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
鲜为人知的编程真相
鲜为人知的编程真相
 程序员的样子
程序员的样子
程序员都该阅读的书
程序员都该阅读的书
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
老程序员的下场
老程序员的下场
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
我是如何打败拖延症的
我是如何打败拖延症的
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
编程语言是女人
编程语言是女人
程序员的鄙视链
程序员的鄙视链
Java程序员必看电影
Java程序员必看电影
一个程序员的时间管理
一个程序员的时间管理
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
10个调试和排错的小建议
10个调试和排错的小建议
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
旅行,写作,编程
旅行,写作,编程
程序员和编码员之间的区别
程序员和编码员之间的区别
每天工作4小时的程序员
每天工作4小时的程序员
代码女神横空出世
代码女神横空出世
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
中美印日四国程序员比较
中美印日四国程序员比较
程序员应该关注的一些事儿
程序员应该关注的一些事儿
为什么程序员都是夜猫子
为什么程序员都是夜猫子
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
那些争议最大的编程观点
那些争议最大的编程观点
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
程序员必看的十大电影
程序员必看的十大电影
漫画:程序员的工作
漫画:程序员的工作
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
如何成为一名黑客
如何成为一名黑客
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有