gpt4 book ai didi

mysql - MS Access 到 MySQL 的连接

转载 作者:行者123 更新时间:2023-11-29 12:56:56 28 4
gpt4 key购买 nike

我正在构建一个应用程序,使用 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 语句一遍又一遍地编写相同的代码吗?

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

请记住:

-应用程序中有 50 多种不同的表单和子表单。

-应用程序应该能够在多台计算机上同时运行并 Access 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,但总是在使用数据库的任何表单的 onOpen 上调用 tryConnect,或者在一段时间后可能发生的调用之前(例如,保存按钮)调用 tryConnect。如果它已经打开,则不会造成任何损害,但如果它没有打开,则可以防止错误。

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

关于mysql - MS Access 到 MySQL 的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23919976/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com