使用数据库做PPT交互式试题基础第一课:如何调用题库自动生成试题界面,并实现滚动控制第二课:交互初步,做一个联连(用到了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类'使用菜单工具/引入命令,引入MicrosoftActiveXDataobjects2.5library类'第五步:在声明内声明connection、recordset对象实例,并赋给相应变量'本例为本地调用,采用早期绑定,仅使用ADO两个最重要的对象connection和Recordset对象'connection对象,负责从客户端到数据库服务器的连接,即指定要用到的数据库'recordset对象:表示查询结果集,查询结果返回给该对象。'注意若要在类模块内声明还得指明APP,这里不讲,读者先自己探索吧'PublicdbconnectAsADODB.Connection'PublicrsAsADODB.Connection'Setdbconnect=NewADODB.Recordset'Setrs=NewADODB.RecordsetPublicdbconnectAsNewADODB.ConnectionPublicrsAsNewADODB.RecordsetPrivateSubCommandButton1_Click()'若连接对象已经建立,关闭它Ifdbconnect.State=adStateOpenAndNotIsEmpty(adStateOpen)Thendbconnect.Close'指定用于连接的提供者的名称,我理解为数据源的设备驱动程序dbconnect.Provider=microsoft.jet.oledb.4.0'access97ois3.51'通过传递详细的字符串来指定数据源,这里取用了相对路径调用dbconnect.ConnectionString=data\function_chr.mdb'建立连接dbconnect.Open'若记录集已经打开关闭它Ifrs.State=adStateOpenAndNotIsEmpty(adStateOpen)Thenrs.Close'按用户要求打开记录集,open的具体用法请查阅帮助rs.Openchr,dbconnect,adOpenDynamic,adLockOptimistic'chr是表名,包含中function_chr.mdb里,结果为全部字段的记录集'rs.Openselectrubricfromchr,dbconnect,adOpenDynamic,adLockOptimistic'查询结果为仅含字段Rubric的记录集'使用当前记录给幻灯片内的控件属性赋值,记录的移动等大家自己研究吧Me.TextBox1.Text=rs!rubric'me指的是当前幻灯片,并非VB工程窗口,可以省略Me.CheckBox1.Caption=rs!option1Me.CheckBox2.Caption=rs!option2Me.CheckBox2.Caption=rs!option3Me.CheckBox2.Caption=rs!option4'调用完毕后,记得关闭、撤销对象,释放内存资源rs.Close'该方法仅关闭之,对象并未撤销,可再次调用Setrs=Nothing'撤销对象Setdbconnect=Nothing'至于如何实现另建一个用户窗体修改试题或是在PPT实现试题库修改,以及把结果保存入ACCESS库,大家来续接吧,这里不再多讲的。EndSub'原理:后期绑定外部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、在类模块的声明里声明连接数据库的两个关键对象变量:Publicconn1AsADODB.ConnectionPublicsetpxpAsADODB.Recordset3、在用户窗体内添加一个框架控件和一个命令按钮,调整到合适大小;设置框架属性caption=:ScrollBars=2(即使用垂直滑块);名称在这里都采用缺省值。4、设置命令按扭的Click方法(直接在它上面双击就出来了):UnloadTestFrm'释放表单5、双击用户表单(TestFrm),在通用声明区域内添加下列代码:OptionExplicit'变量必须先声明才能使用,避免变量的类型出现不可预测的错误,便于修改程序'*---------------------------------------------------------------------*'*在VBA内使用一个Frame控件代替VB内的两个Picture控件实现试题的滚动显现'*---------------------------------------------------------------------*'*---------------------------------------------------------------------*'*生成数据库连接及记录集实例对象'*---------------------------------------------------------------------*PrivatedbconnectAsNewADODB.ConnectionPrivatersAsNewADODB.Recordset'*---------------------------------------------------------------------*'*定义自动添加的控件变量,以两重循环语句分别设计试题的题目的选项'*---------------------------------------------------------------------*'使用WithEvents关键字声明对象变量,允许您编程该控件的事件。'对象变量被设置为由Add方法返回的引用。'DimWithEventslabObjectAsLabel'这是VB的用法,在VBA里行不通'DimWithEventschkObjectAsCheckBoxDimLabobjectAsControl'设置试题控件为控件对象变量DimChkObjectAsControlPrivatei,jAsInteger'内外循环计数器'*---------------------------------------------------------------------*'*确定自动添加的控件的相关参数'*---------------------------------------------------------------------*ConstWidthRubric=320'题目长度,即Label控件对象的长度ConstWidthOptn=310'放置选项的checkbox控件的最大长度ConstVDistance=4'纵向间距ConstHDistance=5'横向间距ConstLeftDistance=5'左边间距ConstLeftAppend=20'左悬挂距离Consttopini=40'第一行的顶部位置ConstnOpn=4'选项数目PrivateWidthOptnExtAsInteger'选项显示的实际长度PrivatenLstChkTopAsInteger'当前Checkbox的Top,计算下一控件的Top6、在用户表单(TestFrm)的UserForm_Initialize的事件内添加下列代码。添加成功后,我们今天的目的就实现了。表单加载到内在里时先加载Load事件,Initialize事件在其后来初始表单及其上的所有控件。第二课做出来真不易,涉及到自定义类,本人在VB里很少用到所以做的时间长了,计划二周内搞定,谁知又被派出去了几日-----------请大家见谅.如果你能把这一课搞清楚,并且能够独立地进行一翻整理、优化,后面的课,你就完全可以不看了,举一反三就可以了。目前,本课内容各大小网站均未见登,连日来跑了北京、西安、郑州几大书城查找这方面的资料,均未果。但终归,功夫不负有心人,我还是把它突破了。鉴于本站的热情及本人的事先承诺,我将此首发于此并上传网站仅发于此。如有引用,请原文引用。'以下是窗体内的代码:OptionExplicit'********************************************'*第一步:声明窗体TestFrm,类模块TestChk,框架Frame1,Treeview、ImageList控件'********************************************'*--------------------------------------------------------------------------------*'*1、数据源声明'*在VBA内使用一个Frame控件代替VB内的两个Picture控件实现试题的滚动显现'*引入:'*类库:MicrosoftwindowsCommonControls6.0(sp6)'*位置(Windows标准库):system32\Mscomctl.ocx'*类库:MicrosoftActiveXDataObjects2.0Library'*位置:programfiles\commonfiles\system\ado\msado20.tlb'*-------------------------