第一课:如何调用题库自动生成试题界面,并实现滚动控制 第二课:交互初步,做一个联连(用到了VB的自定义类)。不会VB没有关系,从这里开始学吧,任何一本教材也不会有我罗嗦的了-- 第三课:快捷框排序,让学员更方便地知道哪些题尚未做。 环境:PPT2003、ACCESS2000。
'调用ACCESS数据库,设置多选项简单方法:
'第一步:使用ACCESS建立试题库function_chr.mdb,内含表chr内建立rubric字段(试题标题),option1....option4(预设4个选择项字段)。 '提示:使用ACCESS版本必须低于ADO类的版本,即能被ADO识别
'第二步:设置ppt启用宏 '打开ppt,设置工具/宏/安全性为中或低,然后关闭后重新启动PPT。
'第三步:在幻灯片内添加必须控件。 '在当前幻灯片,打开VB工具栏(使用自定义工具栏添加) '新建一个label或textbox控件,用于放置试题题目; '新建4个checkbox控件,用于放置试题选项 '新建1个commandbutton控件,用于启动VBA命令,调用ACCESS库
'第四步:导入ADO类 '使用菜单工具/引入命令,引入Microsoft ActiveX Data objects 2.5 library类
'第五步:在声明内声明connection、recordset对象实例,并赋给相应变量 '本例为本地调用,采用早期绑定,仅使用ADO两个最重要的对象connection和Recordset对象 'connection对象,负责从客户端到数据库服务器的连接,即指定要用到的数据库 'recordset对象:表示查询结果集,查询结果返回给该对象。 '注意若要在类模块内声明还得指明APP,这里不讲,读者先自己探索吧 'Public dbconnect As ADODB.Connection 'Public rs As ADODB.Connection 'Set dbconnect = New ADODB.Recordset 'Set rs = New ADODB.Recordset
Public dbconnect As New ADODB.Connection Public rs As New ADODB.Recordset
Private Sub CommandButton1_Click()
'若连接对象已经建立,关闭它 If dbconnect.State = adStateOpen And Not IsEmpty(adStateOpen) Then dbconnect.Close '指定用于连接的提供者的名称,我理解为数据源的设备驱动程序 dbconnect.Provider = "microsoft.jet.oledb.4.0" 'access 97 ois 3.51 '通过传递详细的字符串来指定数据源,这里取用了相对路径调用 dbconnect.ConnectionString = "data\function_chr.mdb" '建立连接 dbconnect.Open
'若记录集已经打开关闭它 If rs.State = adStateOpen And Not IsEmpty(adStateOpen) Then rs.Close '按用户要求打开记录集,open的具体用法请查阅帮助 rs.Open "chr", dbconnect, adOpenDynamic, adLockOptimistic 'chr是表名,包含中function_chr.mdb里,结果为全部字段的记录集 'rs.Open "select rubric from chr", dbconnect, adOpenDynamic, adLockOptimistic '查询结果为仅含字段Rubric的记录集
'使用当前记录给幻灯片内的控件属性赋值,记录的移动等大家自己研究吧 Me.TextBox1.Text = rs!rubric 'me指的是当前幻灯片,并非VB工程窗口,可以省略 Me.CheckBox1.Caption = rs!option1 Me.CheckBox2.Caption = rs!option2 Me.CheckBox2.Caption = rs!option3 Me.CheckBox2.Caption = rs!option4
'调用完毕后,记得关闭、撤销对象,释放内存资源 rs.Close '该方法仅关闭之,对象并未撤销,可再次调用 Set rs = Nothing '撤销对象 Set dbconnect = Nothing
'至于如何实现另建一个用户窗体修改试题或是在PPT实现试题库修改,以及把结果保存入ACCESS库,大家来续接吧,这里不再多讲的。
End Sub '原理:后期绑定外部ACCESS数据库;使用两重循环语句(FOR...Next)自动生成试题控件,并利用数据库信息设置控件属性;使用框架的滑块,使试题能滚动,实现单个界面的大题库显现。 '环境:PPT2003,ACCESS库为97库(2002等可转换后使用)。 '使用控件:框架(Frame)、命令按钮(command) '自动生成控件:标签(Lable),其标题(caption)设为试题的题目;选项按钮(CheckBox)为选择项(预设为4个), '效果:界面生成时自动在框架内生成试题控件,并可利用框架滑块实现试题的全部显示,点击命令按钮退出界面。
初学者须知: 1、按ALT+F11,进入PPT的VB工程设计界面。 2、控件可以通过工具箱添加(可通过点击菜单“视图”/“工具箱”,显示“工具箱”)。 3、工具箱没有的控件可以通过在工具箱上点鼠标右键,在弹出的快捷菜单内选择“添加部件”查找。 4、“视图”菜单非常重要,要先熟悉一下。“属性窗口”、“工程资源管理器”等都可以通过它显示出来。 5、“插入”菜单也应先熟悉一下,插入类模块、用户窗口等都要用到它。 6、上传所有代码可直接拷贝使用。
前期准备: 建立试题的ACCESS数据库,文件名称为function_chr.mdb,内含表Chr,字段至少有4个,字段名随意取,数值类型设为文本。第一个字段(Field(0))为试题的题目,后三个为选择项,每条记录代表一道试题。
言归正传,我们开始吧。 1、插入一个类模块(是类模块不是一般的模块),插入一个用户窗体(名称改为TestFrm)。点击用户窗体使用“视图”菜单调出“工具箱”、“用户资源管理器”。 2、在类模块的声明里声明连接数据库的两个关键对象变量: Public conn1 As ADODB.Connection Public setpxp As ADODB.Recordset 3、在用户窗体内添加一个框架控件和一个命令按钮,调整到合适大小;设置框架属性caption="":ScrollBars=2(即使用垂直滑块);名称在这里都采用缺省值。 4、设置命令按扭的Click方法(直接在它上面双击就出来了): Unload TestFrm'释放表单 5、双击用户表单(TestFrm),在通用声明区域内添加下列代码:
Option Explicit'变量必须先声明才能使用,避免变量的类型出现不可预测的错误,便于修改程序
'*---------------------------------------------------------------------* '*在VBA内使用一个Frame控件代替VB内的两个Picture控件实现试题的滚动显现 '*---------------------------------------------------------------------* '*---------------------------------------------------------------------* '*生成数据库连接及记录集实例对象 '*---------------------------------------------------------------------* Private dbconnect As New ADODB.Connection Private rs As New ADODB.Recordset
'*---------------------------------------------------------------------* '*定义自动添加的控件变量,以两重循环语句分别设计试题的题目的选项 '*---------------------------------------------------------------------* '使用 WithEvents 关键字声明对象变量,允许您编程该控件的事件。 '对象变量被设置为由 Add 方法返回的引用。 'Dim WithEvents labObject As Label '这是VB的用法,在VBA里行不通 'Dim WithEvents chkObject As CheckBox Dim Labobject As Control '设置试题控件为控件对象变量 Dim ChkObject As Control
Private i, j As Integer '内外循环计数器 '*---------------------------------------------------------------------* '*确定自动添加的控件的相关参数 '*---------------------------------------------------------------------* Const WidthRubric = 320 '题目长度,即Label控件对象的长度 Const WidthOptn = 310 '放置选项的checkbox控件的最大长度 Const VDistance = 4 '纵向间距 Const HDistance = 5 '横向间距 Const LeftDistance = 5 '左边间距 Const LeftAppend = 20 '左悬挂距离 Const topini = 40 '第一行的顶部位置 Const nOpn = "4" '选项数目
Private WidthOptnExt As Integer '选项显示的实际长度 Private nLstChkTop As Integer '当前Checkbox的Top,计算下一控件的Top
6、在用户表单(TestFrm)的UserForm_Initialize的事件内添加下列代码。添加成功后,我们今天的目的就实现了。表单加载到内在里时先加载Load事件,Initialize事件在其后来初始表单及其上的所有控件。 |