Set
キーワードは、変数をオブジェクト参照に設定するために使用されます。あなたの .Value
はオブジェクトではなく、Null です。したがって、必要なオブジェクト エラーです。
見つけたコードは、Access の添付ファイル フィールドに使用されます。 Varbinary(Max)
ただし、添付フィールドではなく、Access/DAO の OLE オブジェクトにマップされます。つまり、ネストされたレコードセットを使用して添付ファイルを管理するのではなく、ファイル データを含む bytearray に値を設定する必要があります。
ファイルを bytearray にロードする方法は多数あります。 ADODB.Stream
を使用する次のコードを好みます オブジェクト。
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
プレ>ファイルに保存するには:
With CreateObject("ADODB.Stream") .Type = 1 'adTypeBinary .Open .Write rstWater_Files.Fields("Binary_File").Value .SaveToFile "C:\testcopy.jpg", 2 'adSaveCreateOverWrite .Close End With
プレ>
ADODB
が本当に気に入らない場合 、さらにADODB.Stream
の考え VBA 自体を使用して、ファイルをバイト配列に読み込むこともできます。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
プレ>この最後のコードは、最大ファイル サイズを 2,147,483,647 バイト (Long の最大サイズ) に制限します。ただし、これは Access データベースの最大サイズでもあるため、その前に問題が発生する可能性があります。このコードもチャンクを使用しないため、必要以上のメモリを使用する可能性があります。