|
すいません。
教えて頂いたHPどおりに以下のプログラムで
実行したのですが途中でエラーになります。
Private Sub コマンド25_Click()
On Error GoTo Err_コマンド25_Click
Screen.PreviousControl.SetFocus
DoCmd.DoMenuItem acFormBar, acEditMenu, 10, , acMenuVer70
Exit_コマンド25_Click:
Exit Sub
Err_コマンド25_Click:
MsgBox Err.Description
Resume Exit_コマンド25_Click
End Sub
' 指定されたレコードの OLE オブジェクト型またはメモ型フィールドの
' 内容をファイルに書き出します。
' 成功すると空文字列を、失敗するとエラーメッセージを返します。
' 引数は、DLookup 関数などの Domain 系定義域集計関数と、GetChunk
' メソッドの引数に準じます。
' ただし引数 offset 省略時にはデータの先頭から、引数 numbytes
' 省略時にはデータ長すべてが対象になります。
' DAO ライブラリへの参照設定が必須です。
Function DWriteChunk(fieldname As String, _
tablename As String, _
filename As String, _
Optional criteria As String, _
Optional ByVal offset As Long, _
Optional ByVal numbytes As Long) As String
On Error GoTo ErrorHandler
' 定数/変数宣言部
Const ERR_INVARID_DATA_TYPE = 3259
Dim rs As DAO.Recordset
Dim strSQL As String
Dim varChunk As Variant
Dim abytChunk() As Byte
Dim FileNo As Integer
' 変数を初期化します。
FileNo = FreeFile
strSQL = "Select " & fieldname & " From " & tablename
If (LenB(criteria) <> 0) Then strSQL = strSQL & " Where " & criteria
strSQL = strSQL & ";"
' ファイルとレコードセットを開きます。
Open filename For Binary As #FileNo
☆☆エラー箇所 Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
' データ型をチェックします。
Select Case rs(0).Type
Case dbLongBinary, dbMemo
' OK
Case Else
Err.Raise ERR_INVARID_DATA_TYPE
End Select
' データをファイルに書き込みます。
With rs
If (numbytes = 0) Then numbytes = .Fields(fieldname).FieldSize
varChunk = .Fields(fieldname).GetChunk(offset, numbytes)
abytChunk = varChunk
Put #FileNo, , abytChunk
End With
ExitProcedure:
On Error Resume Next
Close #FileNo
rs.Close: Set rs = Nothing
Exit Function
ErrorHandler:
DWriteChunk = Err.Number & ":" & vbCrLf & Err.Description
Resume ExitProcedure
End Function
Private Sub コマンド26_Click()
Const BMP_OFFSET = 87
Dim strResp As String
strResp = DWriteChunk( _
"写真", _
"T_購入_写真", _
"C:\" & "テスト.bmp", _
"[管理No.]=0000000001-001", _
BMP_OFFSET)
If (LenB(strResp) = 0) Then strResp = "完了"
MsgBox strResp
End Sub
エラー番号は91で「オブジェクト変数またはWithブロック変数が
設定されていません」とでます。
これはなぜでしょうか?
最初はSQLServerにDAOで接続することができないのかと
思いましたが調べるとそうではないようでした。
|
|