到今天为止,终于敲完红皮书中的第5个例子。这个例子敲的最长,特对此例子进行一下总结。实例5是“数据查询”。数据查询是一般的数据库管理系统的基本功能之一,用于从数据检索符合条件的数据。
先来上张图:
一、原理分析
本例使用ADO Command对象创建参数查询,并用MSFlexGrid显示查询结果。因为Command对象查询返回的是行值非记录集。行值不支持标签,因此不能将其作为数据绑定的数据源。显示查询结果常用MSFlexGrid控件,通过代码将数据填充至控件中进行显示。
二、技术要领
1. Command
1) 创建对象
创建Command对象使用?作为Select语句中的查询参数举例:
CommandText = "SELECT * FROM 系统用户 WHERE 用户名 LIKE ? AND 身份 LIKE ?"2) 创建参数
使用Command对象CreateParameter方法创建参数对象,将其添加到Command对象的Parameter集合中举例:
Dim Parm As New Parameter Set Parm = objCmd.CreateParameter("用户名",adVarChar,adParamInput,10) objCmd.Parameters.Append Parm3)设置参数
设置查询对数的值举例:
objCmd("用户名") = "%" & txtUser & "%"
4) 执行查询
执行Command对象的Execute方法完成查询举例:
Set objRs = objCmd.Execute() '执行查询,获得查询结果记录集
2. MSFlexGrid
1) 属性
- Cols——设置或返回控件的列数
- Rows——设置或返回控件的行数
- TextMatrix——设置和返回控件任意单元格的文本内容
举例:把objRs的字段名添加到MSFlexGrid的首行
代码:
For i = 0 To objRs.Fields.Count - 1 MSFlexGrid1.TextMatrix(0,i) = objRs.Fields(i).Name Next
2)方法
- AddItem——用于向控件添加一行数据
格式:object.AddItem(string[,index])说明:String为所要添加数据的字符串Index为新增加行在控件中的位置,第一行为0、第二行1、……,如果省略,默认添加在最后 一行
- Clear——用于清除所有数据
格式:object.Clear
- RemoveItem——用来清除指定的行
格式:object.RemoveItem(index)
三、窗体设计
四、代码过程
具体代码就不写在此了,只列出思路。
1. Form_Load
- 建立数据库连接
- 创建Command对象objCmd
- 为ojbCmd创建参数
2. cmdQuery_Click
3. Form_Unload
五、所遇问题
1.自己马虎产生的问题:
1) 数据源字符串中少写了“Provider=”出现如下错误:
2) 为Command对象objCmd创建参数的代码里,名为“身份”的参数对象写成了和另一个参数对象“用户名”同名了。代码如下:
Dim Parm As New Parameter Set Parm = objCmd.CreateParameter("用户名",10) objCmd.Parameters.Append Parm Set Parm = objCmd.CreateParameter("用户名",10) objCmd.Parameters.Append Parm
结果输入信息,点查询时出现错误,如下图:
大意失荆州,细节决定成败,然也。做为自己的一个警钟,以后多加注意!
2.系统缺陷
1) 输入查询信息,点查询按钮,显示结果从第三行开始,而不是第二行。如图:
解决方法:MSFlexGrid的Rows的属性默认为2,在属性窗口中将属性值改为1即可解决。因此改为n,从n+1行开始显示。(注意:不能改为0,否则点查询时,会产生如下错误提示:)
2) 当继续点查询按键时,新数据会在原先显示的数据之后显示;……。共点击4次的效果图如下:
解决方法:在查询过程中,先设置MSFlexGrid1.Rows = 1。同时上面的那个问题也能解决。(之前,也用过Clear方法,虽然表里的数据会被清除,但表格不会被删除,即在原来空表格的下面继续显示。点击了4次的效果图如下:)
六、心得总结
千言万语,总之一句话:千淘万漉虽辛苦,吹尽狂沙始到金。话可能过,但理是真的。