【发布时间】:2020-07-24 07:18:29
【问题描述】:
我正在使用带有 MS Access 前端的服务器端的 MariaDB 数据库。我尝试使用以下结构在我的数据库中的 nomappdata 表中上传一个二进制文件:
ID int(11)
appCode 中blob
用于上传的函数是:
Function saveFileToDB(ID As Long, fName As String)
Dim myConn As New ADODB.connection
Dim rsADO As New ADODB.Recordset
Dim st As New ADODB.Stream
On Error Resume Next
strSQL = "SELECT nomappdata.* FROM nomappdata WHERE ID = " & ID
With myConn
.ConnectionString = getConnStrMySQL("N")
.Open
End With
If myConn.Errors.Count = 0 Then
With rsADO
.CursorType = adOpenStatic
.LockType = adLockOptimistic
.ActiveConnection = myConn
.Open strSQL
End With
With st
.Type = adTypeBinary
.Open
.LoadFromFile fName
End With
With rsADO
.Fields("appCode").Value = st.Read
.Update
End With
End If
st.Close
Set st = Nothing
rsADO.Close
Set rsADO = Nothing
myConn.Close
Set myConn = Nothing
End Function
我尝试上传的测试文件大小约为 73 kByte。
连接有效(状态 = 1)
流对象加载文件数据(已测试)
记录集被读取(测试)
该脚本适用于大小小于 64 kBytes 的文件,但我需要在更新之前删除以前的值,因为如果没有,则更新不起作用。
我的问题是当调试提示到达“.Update”行时,访问等待一段时间然后意外崩溃。 我该如何解决这个问题?
我正在使用以下软件:
Microsoft Access for Microsoft 365 MSO (16.0.13001.20338) 64 位 MariaDB 10.1.40-MariaDB mariadb-connector-odbc-3.1.9-win64
# The MySQL server
[mysqld]
port= 3306
socket = "D:/xampp/mysql/mysql.sock"
basedir = "D:/xampp/mysql"
tmpdir = "D:/xampp/tmp"
datadir = "D:/xampp/mysql/data"
pid_file = "mysql.pid"
# enable-named-pipe
key_buffer = 16M
max_allowed_packet = 16M
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
log_error = "mysql_error.log"
修改(工作)代码:
Dim fileData() As Byte
With st
.Type = adTypeBinary
.Open
.LoadFromFile fName
End With
With rsADO
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockOptimistic
.ActiveConnection = myConn
.Open strSQL
.Fields("appCode").Value = st.Read
.Update
.Close
End With
【问题讨论】:
-
崩溃是否意味着存在服务器和/或应用程序错误?哪个)?在更新较大的文件/blob 时,增加 mariadb 服务器设置 max_allowed_packet 听起来像是一个预先准备好的事情。
-
MS Access 应用程序崩溃。我把这个改成16777216(16M)但是情况还是一样。
-
On Error Resmue Next 在函数之上是邪恶的(只隐藏错误,应该解决)并避免 Auto-assigned objects(Dim obj as New Object)
标签: mysql ms-access mariadb ado