ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 9884|回复: 8

[转帖]使用数据库做PPT交互式试题基础

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-6-28 08:58 | 显示全部楼层 |阅读模式

第一课:如何调用题库自动生成试题界面,并实现滚动控制

第二课:交互初步,做一个联连(用到了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事件在其后来初始表单及其上的所有控件。

TA的精华主题

TA的得分主题

发表于 2006-10-29 22:19 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-10-30 08:34 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-11-1 01:17 | 显示全部楼层
转贴也有精华?而且没有附件,很多人看了也不会马上懂的。

TA的精华主题

TA的得分主题

发表于 2006-11-1 01:19 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-11-1 06:44 | 显示全部楼层

这个帖子是转自PPT学习网的,楼主只是转了第一课的内容,原来一共有三课的,里面的实例等我整理好了发到PPT学习网上,大家到时可以去下载学习一下。这篇文章是中原油田的周生军原创的。

原文章地址:http://www.pptxx.com/Article/jh/200606/209.html

TA的精华主题

TA的得分主题

发表于 2006-11-4 12:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

第一课内容实例已经找到,现在提供下载:http://www.pptxx.com/Soft/sl/yx/200611/159.html

TA的精华主题

TA的得分主题

发表于 2012-11-20 16:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢了,不错哦
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-24 00:21 , Processed in 0.045210 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表