Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Mengunggah file dari Access ke SQL Server dengan kode DAO - Kesalahan yang Diperlukan Objek

Set kata kunci digunakan untuk mengatur variabel ke referensi objek. .Value . Anda bukan objek, itu Null. Oleh karena itu Objek Diperlukan kesalahan.

Kode yang Anda temukan digunakan untuk bidang lampiran Access. Varbinary(Max) , bagaimanapun, bukan bidang lampiran, tetapi memetakan ke objek OLE di Access/DAO. Itu berarti Anda perlu menyetel nilai ke bytearray yang berisi data file, alih-alih menggunakan kumpulan record bersarang untuk mengelola lampiran.

Ada banyak cara untuk memuat file ke dalam bytearray. Saya lebih suka kode berikut, yang menggunakan ADODB.Stream objek.

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

Untuk menyimpannya kembali ke file:

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

Jika Anda benar-benar tidak menyukai ADODB , dan bahkan memikirkan ADODB.Stream membuat Anda jijik, Anda juga dapat menggunakan VBA sendiri untuk membaca file menjadi 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

Kode terakhir ini akan membatasi ukuran file maksimal 2.147.483.647 byte (ukuran maksimal dari Long). Namun, ini juga merupakan ukuran maksimal database Access, jadi Anda mungkin akan mengalami masalah sebelumnya. Kode ini juga tidak menggunakan chunking, sehingga mungkin menggunakan lebih banyak memori daripada yang dibutuhkan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mendeteksi referensi melingkar dalam SQL

  2. Bagaimana Fungsi TRANSLATE() Bekerja di SQL Server (T-SQL)

  3. Basis data tidak diperbarui dengan metode Lampirkan

  4. Temukan dan Ganti Semua Karakter Khusus dalam SQL

  5. Bagaimana cara menghapus 1000 baris teratas dari tabel menggunakan Sql Server 2008?