数据库连接之经典五实例小结

        记得老师和师哥说过红皮书上的五个例子特别的简单,照着敲实现就可以了,我也照着敲了,也实现了,但总觉得五个实例应该有属于它们的核心思想。想想自己敲这几个例子并实现确实没用多长时间,当时也只是觉得实例四比较难,别的实例也没有太多问题.直到小刘叫我讲的时候,才发现自己只知道代码的大概意,不理解代码为什么会这样写,为什么不用别的方法实现…….。也许真的是前面基础没有打好,但那已经是过去式,现在能做的只有踏踏实实的去发现问题,解决问题.   那先来总结一下前段时间敲的五实例吧!

 

 一、五实例用到的两种数据库连接方式

(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的记录锁类型

  1. Adlockresdonly   默认值
  2. Adlockpessimistic:保守式
  3. Adlockoptimistic:开放式
  1. Adlockbatchoptimistic:开放式更新

(2)临时表位置

        cursorlocation属性可设置为aduseclientaduseserver

(3)浏览recordset中的记录

        movefirstmovenextmovepreviousmovelast

(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

实例三  使用数据绑定访问数据



(一)技术要领

  1. 控件基本结构
  2. 属性设置
  3. 数据绑定控件
  4. 数据环境设计器

(二)核心代码

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)记录集分页特性:pagesizepagecountabsolutepage

 (4)DataGrid控件为外部Active控件,需添加

(5)MSFLexGrid控件:colsrowsTextMatrix属性,也需添加(二)核心代码

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方法

  1. select语句——command对象和recordset对象执行查询
  2. command创建参数查询(本实例)
  3. select——recordsetfind方法)

(2)MFLexGrid控件中数据的添加和清除

  1. Object.additemstringindex
  2. MSFLexGrid1.clear
  3. MSFLexGrid1.removeitem2

(3)使用Command对象创建参数查询(必须按照下面的顺序)

  1. 创建command对象
  2. 使用command对象
  3. 设置查询参数的值(执行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

         虽然把五实例好好总结了,但其中还有一些内容没有消化。师哥也强调现在不理解很正常,做完两个系统你就有不一样的认识了。现在我的学生信息管理系统已做完,正在总结中,期待我的新认识与提高……

 

 

 

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值