C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: Access2007の添付ファイル型にファイルを保存するには


(過去ログ 80 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■47034 / inTopicNo.1)  Access2007の添付ファイル型にファイルを保存するには
  
□投稿者/ mino (1回)-(2010/02/16(Tue) 21:42:32)

分類:[VB.NET/VB2005 以降] 

VB2005を使用してWindowsアプリを開発しています。

VB2005からAccess2007の添付ファイル型に任意のファイルを保存したいのですが、
どのようにコードを書けばいいのか不明です。

ネット上を数日間、あれこれ探しているのですが、必要な回答が見つかっていません。

サンプルプログラムがあればベストなのですが、
参考になるサイトでもいいので、何か情報をお持ちの方がいましたら教えて頂けませんか。

よろしくお願い致します。
引用返信 編集キー/
■47043 / inTopicNo.2)  Re[1]: Access2007の添付ファイル型にファイルを保存するには
□投稿者/ 魔界の仮面弁士 (1495回)-(2010/02/17(Wed) 03:15:56)
No47034 (mino さん) に返信
> VB2005からAccess2007の添付ファイル型に任意のファイルを保存したいのですが、
> どのようにコードを書けばいいのか不明です。

Imports Microsoft.Office.Interop.Access.Dao
Module Module1
    Sub Main()
        Dim de As New DBEngine()
        Dim db As Database = de.OpenDatabase("C:\test\sample.accdb", False)

        Dim rs1 As Recordset = db.OpenRecordset("SELECT * FROM TBL")
        rs1.AddNew()
        Dim rs2 As Recordset2 = DirectCast(rs1.Fields("COL").Value, Recordset2)
        Dim fld2 As Field2
        fld2 = DirectCast(rs2.Fields("FileData"), Field2)
        rs2.AddNew()
        fld2.LoadFromFile("C:\Windows\羽毛.bmp")
        rs2.Update()
        rs2.AddNew()
        fld2.LoadFromFile("C:\Windows\隅田川.bmp")
        rs2.Update()
        rs1.Update()
        db.Close()
    End Sub
End Module

引用返信 編集キー/
■47361 / inTopicNo.3)  Re[2]: Access2007の添付ファイル型にファイルを保存するには
□投稿者/ mino (2回)-(2010/02/27(Sat) 19:10:35)
有名な魔界の仮面弁士さんからご回答頂けるとは光栄です。
その後、試行錯誤を繰り返し、下記の通り、実施したい処理を完成させることができました。
この度は、本当にありがとうございました。

Private Sub cmdAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAdd.Click

'ダイアログボックスを表示する
If OpenFileDialog.ShowDialog() = Windows.Forms.DialogResult.OK Then

Dim node As TreeNodeEx = frmMain.tvCategory.SelectedNode
Dim de As New DBEngine()
Dim db As Database = de.OpenDatabase("C:\test\sample.accdb", False)

Dim rs1 As Recordset = db.OpenRecordset("SELECT * FROM T_SME WHERE ID ='" & node.Name.ToString & "'")

rs1.Edit()
Dim rs2 As Recordset2 = DirectCast(rs1.Fields("File").Value, Recordset2)
Dim fld2 As Field2
fld2 = DirectCast(rs2.Fields("FileData"), Field2)

Do Until rs2.EOF
'データベース内に保存されているファイル名と新規に追加しようとしているファイル名が同一かチェック
If rs2.Fields("FileName").Value.ToString = OpenFileDialog.SafeFileName Then
'選択したファイルの保存
Dim intAns As Integer
intAns = MsgBox("同名のファイルが存在しています。上書きしますか?", MsgBoxStyle.YesNo, "確認")
If intAns = vbYes Then
'既存のファイルを削除
rs2.Delete()
Me.ListBoxMain.Items.Remove(OpenFileDialog.SafeFileName)
Exit Do
Else
Exit Sub
End If
End If
rs2.MoveNext()
Loop

'選択したファイルの追加
rs2.AddNew()
fld2.LoadFromFile(OpenFileDialog.FileName)
rs2.Update()
Me.ListBoxMain.Items.Add(OpenFileDialog.SafeFileName)

rs1.Update()
db.Close()
MsgBox("ファイルを追加しました。", MsgBoxStyle.Information, "完了")
End If
End Sub


解決済み
引用返信 編集キー/
■47362 / inTopicNo.4)  Re[3]: Access2007の添付ファイル型にファイルを保存するには
□投稿者/ 魔界の仮面弁士 (1513回)-(2010/02/27(Sat) 19:23:41)
No47361 (mino さん) に返信
> Dim rs1 As Recordset = db.OpenRecordset("SELECT * FROM T_SME WHERE ID ='" & node.Name.ToString & "'")

上記のコードだと、
 node.Name = "' OR ''='"
なデータが渡された場合、全レコードが列挙されてしまいますよ。


SQL 中に値を直接埋め込むのではなく、CreateQueryDef を通じて
パラメータークエリとして問い合わせるようにするか、もしくは、
SQL 生成時に「'」をエスケープ処理するようにしましょう。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -