第12课 创建一个ODBC应用
2013-04-18 16:23
295 查看
简 介
本节的目的是演示如何用UltimateGrid开发全功能的ODBC(MFC)应用程序。开放式数据库互连(ODBC)接口允许应用程序使用结构化查询语句(SQL)作为访问数据的标准去访问数据库管理系统(DBMS)中的数据。该接口允许最大程度的互通性 — 一个应用程序可以访问不同的数据库管理系统。
第1步– 创建一个新的MFC项目
使用MFC应用程序向导创建一个新的MFC项目,项目命名为ODBC20。图 4.28 – MFC应用程序向导
在MFC应用程序向导中,第一步选择基于对话框的选项。如下图。
图 4.29 – MFC应用程序向导的第一步
选择【Finish】,由MFC应用程序向导为你完成创建项目框架文件。
添加Ultimate Grid项目文件
添加所有在源代码目录"Source"和"Include"中的*.h文件和*.cpp文件到项目中
同样也包括mycug.cpp和mycug.h文件。
另外四个文件必须被添加到项目中。这些文件在软件工具包中("DataSources\ODBC")。这四个文件是ugodbc.cpp, ugodbc.h, ugrecset.cpp和ugrecset.h,负责在应用程序中扩展ODBC功能。
第2步– 创建一个ODBC接口
点击资源文件标签页。Visual C++会有如下图所示的显示。点击IDD_ODBC20_DIALOG。修改界面类似于下图。
图 4.30 – 一个空白的对话框界面
参阅下表给所有的控件分配正确的名字。
控件 | 控件名 |
编辑框 | IDC_SQL_EDIT |
组合框 | IDC_CONNECT |
静态文本 | IDC_GRID |
SQL按钮 | IDSQL |
Browse按钮 | IDBROWSE |
Close按钮 | IDCLOSE |
第3步– 包含必要的头文件
在创建对话框界面后,添加必要的头文件。在ODBC20.cpp和ODBC20Dlg.cpp文件中包含mycug.h文件。
// ODBC20.cpp : 定义应用程序的类行为
#include "stdafx.h" #include "mycug.h" // 这个新加的头文件 #include "ODBC20.h" #include "ODBC20Dlg.h"
添加< afxdb.h>到STDAFX.H文件中
包含afxdb.h头文件到STDAFX.h
#define VC_EXTRALEAN // Excluderarely-used stuff from Windows headers #include <afxwin.h> // MFC coreand standard components #include <afxdb.h> // 添加的头文件 #include <afxext.h>
第4步– 创建必要的成员变量
首先被创建的对象是网格对象。打开ODBC20Dlg.h文件,添加下面两句代码。一个是创建网格对象,另一句是创建一个整形的索引变量。class CODBC20Dlg : public CDialog { // Construction public: CODBC20Dlg(CWnd* pParent = NULL); MyCug m_grid ; // 新的网格对象 int m_index ; // 新的成员变量 // Dialog Data
接下来,我们必须使成员变量与界面上的控件相关联。使用类向导来完成。与变量相关联的控件名是:IDC_SQL_EDIT和IDC_CONNECT。启动类向导选择IDC_SQL_EDIT。参考下图。
图 4.31 – 类向导
选择Add variable按钮。 这将产生下面这个对话框
图 4.32 – 添加成员变量对话框
这个变量命名为m_sql2。记住Category选项选’control’,点击“OK”生成了一个成员变量。
对于IDC_CONNECT控件也重复这一步,命名为m_control2。
此时类向导生成了两个成员变量。请看下列代码。
public: CODBC20Dlg(CWnd* pParent = NULL); //standard constructor MyCug m_grid ; // Dialog Data //{{AFX_DATA(CODBC20Dlg) enum { IDD = IDD_ODBC20_DIALOG }; CcomboBox m_control2; // 新的成员变量 CEdit m_sql2; // 新的成员变量 //}}AFX_DATA
两个新的成员变量就是类向导所创建的。
第5步– 创建一个ODBC对象
最后必须要被创建的对象是ODBC对象,这个对象可以被建在MyCug类中。选择类视图,高亮MyCug类,然后右键点击,选择"Add Member Variable",这样将显示下图
图 4.33 – 添加一个成员变量的屏幕
在Variable Type框中输入'CUGODBCDatasource'。在Variable Declaration框中输入'm_odbc'。点击OK。
第6步– 在对话框界面上建立网格
在CODBC20Dlg::OnInitDialog()内添加后面这行代码, "m_grid.AttachGrid(this,IDC_GRID)"。BOOL CODBC20Dlg::OnInitDialog() { CDialog::OnInitDialog(); m_grid.AttachGrid(this,IDC_GRID); // Add "About..." menu item to system menu.
在MyCug::OnSetup()内添加下列两行代码。
void MyCug::OnSetup() { SetNumberRows(10); SetNumberCols(10); }
编译执行项目。
执行你的项目屏幕将显示下面图示的界面。
图 4.34 - Ultimate Grid在对话框界面上
现在程序还没有功能,但下面章节将对所有控件进行编码。
第7步– 添加功能控件
选择类向导,创建两个CODBC20Dlg类的成员函数。给三个按钮(Browse, SQL和Close)赋予功能。打开类向导,选择IDBROWSE。请参阅下图。图 4.35 – 类向导
消息提示创建一个新的函数,选择“是”。对于IDSQL和IDCLOSE重复此步骤。
此时,创建了CODBCDlg::OnBrowse(), CODBCDlg::OnSQL()和CODBCDlg::OnClose这三个函数。
在为这两个函数编写代码之前,我们必须添加一行代码到CODBC10Dlg::OnInitDialog()中,这行代码负责创建数据源索引,为网格提供数据。
添加的代码为后面粗体部分。
BOOL CODBC10Dlg::OnInitDialog(){ CDialog::OnInitDialog(); m_grid.AttachGrid(this, IDC_GRID) ; m_index =m_grid.AddDataSource(&m_grid.m_odbc); // Add "About..." menu item tosystem menu.
第8步– 编码OnBrowse
添加下列代码行到函数中。void CODBC20Dlg::OnBrowse() { //声明所有的变量 int ans; CString sqlString, connectstr; SQLDatasourceInfo *dbI; char buf[256] ; ans = m_grid.m_odbc.Browse(this->m_hWnd); if (ans == UG_SUCCESS) { m_sql2.SetWindowText(*m_grid.m_odbc.GetConnectString()); MessageBox("You have successfully connected to the database" , "OK", MB_OK); int i = 0; while(dbI = m_grid.m_odbc.GetTableInfo(i++)) { sqlString.Format("Select * FROM[%s]", dbI->tableName); m_control2.AddString(sqlString); } } //进入编辑部分选择第一项 m_control2.GetLBText(0, buf); m_control2.SetWindowText(buf); }
第9步– 编码OnSQL()
添加下列代码行到这个函数。void CODBC20Dlg::OnSql() { //声明所有变量 int ret = 1; CString db; CString sql; m_grid.SetDefDataSource(0); m_grid.SetTH_Height(0); m_grid.SetSH_Width(0); m_grid.RedrawAll(); m_sql2.GetWindowText(db); m_control2.GetWindowText(sql); if (db == "") MessageBox("Invalid connect string"); else if (sql == "") MessageBox("Invalid SQL string"); else { AfxGetApp()->BeginWaitCursor(); ret = m_grid.m_odbc.OpenSQL(db, sql); AfxGetApp()->EndWaitCursor(); } //用SQL查询的结果设置网格 if (ret == UG_SUCCESS) { m_grid.EnableUpdate(FALSE); m_grid.SetTH_Height(20); m_grid.SetSH_Width(30); m_grid.SetDefDataSource(m_index); m_grid.SetGridUsingDataSource(m_index); m_grid.BestFit(0, m_grid.GetNumberCols() - 1, 0, UG_BESTFIT_TOPHEADINGS); for (int i = 0; i < m_grid.GetNumberCols(); i++) if (m_grid.GetColWidth(i) > 300) { m_grid.SetColWidth(i, 300); } m_grid.SetSH_Width(31); m_grid.GotoRow(0); m_grid.EnableUpdate(TRUE); } }
第10步– 编码OnClose()
添加下列代码行到这个函数。voidCODBC20Dlg::OnClose() { OnOK() ; }
第11步– 编码OnHitBottom()
你必须添加一些代码到本消息函数内。如果忽略了这一步,那么将只有一个记录。因此你必须通知网格不断的增加记录直到所有的记录已经被添加。将下面的代码添加到OnHitBottom函数内。void MyCug::OnHitBottom(longnumrows, long rowspast, long rowsfound) { // used by the datasources if ( rowsfound > 0 ) { SetNumberRows( numrows + rowsfound, FALSE ); } }
注意:请确保SetNumberRows函数的第二个参数值是 'FALSE'。如果你不这样,网格将保持重绘,并会导致一个无限循环。
测试您的全功能ODBC应用程序
请确保你的机器上有ODBC驱动程序功能。编译执行你的新应用程序
当你的应用程序运行后,选择“浏览”按钮这将产生以下的画面。
图 4.36 - Select Data Source对话框
现在,选择所需的数据源。在我的例子中选择了"scott"数据源。
选择OK 。屏幕会出现一个关于这个数据源的小对话框。这将类似于下图。
图 4.37 – ODBC登录对话框
单击OK。应用程序会出现数据库连接字符串。单击Browse 。完成的应用程序见下图。
图 4.38 – Ultimate Grid的ODBC应用程序
本实验用的movie.mdb文件下载
相关文章推荐
- Silverlight教程第八部分:使用WPF创建一个Digg桌面应用
- 使用nRF51822/nRF51422创建一个简单的BLE应用 ---入门实例手册(中文)之一
- Ruby on Rails,一个简单的CMS系统,创建应用骨架并与数据库连接
- spring cloud教程之使用spring boot创建一个应用
- spring cloud教程之使用spring boot创建一个应用
- CoreText 使用教程:以创建一个简单的杂志应用为例
- 如何为你的UWP应用创建一个纯粹的图标按钮
- Chapter 2 创建一个应用
- 创建一个简单的WebPart应用示例
- Android 创建新的Activity,禁止返回到前一个(或pre的pre)Activity (FLAG_ACTIVITY_CLEAR_TASK的应用)
- Creating a Simple CRUD App With Yii2 用 Yii2 创建一个简单的 CRUD (增删改查)应用
- 如何创建一个类似 Instagram 的使用 Web Service 作后台的应用
- [翻译]jQuery Mobile教程-创建一个订餐web应用(上)
- 1:Win8 Metro应用开发的第一次学习1:创建一个 Metro 项目——Win8Y团队手把手教您Win8 Metro应用开发系列
- 使用nRF51822/nRF51422创建一个简单的BLE应用 ---入门实例手册(中文)之五
- 用同一个工程创建两个不同版本的应用
- Android入门-新手如何成功创建一个Android小应用
- (1):创建一个基本的Silverlight应用
- 使用MyEclipse开发Java EE应用:创建一个JavaEE EJB项目(上)
- Enterprise Library深入解析与灵活应用(4):创建一个自定义Exception Handler改变ELAB的异常处理机制