MS访问MySQL连接

时间:2014-05-28 19:11:07

标签: mysql ms-access

我正在构建一个应用程序,使用MS Access作为MySQL DB的前端。该应用程序由许多表单组成,所有表单都将执行许多不同的SQL语句。

我正在使用以下方式建立连接:

    Dim oConn As New ADODB.Connection
Dim Server_Name As String
Dim Database_Name As String
Dim User_ID As String
Dim Password As String

Server_Name = "localhost"   
Database_Name = "test"    
User_ID = "root"    
Password = ""    

oConn.Open "DRIVER={MySQL ODBC 5.3 ANSI Driver}" _
          & ";SERVER=" & Server_Name _
          & ";DATABASE=" & Database_Name _
          & ";UID=" & User_ID _
          & ";PWD=" & Password _
          & ";OPTION=16427"

我的问题是: 每次运行SQL语句时打开和关闭连接是更好,还是在应用程序运行时打开连接,在应用程序关闭时关闭?

- 如果第一种方式更好,我可以创建一个返回连接的全局函数,在当前表单中使用而不必为每个表单和/或SQL语句反复编写相同的代码吗? / p>

- 如果第二种方式更好,我可以全局声明和打开连接,那么它可以从任何形式使用吗?

请记住:

- 申请表中有50多种不同的表格和子表格。

- 应用程序应该能够在多台计算机上同时访问1个数据库。

1 个答案:

答案 0 :(得分:1)

我有同样的问题,没有人回答它。

一般情况下,当您开始使用它并在您完成时将其关闭时,最好保持连接处于打开状态,但不是在此之前。如果你在每个表单的基础上使用它会很好,但如果它被共享它会变得更复杂。

我最初做的是打开每个表单的连接,子表单从父表单中获取连接,表单在关闭时关闭连接。

如果多个表单使用相同的连接,则问题是如果您关闭该连接,则使用它的其他表单将出错并失败。因此,如果您希望共享表单之间的连接,只需确保它永远不会关闭,除非文件被关闭。我目前正在使用这种方法,因为我有一个基本菜单'在不关闭文件的情况下无法关闭的表单,我关闭该表单的onClose连接。

另外要记住的是,计算机可能会随机与服务器断开连接,因此任何需要连接的代码都应该进行快速测试,以便在某种情况下意外关闭时重新打开连接。

编辑: 在它自己的模块中。

Public DB_CONNECTION As ADODB.Connection

Function openConnect(ByRef myconn As ADODB.Connection) As Integer
Static retries As Integer
Dim server As String
server = "localhost"

On Error GoTo connectError
myconn.ConnectionTimeout = 10
myconn.Open "DRIVER={MySQL ODBC 5.1 Driver};SERVER=" & server & "DATABASE=data;USER=" & getSQLuser & ";PASSWORD=password;Option=3"
openConnect = 1
retries = 0
Exit Function
connectError:
'retry several times on failure
Dim errADO As ADODB.Error
For Each errADO In myconn.Errors
  Debug.Print vbTab & "Error Number: " & errADO.Number
  Debug.Print vbTab & "Error Description: " & errADO.Description
  Debug.Print vbTab & "Jet Error Number: " & errADO.SQLState
  Debug.Print vbTab & "Native Error Number: " & errADO.NativeError
  Debug.Print vbTab & "Source: " & errADO.Source
  Debug.Print vbTab & "Help Context: " & errADO.HelpContext
  Debug.Print vbTab & "Help File: " & errADO.HelpFile
  If errADO.Number = -2147467259 Then
        If retries < 3 Then
            If MsgBox("Connection Error, Try to reconnect or close any connection-enabled forms,check your internet connection and try again.", vbCritical + vbRetryCancel, "Connection Error") = vbRetry Then
                retries = retries + 1

                Call openConnect(myconn)
                Exit Function
            End If
        Else
            MsgBox "Connection error. Retried 3 times, check your internet connection and/or contact your system administrator.", vbCritical + vbOKOnly, "Critical Connection Error"
            retries = 0
            Exit Function
        End If
  End If
Next
Select Case err
Case 0
Case Else
    MsgBox "Error Code " & err & ", " & Error(err), vbCritical, "Error #" & err
End Select
    openConnect = -1
End Function

Function closeConnect()
If Not (DB_CONNECTION Is Nothing) Then
    If DB_CONNECTION.State = adStateOpen Then
        DB_CONNECTION.Close
    End If
End If
End Function

Function tryConnect()
Dim err
If DB_CONNECTION Is Nothing Then
    Set DB_CONNECTION = New ADODB.Connection
    Call openConnect(DB_CONNECTION)
Else
    If Not (DB_CONNECTION.State = adStateOpen) Then
        Call openConnect(DB_CONNECTION)
    End If
End If
End Function

在我的情况下,我从不直接调用openConnect,但总是调用任何使用数据库的表单的tryConnect onOpen,或者在一段时间后调用之前调用(例如,保存按钮)。如果它已经打开,不会造成任何伤害,但如果不是,则可以防止错误。

closeConnect我调用菜单表单的OnError和OnClose。