タイトル : Re: GetChunkとAppendChunkを扱うデータ型について 投稿日 : 2014/03/19(Wed) 09:48 投稿者 : 魔界の仮面弁士
> cnn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + "写真.mdb" + ";", "", "", 0) cnn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=写真.mdb;", "", "", 0) で良いような。 連結するにしても、+ より & の方が VB 的かな。 > cnn.CursorLocation = ADODB.CursorLocationEnum.adUseClient > strSQL = "SELECT * FROM テーブル1" > rsSyashin.Open(strSQL, cnn, ADODB.CursorTypeEnum.adOpenUnspecified, ADODB.LockTypeEnum.adLockOptimistic, 1) なぜ、adOpenUnspecified を指定されているのでしょうか。 adUseClient カーソルなのですから、adOpenStatic 一択ですよね。 以下、Jet 4.0 におけるカーソルモードの組み合わせ表 http://www.gizcollabo.jp/vbtomo/log/archive/vbdatabase_1483_0.html ついでに、このあたりも参考に。 http://support.microsoft.com/kb/321415/ja http://hanatyan.sakura.ne.jp/vbnetbbs/wforum.cgi?no=7177&reno=7174&oya=7168&mode=msgview&page=0 [相互運用型の埋め込み]を True にしている場合は、As ADODB.Connection が使われますが、 [相互運用型の埋め込み]を False にしている場合は、As ADODB.ConnectionClass とするようです。 また、COM オブジェクトに関して Marshal.ReleaseComObject の呼び出しも必要となりますね。 > Dim lngLogoSize As Long ' サイズ > lngLogoSize = rsSyashin.Fields("写真").ActualSize 何故、Long 型の変数を利用しておられるのでしょうか? > Dim oObj As Object = rsSyashin.Fields("写真").GetChunk(CInt(lngLogoSize)) その Object 型に、どのようなデータ型が格納されているか確認されましたか? Nothing でしょうか、DBNull でしょうか、あるいは Byte() でしょうか、それとも…。 > 悩んでいるのはObject型からどうやって画像ファイルに書き出そうかと。 念のために確認。 Microsoft Access の UI から埋め込んだ場合は、OLE オブジェクトとして 格納されますので、生の画像バイナリとは異なりますが、 今回は画像データそのものを書き込んでいるのですね? 以下蛇足:バイナリデータを SQL 文で INSERT する手法 http://yaplog.jp/orator/archive/36 > AppendChunkはByte型を読み込んでいるので Byte() 型ではなく? > GetChunkでできた型をなんとかByte型にできたらいいのですが > Object型だとどうにも変換できずに悩んでいます。 DirectCast なり CType なりで、「本来の型」にキャストしてみましょう。 |