In un applicazione Access interfacciata con MySql sto lavorando sulla gestione di file PDF inseriti in campi BLOB. Premetto che ho posizionato le tabelle deputate in un database separato per evitare problemi di backup e restore con campi BLOB sul database principale. Queste tabelle sono di tipo MyIsam. In ogni caso non è questo il problema. Il problema è che al momento non trovo il modo di ricreare il file PDF originale quando ne ho bisogno. Posso leggerlo attraverso un recordset ADO, poi? Penso di dover usare i file binari sui quali non ho esperienza. Se qualcuno può già indirizzarmi con qualche frammento di codice sarei ben contento.
Riporto il codice di un test non andato a buon fine. La sub WriteBinaryStringToFile l'ho trovata in rete. Nel chiamante ci sono delle routine mie, l'importante è che in strTemp mi ritrovo il mio campo BLOB dove ho salvato il PDF che voglio ricreare.
Il file viene creato ma non è riconosciuto da Adobe.
Sub WriteBlob()
Dim rst As ADODB.Recordset, strTemp As String
strTemp = "SELECT PdfBlob FROM tila_20241108_PDF.tblInvPb_Pdf"
Set rst = rstSqlRead(strTemp)
strTemp = rst!PdfBlob & ""
ObjClose rst
WriteBinaryStringToFile "E:\Scr\Test.Pdf", strTemp
End Sub
Sub WriteBinaryStringToFile(strFile As String, hex_val As String)
Dim handle As Long
handle = FreeFile
Open strFile For Binary As #handle
Seek #handle, LOF(handle) + 1
Put #handle, , hex_val
Close #handle
End Sub
Edit: Seconda versione con l'uso di una variabile Byte e strConv, stesso risultato
Sub WriteBlob()
Dim rst As ADODB.Recordset, strTemp As String, x() As Byte
strTemp = "SELECT PdfBlob FROM tila_20241108_PDF.tblInvPb_Pdf"
Set rst = rstSqlRead(strTemp)
strTemp = rst!PdfBlob & ""
ObjClose rst
x = StrConv(strTemp, vbFromUnicode)
WriteBinaryStringToFile "E:\Scr\Test1.Pdf", x
End Sub
Sub WriteBinaryStringToFile(strFile As String, hex_val)
Dim handle As Long
handle = FreeFile
Open strFile For Binary As #handle
Seek #handle, LOF(handle) + 1
Put #handle, , hex_val
Close #handle
End Sub