ファイル→テーブル→ファイルへ保存

解決


ふぁいら〜  2007-10-13 05:06:40  No: 137801

いつも勉強させてもらっています。

色々なファイル(jpg,bmp,tif,pdf,xls,dwg etc)をテーブルへ保存し管理したいのですが、JPGファイル以外出来なくて困っています。
また、DAO を使っていますが、ADOへ変更したいと考えています。
どなたか分かる方お願いします。

Server マシーン
w2k server sp4
SQL Server 2000

クライアントマシーン
WinXP SP2
Visual Basic 6.0

sub ファイルからテーブル保存()
    Dim dbD      As dao.Database
    Dim rs As Recordset
    Dim Fld As Field
    Dim FNo As Long
    Dim Arr() As Byte
    Dim FileLen As Long, Chunks As Long, Fragment As Long
    Dim k As Long

    Set dbD = DBEngine.Workspaces(0).OpenDatabase("", False, False, "ODBC;Driver={SQL Server};Server=" & dbServerName & ";Database=" & dbName & ";" & dbServerName & "=" & dbSQLUserID & ";pwd=" & dbSQLPassword & ";")

    Set rs = dbD.OpenRecordset("D_File", dbOpenDynaset)
    rs.AddNew
    
    strFileName = "d:\aa.pdf"
    strFieldName = "FileO"

    FNo = FreeFile
    Open Data.Files(i) For Binary Access Read As #FNo
    FileLen = LOF(FNo)                'ファイルサイズ
    Chunks = FileLen \ BUFFER_SIZE        '分割回数
    Fragment = FileLen Mod BUFFER_SIZE    '余り

    With rs
        '余りを先にアペンド
        ReDim Arr(Fragment)
        Set Fld = .Fields(strFieldName)
        Get #1, , Arr()
        Fld.AppendChunk Arr()
        'アペンド
        ReDim Arr(ArrSize)
        For k = 1 To Chunks
            Get #1, , Arr()
            Fld.AppendChunk Arr()
        Next
        Close #FNo
    End With

    Erase Arr
    Set Fld = Nothing
    rs!OriginalFileName = FileisPathName(strFileName , 3)

    rs.Update
end sub

Sub テーブルから取り出しファイル保存()
    Dim dbD      As dao.Database
    Dim rs As Recordset
    Dim Fld As Field
    Dim FNo As Long, strCriteria As String
    Dim Arr() As Byte
    Dim lngTotalSize As Long, lngOffset As Long, Chunks As Long, Fragment As Long

    strFileName = "d:\aa.pdf"
    strFieldName = "FileO"

    Set dbD = DBEngine.Workspaces(0).OpenDatabase("", False, False, "ODBC;Driver={SQL Server};Server=" & dbServerName & ";Database=" & dbName & ";" & dbServerName & "=" & dbSQLUserID & ";pwd=" & dbSQLPassword & ";")
    Set rs = dbD.OpenRecordset("D_File", dbOpenDynaset)
    Set Fld = rs.Fields(strFieldName)
    
    FNo = FreeFile
    Open strFileName For Binary Access Write As #FNo
    
    lngTotalSize = Fld.FieldSize            'データサイズ
    Chunks = lngTotalSize \ ArrSize         '分割回数
    Fragment = lngTotalSize Mod ArrSize     '余り
    
    '余りを先に取り出す
    ReDim Arr(Fragment)
    Arr() = Fld.GetChunk(lngOffset, Fragment)
    Put #1, , Arr()
    lngOffset = lngOffset + Fragment

    'チャンクしながら保存
    Do While lngOffset < lngTotalSize
        Arr() = Fld.GetChunk(lngOffset, ArrSize)
        Put #1, , Arr()
        lngOffset = lngOffset + ArrSize
    Loop
    Close #FNo
    
    Set Fld = Nothing
    rs.Close
    Set rs = Nothing
End Sub


偽者  2007-10-13 08:12:58  No: 137802

もうちょい考えて書けよ。
もしかして、全部変更したのを俺らに書けと?


ふぁいら〜  2007-10-14 04:59:01  No: 137803

もう少し質問の仕方を考えたからまた質問します。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加