sql >> データベース >  >> RDS >> Sqlserver

Access から DAO コードを使用して SQL Server にファイルをアップロードする - オブジェクトが必要なエラー

    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 データベースの最大サイズでもあるため、その前に問題が発生する可能性があります。このコードもチャンクを使用しないため、必要以上のメモリを使用する可能性があります。




    1. MYSQLDBDumpエラーメッセージ

    2. SQLINステートメント-結果を返すときに重複を保持する

    3. mysqli_queryに複数のクエリを送信するとエラーが発生するのはなぜですか?

    4. チャットアプリケーションのファイルではなくSQLDBからポーリングすると、パフォーマンスが向上しますか?