いつも勉強させてもらっています。
色々なファイル(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
もうちょい考えて書けよ。
もしかして、全部変更したのを俺らに書けと?
もう少し質問の仕方を考えたからまた質問します。
ツイート | ![]() |