记得老师和师哥说过红皮书上的五个例子特别的简单,照着敲实现就可以了,我也照着敲了,也实现了,但总觉得五个实例应该有属于它们的核心思想。想想自己敲这几个例子并实现确实没用多长时间,当时也只是觉得实例四比较难,别的实例也没有太多问题.直到小刘叫我讲的时候,才发现自己只知道代码的大概意,不理解代码为什么会这样写,为什么不用别的方法实现…….。也许真的是前面基础没有打好,但那已经是过去式,现在能做的只有踏踏实实的去发现问题,解决问题. 那先来总结一下前段时间敲的五实例吧!
一、五实例用到的两种数据库连接方式
(1)有源连接
通过采用ADO访问ODBC数据源,完成数据库连接
具体格式:
Cnn1.connectionstring="DSN=mySQLsODBC;UID=sa;PWD=123;"
(2)无源连接
方法一、 ADO对象
具体格式:
a.访问access数据库:
cnn2.ConnectionString ="Provider=Microsoft.jet.OLEDB.3.51;" & _
"DataSource=" & App.Path & "\实例1.mdb"
b.访问SQL Server数据库:
Cnn3.Connectingstring="provider=Microfoft.Jet.OLEDB.4.0;DATASource=D:\数据库\实例1.mdb"
方法二、ADO Data控件
二、实例详解
实例一 “系统登录”对话框
(一)数据库管理系统登录对话框两种基本方法:
方法1:数据库中建立一个表保存系统用户登录信息,完成验证。
方法2:一些支持安全验证的数据库管理系统,可将系统用户定义为数据库用户。
本例采用方法1
(二)技术要领
(1)窗体中只有一个默认按钮和取消按钮
(2)ADO Connection对象
- connectionstring属性:指定数据源的基本信息
- Open方法
- close方法
(3)ADO Recordset对象:用于保存从数据源获得的记录集
- ActiveConnection属性:代表数据源的活动连接
- EOF属性:当前记录位于记录集最后一个纪录之后 True
- BOF属性:当前记录位于第一个记录之前 True
- Fields集合:包含Recordset对象的所有Field对象,可使用Fields获得当前记录各个字段的值。 Objrs.fields("口令").value
- open方法:打开记录集,其参数为执行查询SQL命令字符串。
(4)自定义函数过程
Function……
函数=返回值
End Function
如果没有对函数过程指定返回值,则过程返回一个默认值:数值函数返回0,字符串函数返回一个零长度字符串(""),Variant函数则返回Empty
(三)核心代码
Private Function Check_PassWord(ByVal UserName As String, ByVal Password As String) As Byte
On Error GoTo gperror '错误处理,直接执行gperror下面的语句
Dim objCn As New Connection, objRs As New Recordset, strCn As String
Dim strSQL As String
'建立数据库连接
objCn.ConnectionString = "Provider=Microsoft.jet.OLEDB.3.51;" & _
"Data Source=" & App.Path & "\实例1.mdb"
objCn.Open
'执行查询命令,获得用户登录口令
strSQL = "SELECT 口令 FROM 系统用户 WHERE 用户名='" & UserName & "'"
Set objRs.ActiveConnection = objCn
objRs.Open (strSQL)
'判断有无查询结果
If objRs.EOF Then
Check_PassWord = 0 '没有查询结果,表示该用户为非法用户
Else
'检查口令是否正确
If Password <> Trim(objRs.Fields("口令").Value) Then
Check_PassWord = 1 '口令不正确
Else
Check_PassWord = 2 '口令正确
End If
End If
'关闭数据库连接,释放对象
objCn.Close
Set objRs = Nothing
Set objCn = Nothing
Exit Function
gperror:
MsgBox "122"
Check_PassWord = 4 '验证无法正常完成,返回错误代码
Set objRs = Nothing
Set objCn = Nothing
End Function
实例二 使用ADO 访问数据源
(一)技术要领
(1)recordset的记录锁类型
- Adlockresdonly 默认值
- Adlockpessimistic:保守式
- Adlockoptimistic:开放式
- Adlockbatchoptimistic:开放式更新
(2)临时表位置
cursorlocation属性可设置为aduseclient和aduseserver
(3)浏览recordset中的记录
movefirst、movenext、moveprevious、movelast
(4)ODBC数据源类型
用户DSN:当前用户使用
系统DSN:权限用户使用
文件DSN:相同驱动程序的用户共享
(5)创建ODBC数据源
(二)核心代码
Private Sub Form_Load()
Set objCn = New Connection '实例化connection对象
objCn.Open "DSN=小青实例2DSN" '建立数据库连接
'objCn.ConnectionString = "Provider=Microsoft.Jet.oledb.4.0;" & "Data Source=" & "F:\Visual Basic\vb数据库开发经典实例精解\实例2\实例2.mdb"
'objCn.Open
Set objRS = New Recordset '创建客户端的记录集
With objRS
.CursorLocation = adUseClient '指定临时表位置
.CursorType = adOpenStatic '指定使用键集游标
.LockType = adLockOptimistic '指定锁定类型
.Open "SELECT*FROM 系统用户", objCn
End With
'显示第一个记录数据
txtUserName = objRS.Fields("用户名").Value
txtPassword = objRS.Fields("口令").Value
txtMsg = objRS.AbsolutePosition & "/" & objRS.RecordCount
Private Sub txtPassword_Change()
isNeedSave = True '在修改当前记录字段时,设置保存标识
End Sub
Private Sub txtUserName_Change()
isNeedSave = True '在修改当前记录字段时,设置保存标识
End Sub
实例三 使用数据绑定访问数据
(一)技术要领
-
控件基本结构
-
属性设置
-
数据绑定控件
-
数据环境设计器
(二)核心代码
Private Sub Adodc1_WillMove(ByVal adReason As ADODB.EventReasonEnum, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
'使ADO Data控件显示当前记录标号和总记录数
Adodc1.Caption = "当前记录:" & Adodc1.Recordset.AbsolutePosition _
& "/" & Adodc1.Recordset.RecordCount
End Sub
注意事项:
1、在使用“属性页”对话框设置其属性时,应该先设置通用属性,其次设置身份信息,然后设置记录源选项。如前两项不正确,将无法获得数据库的记录源信息。
2、设置文本框数据绑定属性时,先设置DataSourse属性,再设置datamember属性,最后设置DataField属性。
实例四 分页显示记录
(一)技术要领
(1)记录集的Pagesize属性,默认值为10
(2)绑定到控件的方法
方法一、把当前记录复制到新的记录集上,再将其绑定到DataGrid控件
方法二、MSFLexGrid可在设计时绑定到DataGrid控件
(3)记录集分页特性:pagesize、pagecount、absolutepage
(4)DataGrid控件为外部Active控件,需添加
(5)MSFLexGrid控件:cols、rows、TextMatrix属性,也需添加(二)核心代码
Public Sub showdata(ByVal intpage As Integer)
'实现分页显示记录的功能
Dim intPagecount As Integer, intRecord As Integer
Dim objdatasource As New ADODB.Recordset
'创建一个局部recordset对象保存在objrs当前记录页数据
For intRecord = 0 To objrs.Fields.Count - 1
objdatasource.Fields.Append objrs.Fields(intRecord).Name, adVarChar, _
objrs.Fields(intRecord).DefinedSize
Next
objdatasource.Open '打开局部recordset对象
objrs.PageSize = Val(txtpagesize) '重新设置objrs每页显示的记录条数
objrs.AbsolutePage = intpage '重新设置objrs的当前记录页
For intRecord = 1 To objrs.PageSize '将当前记录页中数据写入objdatasource
objdatasource.AddNew
objdatasource!用户名 = objrs!用户名 '=objrs.fields(用户名)
objdatasource!口令 = objrs!口令
' objdatasource!身份 = objrs!身份
objrs.MoveNext
If objrs.EOF Then Exit For
Next
Set DataGrid1.DataSource = objdatasource '设置为数据网络的数据源
txtpagemsg = intpage & "/" & objrs.PageCount '刷新当前记录信息
End Sub
实例五 数据查询
(一)技术要领
(1)数据查询3方法
- select语句——command对象和recordset对象执行查询
- command创建参数查询(本实例)
- select——recordset(find方法)
(2)MFLexGrid控件中数据的添加和清除
- Object.additem(string,index)
- MSFLexGrid1.clear
- MSFLexGrid1.removeitem(2)
(3)使用Command对象创建参数查询(必须按照下面的顺序)
- 创建command对象
- 使用command对象
- 设置查询参数的值(执行execute前必须设置,否
(二)核心代码
Private Sub cmdquery_Click()
Dim objrs As New Recordset '定义局部记录集对象
objcmd("用户名") = "%" & txtuser & "%" '获得查询参数
objcmd("身份") = "%" & txtstatus & "%"
Set objrs = objcmd.Execute() '执行查询过,获得查询结果记录集
MSFlexGrid1.Cols = objrs.Fields.Count
'显示列名
Dim i As Integer, n As Integer
For i = 0 To objrs.Fields.Count - 1
MSFlexGrid1.TextMatrix(0, 1) = objrs.Fields(i).Name
Next
'显示查询结果
n = 0
While Not objrs.EOF
MSFlexGrid1.AddItem (objrs!用户名 & vbTab & objrs!口令 & vbTab & objrs!身份)
n = n + 1
objrs.MoveNext
'显示获得的记录条数
Label4 = "共获得" & n & "条查询结果"
Wend
End Sub
虽然把五实例好好总结了,但其中还有一些内容没有消化。师哥也强调现在不理解很正常,做完两个系统你就有不一样的认识了。现在我的学生信息管理系统已做完,正在总结中,期待我的新认识与提高……