programing

MariaDB 데이터베이스에서 mediumblob 값 업데이트 실패

oldcodes 2023. 10. 26. 21:39
반응형

MariaDB 데이터베이스에서 mediumblob 값 업데이트 실패

저는 MS Access Frontend로 서버측 MariaDB 데이터베이스를 사용하고 있습니다.nomapp 데이터 테이블의 데이터베이스에 다음 구조로 이진 파일을 업로드하려고 합니다.

IDint(11)
appCode 미디엄블롭

업로드에 사용되는 기능은 다음과 같습니다.

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

제가 업로드 하려고 하는 테스트 파일 크기는 약 73kByte입니다.

연결이 작동했습니다(상태 = 1 ).

스트림 개체가 파일 데이터를 로드했습니다(테스트됨).

레코드 집합을 읽었습니다(테스트됨).

크기가 64kBytes 미만인 파일의 경우 스크립트는 정상적으로 작동하지만 그렇지 않으면 업데이트가 작동하지 않기 때문에 업데이트 전에 이전 값을 삭제해야 합니다.

문제는 디버그 프롬프트가 "에 도달하는 경우입니다."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

"MariaDB ODBC 3.1 드라이버"의 버그(ODBC-251)인 것 같습니다.

대신 "MySQL/ODBC Connector 8.0.19"(또는 최신 버전)를 사용합니다!

대안:

  1. LOAD_ 사용FILE 함수
  2. 데이터를 파일 시스템에 저장하고 DB에 대한 경로만 저장합니다.

언급URL : https://stackoverflow.com/questions/63068681/fail-on-update-a-mediumblob-value-in-mariadb-database

반응형