Set
klíčové slovo se používá pro nastavení proměnné na odkaz na objekt. Vaše .Value
není objekt, je to Null. Proto Vyžadován objekt chyba.
Kód, který jste našli, se používá pro pole přílohy Access. Varbinary(Max)
, však není pole přílohy, ale mapuje se na objekt OLE v Access/DAO. To znamená, že místo použití vnořené sady záznamů ke správě příloh musíte nastavit hodnotu na bajtray obsahující data souboru.
Existuje mnoho způsobů, jak načíst soubor do byearray. Preferuji následující kód, který používá ADODB.Stream
objekt.
Dim dbsGMEC As DAO.Database
Dim rstWater_Files As DAO.Recordset
Set dbsGMEC = CurrentDb
Set rstWater_Files = dbsGMEC.OpenRecordset("dbo_WATER_FILES", dbOpenDynaset, dbSeeChanges)
rstWater_Files.Edit
Dim strm As Object
Set strm = CreateObject("ADODB.Stream")
strm.Type = 1 'adTypeBinary
strm.Open
strm.LoadFromFile "C:\test.jpg"
rstWater_Files.Fields("Binary_File").Value = strm.Read
strm.Close
rstWater_Files.Update
Chcete-li jej uložit zpět do souboru:
With CreateObject("ADODB.Stream")
.Type = 1 'adTypeBinary
.Open
.Write rstWater_Files.Fields("Binary_File").Value
.SaveToFile "C:\testcopy.jpg", 2 'adSaveCreateOverWrite
.Close
End With
Pokud se vám opravdu nelíbí ADODB
a dokonce i myšlenka na ADODB.Stream
znechucuje vás, můžete také použít samotný VBA ke čtení souboru do byearray:
Dim dbsGMEC As DAO.Database
Dim rstWater_Files As DAO.Recordset
Set dbsGMEC = CurrentDb
Set rstWater_Files = dbsGMEC.OpenRecordset("dbo_WATER_FILES", dbOpenDynaset, dbSeeChanges)
rstWater_Files.Edit
Dim byteArr() As Byte
Dim fileInt As Integer: fileInt = FreeFile
Open "C:\test.jpg" For Binary Access Read As #fileInt
ReDim arr(0 To LOF(fileInt) - 1)
Get #fileInt, , byteArr
Close #fileInt
rstWater_Files.Fields("Binary_File").Value = byteArr
rstWater_Files.Update
Tento poslední kód omezí maximální velikost souboru na 2 147 483 647 bajtů (maximální velikost Long). To je však také maximální velikost databáze Accessu, takže se před tím pravděpodobně dostanete do problémů. Tento kód také nepoužívá chunking, takže může používat více paměti, než je potřeba.