65.9K
CodeProject 正在变化。 阅读更多。
Home

数据库类 ADODB 命令记录集 VB6 ADO 文件处理 OPEN

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.50/5 (9投票s)

2007年11月8日

CPOL

5分钟阅读

viewsIcon

176688

downloadIcon

3089

这是一个数据库对象,我们通过它连接 SQL Server 并进行操作。

引言

这基本上是一个数据库类。在此项目中,我们连接到 SQL Server 2000。我们执行 insertupdatedeleteselect 查询。并且无需使用任何数据控件即可填充网格。在此项目中,我还使用了文件处理。

Using the Code

首先,声明类的 private 成员。类的三个成员如下所示:

Private conConnection As New ADODB.connection
Private cmdCommand As New ADODB.Command
Public rstRecordSet As New ADODB.Recordset
  1. ADODB.connection

    首先,初始化 adodb 连接。此对象用于连接数据库。

  2. ADODB.Command

    其次,初始化命令。此对象用于执行数据库查询。

  3. ADODB.Recordset

    第三,初始化 Recordset。此对象用于多种目的。稍后我会解释。

Public Sub connection()
On Error GoTo err1:
    Dim txtserver As String
    Dim txtuser As String
    Dim txtpassword As String
        Dim Filename As String
        Filename = "c:\Label.txt"
        Open (Filename) For Input As #1
        Line Input #1, txtserver
        Line Input #1, txtuser
        Line Input #1, txtpassword
 Close #1
        conConnection.ConnectionString = "Driver={SQL Server};
        Server=" & txtserver & ";Database=Stock_Management;Uid=" & txtuser & ";Pwd=;"
        Exit Sub
err1:
Close #1

       Exit Sub
 
End Sub 

此函数建立与 SQL Server 2000 的连接。这是一个受信任的连接,但也可用于非受信任的连接。它是一个用户友好的连接。因此,在此,我使用文件处理,它只需打开文件并读取 server nameuser namepassword

为此目的,我声明了三个变量:txtservertxtusertxtpassword。首先,open 对象,以读取模式打开文件,而非写入模式。Line Input #1 读取文件的第一行并将其文本放入 txtserver。对接下来的两行执行相同操作。并将值保存在接下来的两个变量 txtusertxtpassword 中,然后 close 对象关闭文件。然后,连接到 SQL Server 并退出函数。

Public Function conopen() As Boolean
On Error GoTo err1:
        If conConnection.State = 0 Then
        connection
                
                conConnection.Open
                conopen = True
        End If
 
err1:
If Error <> "" Then
MsgBox "Connect to fail"
conclose

       Exit Function
       End If
        
End Function

此函数首先检查连接状态。如果连接已打开,则不执行任何操作。否则,如果连接已关闭,则打开 connection 并返回 true。
注意:要检查连接状态,我使用 connection.State 函数。如果 stateone,表示连接已打开;如果 statezero,则表示 connection 已关闭。

Public Sub insert_query(query As String)
         
        conopen
         
                With cmdCommand
                    .ActiveConnection = conConnection.ConnectionString
                    .CommandText = query
                    .CommandType = adCmdText
                    .Execute (query)
                End With
                
End Sub

此函数接受一个查询。Conopen 是我已解释过其工作原理的函数。接下来,它使用 command 对象进行操作。首先,cmdCommand 变量激活连接,然后它获取查询。adCmdText 被传递给 cmdCommand.CommandTypeadCmdText 被评估为文本定义。并且 cmdCommand.execute 执行任何查询,如 insertselectdeleteupdate

Public Function rstRecordSetOpen()
        
    Call rstRecordSetclose
    
    If rstRecordSet.State = 0 Then
                
               With rstRecordSet
                        .CursorType = adOpenStatic
                        .CursorLocation = adUseClient
                        .LockType = adLockOptimistic
                        .Open cmdCommand
               End With
     End If

End Function

此函数打开 RecordSet object,我们在此处填充数据。首先,它调用 rstRecordSetclose 函数,该函数关闭 RecordSet 对象。不一定需要关闭 RecordSet。但有时它会引起问题,因此每次填充数据时,我们都必须关闭 RecordSet。如果您想了解更多关于 Recordset 的信息,请访问该网站。

 Function fillcombo(ByRef combo As ComboBox, query As String, field As Integer)
    
     Call conopen
        
            With cmdCommand
                .ActiveConnection = conConnection.ConnectionString
                .CommandText = query
                .CommandType = adCmdText
            End With
            
        Call rstRecordSetOpen
           
    If rstRecordSet.EOF = False Then
        
            rstRecordSet.MoveFirst
            combo.Clear
                    Do
                            combo.AddItem (rstRecordSet.Fields(field))
                            rstRecordSet.MoveNext
                    Loop Until rstRecordSet.EOF = True
    End If
 
End Function

此函数填充组合框。此函数接受三个参数。

  1. 传入组合框的名称
  2. 传入查询
  3. 传入一个指定值,例如,您编写了一个查询,如 "Select user_id, User_name from user_table"。您希望所有姓名都显示在组合框中,那么您传入参数 1,完成后,函数退出。
