Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Przesyłanie pliku z programu Access do SQL Server z kodem DAO — błąd wymagany obiekt

Set słowo kluczowe służy do ustawienia zmiennej na odwołanie do obiektu. Twoja .Value nie jest przedmiotem, jest zerem. Stąd Obiekt wymagany błąd.

Znaleziony kod jest używany w polach załączników programu Access. Varbinary(Max) , jednak nie jest polem załącznika, ale mapuje do obiektu OLE w programie Access/DAO. Oznacza to, że musisz ustawić wartość na tablicę bajtów zawierającą dane pliku, zamiast używać zagnieżdżonego zestawu rekordów do zarządzania załącznikami.

Istnieje wiele sposobów na załadowanie pliku do tablicy bajtów. Wolę następujący kod, który używa ADODB.Stream obiekt.

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

Aby zapisać go z powrotem w pliku:

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

Jeśli naprawdę nie lubisz ADODB , a nawet myśl o ADODB.Stream brzydzi cię, możesz również użyć samego VBA do wczytania pliku do tablicy bajtów:

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

Ten ostatni kod ogranicza maksymalny rozmiar pliku do 2 147 483 647 bajtów (maksymalny rozmiar Long). Jest to jednak również maksymalny rozmiar bazy danych programu Access, więc prawdopodobnie wcześniej będziesz mieć kłopoty. Ten kod również nie używa chunkingu, więc może zużywać więcej pamięci niż jest to wymagane.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zdobyć miesiąc temu od dzisiaj w SQL Server 2008?

  2. Wyrażenie regularne MSSQL

  3. Sortuj ciągi liczbowe SQL po podziale

  4. Zarządzanie indeksami SQL Server za pomocą Index Manager dla SQL Server

  5. Nieużywany indeks programu SQL Server