access にBMPファイルを入れたい。

解決


こあ  2009-02-28 16:28:45  No: 141584  IP: [192.*.*.*]

すみません現在、100*100ピクセルのBMPファイルを
VS2005からaccess2000に直に収納したいのですが、
パラメータの指定方法がわかりません。
(ファイルサイズが小さいし、サムネイルが多いので直に収納します。)

 Dim thumbnail As Bitmap = New Bitmap("c:\BMP1.bmp")
         'データを追加する
            Dim oConn As OleDbConnection
            Dim oda As OleDbDataAdapter
            Dim ds As New DataSet

            '接続文字列
            oConn = New OleDbConnection          ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\PIC.mdb")

            'データー追加コマンド
            oda = New OleDbDataAdapter("INSERT INTO PICDB " _
            & "(サムネイル, タイトル)" _
            & " VALUES (?,?);", oConn)

      oda.SelectCommand.Parameters.AddWithValue("サムネイル", thumbnail)
            oda.SelectCommand.Parameters.AddWithValue("タイトル", Title)

            oConn.Open()
            oda.Fill(ds, "PICDB")  <-ここでエラー
            DataGridView.DataSource = ds.Tables("PICDB")
            oConn.Close()

エラーの内容は(指定されたデーター量がフィールドサイズを超えています)です。
初歩的なことで、パラメータの指示の仕方が悪いのだと思いますが、
どなたか教えてください。

編集 削除
オショウ  2009-02-28 21:32:58  No: 141585  IP: [192.*.*.*]

ACCESS000の画像を保存するフィールド属性は何に指定されて
いるのでしょうか?

VARBINARY か、BINARY か?

VARBINARY は可変長ですが、BINARYは固定長で最大510バイト
です。
もし、BINARYならば、多分、510バイト以上のサイズの画像を
保存しようとして、エラーになっていると言うことになります。

保存方法(プログラム)については、OleDbではやったことない
ので、未確認です。あしからず・・・

以上。

編集 削除
オショウ  2009-02-28 21:43:49  No: 141586  IP: [192.*.*.*]

VB6ですよね?

http://homepage.mac.com/t_fukumori/iblog/C1746881529/E469162127/index.html

こんなサンプル見つけたので、お知らせしておきます。

以上。

編集 削除
こあ  2009-03-01 00:09:25  No: 141587  IP: [192.*.*.*]

オショウさん回答ありがとうございます。

フィールド属性とゆうかデータ型はOLE オブジェクト型です。
http://homepage.mac.com/t_fukumori/iblog/C1746881529/E469162127/index.html
も見たのですが、ますますわからなくなってしまいました。
OleDbでなくてもよいので、保存方法を差支えなければ教えてください。

こんなのを発見しました。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1213542192?fr=rcmd_chie_detail
↑ちなみに僕ではありませんし、すみませんが、これでもまだわかりません。

編集 削除
オショウ  2009-03-01 02:23:57  No: 141588  IP: [192.*.*.*]

こんがらがってすいません・・・
VB全般掲示板側なので、VB6と思いこんでました。

.NETならVB.NET開示版の方がよいようにも思いますが。

で・・・

バイナリ型のフィールド作成は・・・
http://www.f3.dion.ne.jp/~element/msaccess/AcTipsBinaryField.html

とありますが・・・
http://mnow.wankuma.com/cs_dataset2.html

これを見ると、OLEオブジェクト型は、VarBinaryなので、OKかと。
要はアクセス側のテーブルデザインで画像を保存するフィールド設定は
できる。と思います。

読み書きは・・・
http://support.microsoft.com/kb/308042/ja
http://support.microsoft.com/kb/317701/ja

SQL Serverですが、OleDbに置き換えればできませんか?

http://codezine.jp/article/detail/3026

ここも参考になるかと・・・

以上。

編集 削除
こあ  2009-03-01 23:17:08  No: 141589  IP: [192.*.*.*]

オショウさんありがとうございました。
最初のプログラムを何回か実行しているうちに不思議なことに、エラーが
出なくなりました。
フィールドもACCESSで見る限り(ロングバイナリーデータ)と出ているの書き込みもされているみたいです。
で、
でも参照するとOLEサーバーと通信中にエラーが発生したとメッセージが
出ます。
あと、もう少しなので、上記のリンクも参考にしてがんばってみます。

編集 削除