sql >> Database teknologi >  >> RDS >> Sqlserver

Uploader fil fra Access til SQL Server med DAO-kode - Objekt påkrævet fejl

Set nøgleord bruges til at indstille en variabel til en objektreference. Din .Value er ikke et objekt, det er Null. Derfor Objekt påkrævet fejl.

Den kode, du har fundet, bruges til Access vedhæftede felter. Varbinary(Max) , er dog ikke et vedhæftningsfelt, men tilknyttes et OLE-objekt i Access/DAO. Det betyder, at du skal indstille værdien til et bytearray, der indeholder fildataene, i stedet for at bruge et indlejret postsæt til at administrere vedhæftede filer.

Der er mange måder at indlæse en fil i et bytearray. Jeg foretrækker følgende kode, der bruger en 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

Sådan gemmer du det tilbage til en fil:

With CreateObject("ADODB.Stream")
    .Type = 1 'adTypeBinary
    .Open
    .Write rstWater_Files.Fields("Binary_File").Value
    .SaveToFile "C:\testcopy.jpg", 2 'adSaveCreateOverWrite
    .Close
End With

Hvis du virkelig ikke kan lide ADODB , og endda tanken om en ADODB.Stream afskyr dig, du kan også bruge selve VBA til at læse en fil ind i et bytearray:

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

Denne sidste kode vil begrænse den maksimale filstørrelse på 2.147.483.647 bytes (den maksimale størrelse af en Long). Dette er dog også den maksimale størrelse af en Access-database, så du vil sandsynligvis løbe ind i problemer før det. Denne kode bruger heller ikke chunking, så den bruger muligvis mere hukommelse end nødvendigt.




  1. opret array fra mysql forespørgsel php

  2. Hvordan sletter man fra flere tabeller i MySQL?

  3. Bedste forespørgsel til at ramme Oracle-indeks med binds og null-værdier

  4. Hvordan man bruger en variabel fra en cursor i select-sætningen af ​​en anden markør i pl/sql