Function getID(query As String, field As Integer) As Integer
    
     Call conopen
        
            With cmdCommand
                .ActiveConnection = conConnection.ConnectionString
                .CommandText = query
                .CommandType = adCmdText
            End With
            
        Call rstRecordSetOpen
        
    If rstRecordSet.EOF = False Then
            rstRecordSet.MoveFirst
            Dim a As Integer
            a = field
                    Do
                            a = rstRecordSet.Fields(field)
                            rstRecordSet.MoveNext
                            
                    Loop Until rstRecordSet.EOF = True
    End If
    
    getID = a

End Function

如果您想获取任何查询的 Id,则调用此函数

Public Function rstRecordSetclose()

    Set rstRecordSet = Nothing

End Function  

要关闭 recordset,我们调用此函数

Public Function conclose()

        Set conConnection = Nothing
        Set cmdCommand = Nothing
        
End Function

此函数关闭命令以及连接。

以下是使用此对象的一些屏幕截图。

Screenshot - Logon.jpg

在此,我们创建一个对象并建立连接。我在此处展示了对象如何工作的代码。

Private Sub cmdOK_Click()
    
        Dim a As String
        Dim database As New clsDatabase
        
        check
        
    If LoginSucceeded = False Then
          
          Exit Sub
          
        Else
              If database.conopen = True Then
              a = "SELECT * from tbl_user where (
                  user_name = '" & txtUserName.Text & "') and (
                  user_password = '" & txtPassword.Text & "')"
     
      
            If database.getID(a, 0) <> 0 Then
                     LoginSucceeded = True
                   MsgBox "logon sucess full"
                   End
                   
                Else
                     MsgBox "Invalid Password, try again!", , "Login"
                     txtPassword.SetFocus
                     SendKeys "{Home}+{End}"
            End If
            Else
            Unload Me
            Set database = Nothing
            frmDatabase.Show
            
            Exit Sub
            End If
            
    End If
       
End Sub 

这是 cmdOK 按钮的操作。当单击它时,它会创建一个名为 DataBase 的新对象。首先,我们调用 conOpen 函数。如果 connection 已打开,那么我们就执行查询以获取特定行。为此,我们调用 getID 函数。此函数的工作原理是:首先执行查询,然后返回特定行的 ID。并提示成功登录的消息。这是它的屏幕截图。

Screenshot - Logon_success.jpg

如果 conConnection 返回 false,则有两种可能:用户名或密码无效,或者连接未建立。并提示连接失败的消息。如下所示。

Screenshot - Logon_fail.jpg

如果 database 对象未能连接到 SQL Server 2000。则提示连接失败的消息。当您单击确定时,屏幕上会显示一个窗口。其中包含三个文本框,第一个文本框的标签是 server name,它会自动检测您的 SQL Server 2000 的服务器名称,如下所示。

Screenshot - Connect_data_base.jpg

然后,您输入用户名和密码(如果需要),否则留空并单击 Test 按钮。

Private Sub btntest_Click()
checkfile
data
If database.conopen = True Then
MsgBox "Connect to successfuly"
Unload Me
frmLogin.Show
Else
MsgBox "Connection fail"
End If
End Sub 

当您单击 Test 按钮时。首先,它会转到 checkfile 函数。

Function checkfile()
Dim fName As String
fName = "c:\Label.txt"
Dim oFSO As New FileSystemObject
    
  On Error GoTo ErrorHandler
 oFSO.DeleteFile (fName)
   

ErrorHandler:
On Error Resume Next
Set oFSO = Nothing

End Function

checkfile 函数中,首先声明一个名为 fName 的变量。fName 获取文件的路径。然后,我们声明一个名为 oSFOFileSystemObject 对象。它只做一件事:删除文件。然后,它返回到 btnTest 的单击事件。然后,btntest 的单击事件调用另一个函数 Data。我们来看一下 Data 函数的工作原理。

Function data()
On Error GoTo err1

 Open "c:\Label.txt" For Append As #1
    Print #1, Me.txtservername
    Print #1, Me.txtusername
    Print #1, Me.txtpassword
      Close #1

If Error <> "" Then
err1:
Close #1
data
Exit Function
End If
End Function 

注意Open 的详细说明

OPEN 的主要功能是将文件号 (filenum&) 与文件或物理设备关联起来,并为该设备准备读取和/或写入。然后,在每个引用文件的语句中,都使用此文件号而不是文件名。FREEFILE 函数可用于确定下一个可用文件号,或者您可以自己选择一个。OPEN 语句包含有关文件模式的信息;即文件将如何被访问:顺序访问(用于新文件的输入/输出,或现有文件的输出)、随机访问和二进制访问。OPEN 语句通常会有一个匹配的 CLOSE 语句。

Open 函数会打开文件。如果文件不存在,则创建新文件。上面,我们声明了三个变量来存储服务器名称、用户名和密码。print 函数将这些值写入文件,Close 函数关闭文件。

这是 clsDataBase 对象的一些概述。

重要提示:如果您运行此代码,请先将我提供的数据库附加到您的 SQL Server 中。

如果您对此主题有任何问题,请在下面的评论部分留言。

© . All rights reserved.