• ベストアンサー

VB6.0 ADOでbyte型配列を Insertしたい

始めて投稿させて頂きます。よろしくお願いします。 さて当方、VB6.0とADOを使ってSQL Serverに接続してデータのやりとりをするプログラムを開発しているのですが byte型配列に入っている値をADOを使って、Char型のフィールドに入れたいんです。 このような処理は可能でしょうか? いろいろと探してみたのですが、どうしてもわからずにほとほと困っております。 何か可能な方法があれば、ぜひよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

ADOのヘルプを読んでみたのですが、 image型の時 バイト配列が受け渡せるような記述がありますので、 やはりDBの方をimage型にするべきだと思います。

takasebou
質問者

お礼

回答ありがとうございました。 実現不可ということで、設計の方で見直してもらえるように交渉してみます。

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1補足< 例えば IF &h20<= data(i) and data(i)< &h7F THEN outstr = outstr + chr(data(i)) END IF の様に値のチェックをして、制御コードなどを飛ばしてやれば良いと思いますが 本当に、バイトをDBに入れたいのなら DBの定義でCHARにするべきでなかったように思いますが。

takasebou
質問者

お礼

回答ありがとうございます。 >DBの定義でCHARにするべきでなかったように思いますが。 やはりそうなんですか……。 ただDB設計は担当外なものでして、何とかこちらで対応しようとしたのですが。 そうなるとDB設計をimageにしてもらうべきでしょうか? あるいは16進数変換して、char型を二倍の値にしてもらうべきなのでしょうね。。。 ありがとうございます。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

dim data(10) as Byte dim outstr as String の時 outstr="" for i=0 to UBOUND(data) outstr = outstr + chr(data(i)) next のような感じで、文字列にしてやればいいのではないでしょうか

takasebou
質問者

お礼

回答ありがとうございます。 私の質問の説明不足ですみませんが、このままですと、 data(i) の中身が特殊コードになった時(たとえば 0 など) cQiery = "INSERT INTO tablename VALUES ('" & outstr & "')" adoObj.Execute(cQiery) としても書き込めないのです。 ところで、ふと思ったのですが、もしかしてけっこう速度のいるプログラムなので、Insertより速度が遅いという事で試していなかったのですが、AddNewメソッドを使えば書き込めるのでしょうか? そちらも試してみます。

関連するQ&A

  • VBのByte配列をVARIANTに格納してCOMでVCに渡したい

    OS: WinXP sp2 開発: VB6 sp5 <--> VC6 sp5 MFC OCX いままでVB/VC間のデータのやりとりをStringで行っていたアプリがありまして、現在はVB側から見たインターフェースをByte()へ変更する作業を行っています。 まず VB --> VC に関して質問ですが Dim byteStream(5) As Byte byteStream(0) = 1 byteStream(1) = 2 byteStream(2) = 3 byteStream(3) = 4 byteStream(4) = 5 などとし、メソッドに対してbyteStreamをVariantで渡してやって C側から const VARIANT FAR& で参照してきて、 この.pcVal(配列の先頭アドレスが入っているはず)をchar*で受け取ろうと思いました。 するとこのアドレスには、先頭のbyteStream(0)の値しか入ってきません。 VB側でVariant = Byte()とするときに値渡しになっているっぽい?のですが、仕組みがわかりません。 この理由が知りたいです。 ODLファイルを変更して対処すべきかもしれませんが、MFCのウィザードが「慎重に行ってください。」とコメントしているので質問させていただきました。 VB側でのメソッドの宣言: Function SendVariantStream(stream, length As Integer) As Boolean odlファイルでの宣言: boolean SendVariantStream(VARIANT stream, short length) VCの宣言: BOOL SendVariantStream(const VARIANT FAR& stream, short length);

  • [VB.net] StringからByte配列への変換

    皆さんこんばんは。 最近VB.NET2000でVisual Basicをはじめたのですが、どうにもString型の値をByte配列へ変換するやり方が分かりません。 VB6.0だとByte配列にStringを代入するだけでいいそうなのですが、.NETで代入しようとすると『型"String"の値を"Byteの1次元配列"に変換できません』というビルドエラーが表れてしまいます。 CByte( Mid(str,i,1) ) CLng( Mid(str,i,1) ) 他にも上記コードのように一つずつ変換しようと試みたのですが、String中のある文字がワイドバイトらしく、System.InvalidCastExceptionが表れてしまいます。 ("『"を上下反転したような文字) ワイドバイトのStringを1バイトずつ区切ってByte配列やLong配列へ格納する手法というものはありませんでしょうか。 よろしくお願いします。

  • VB6でやると構造体の配列になる変数をVB2008では何で作ればいいか

    VB6でプログラムを作っていたときは 値のセットが配列になるとき 構造体を動的配列で宣言してデータを足して作りました。 VB2008で開発をすることになり 同じようなことをしたいのですが もっと便利なやり方が登場したりするのでしょうか? クラスで挑戦したのですが動的配列はできないようでした。

  • VB.NET ADO.NETのサンプルについて

    開発環境  Win XP pro  VB.NET  SQL Server 2000 VB.NET ADO.NETのサンプルを探しているのですが まだまだ情報が少なくて見つかりません。 私の探し方が悪いのかもしれませんが、、、 言語の勉強をする際に一番の近道はサンプルを 活用する事だと思います。 サンプル集を集めたWEBページまたは書籍を知っている方 いましたら教えてください。 宜しくお願いします。

  • SQL2008はVB6.0に対応していますか?

    SQL2008はVB6.0に対応していますか? VB6.0でプログラムを開発し、SQL7.0を使っていました。 サーバの老朽化で、サーバを変更するので、 それに伴いSQL7.0からSQL2008に変更する予定です。 質問ですが、 今までVB6.0で開発してきたプログラムはSQL2008でも 問題なく、稼動するでしょうか もし、稼動しない場合はどのようにしたらよいでしょうか よろしくお願いします。

  • vb ado → vb2005 ado.net変換

    お世話になります。初めて投稿させていただきます。 VB6.0で下記のようなコードでコンボボックスcboMakerへフィールド値を格納しているのですがこのコードをVB2005のado.netで記述したいのですが可能でしょうか?可能であればどのようなコードを書けばよいのでしょうか。フィールドの値を1レコードづつ取得することは可能なのでしょうか? 初心者ですみません。宜しくお願いします。 Dim con As ADODB.Connection Dim rec As ADODB.Recordset Dim sql As String Dim recCnt As Long con = New ADODB.Connection con.ConnectionString "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & パス con.Open() rec = New ADODB.Recordset sql = "SELECT * FROM " & テーブル名 rec.Open(sql, con, adOpenStatic, adLockReadOnly) If rec.RecordCount < 1 Then 'レコードが存在しない MsgBox("未登録です。", G_MB_CAUTION, G_SYSTEM_NAME) Exit Function Else ReDim CboMakerId(rec.RecordCount) End If 'コンボボックスに値を挿入 ※「.List(recCnt)」から値を挿入する With Me.cboMaker .Clear() recCnt = 0 .List(recCnt) = "" .ItemData(recCnt) = 0 Do Until rec.EOF recCnt = recCnt + 1 .List(recCnt) = rec("Name") .ItemData(recCnt) = rec("ID") rec.MoveNext() Loop End With Me.cboMaker.ListIndex = 0 rec.Close() : rec = Nothing con.Close() : rec = Nothing End Function

  • レコードセットの値 SelectとINSERT,UPDATE,Deleteで異なる?

    VB6でSQL Server2005をADOでアクセスしていますが、基本的なことですが、SELECT文の場合はrs.closeしてもエラーになりませんが、INSERT,UPDATE,DELETEの場合は、rs.closeとすると、 実行時エラー3704 オブジェクトが閉じている場合は、操作は許可されません。 というエラーメッセージが表示されます。 SQLは以下のように実行しています。 Call rs.Open(cobSQL.Text, cn, adLockOptimistic) VB6でSQL SERVER2005(もしくは2000)でデータベースアプリを作成するのに参考になる良書などご存知でしたら教えてください。 また、VB6でADOは、ネイティブにSQL Server2005にアクセスできるのでしょうか?まだADOやデータベースの概念が良くわかっていないため、質問自体がおかしいかもしれませんが、VB6で高速にSQL SERVER 2005で処理させたいのが私の現時点での目標です。

  • VBからサーバーへ

    初めてVBプログラミングをしようとしているものです。VBでサーバーに接続する方法がよく分かりません。アクセスに接続する方法はなんと無く理解できたのですが、SQLサーバへの接続方法がイメージがつかめないんです。プログラムは何人かが共通して利用できるものを考えています。どうかご教授のほどよろしくお願いします。 サーバー 2000 SQLサーバ2003 開発クライアントPC W2K VB6

  • VB6+ADO(EXCEL)についてお教えください。Excelが更新されません。

    お知恵をお貸しください。 VB6 SP5 WIN XP SP2 ADO 2.8 Library Excel 2003 SP2 現在、以上の環境で開発を行っております。 対象Excelのシート1の名前をある機械の「部品入出庫管理」とし、シート2の名前を「部品表」としています。 「部品表」にある[在庫数]フィールドは 「部品入出庫管理」にある[入庫]フィールド、あるいは[出庫]フィールドに値が入力されれば計算される仕組みになっております。 [入庫]フィールドに値Xが入力されれば、「部品表」の[在庫数]フィールドはXプラスされ、 [出庫]フィールドに値yが入力されれば、「部品表」の[在庫数]フィールドはyマイナスされます。 アプリケーションの流れは、 (1)「部品表」の[部品番号]フィールドを検索 (2)入・出庫の数量を入力 (3)「部品入出庫管理」の[入庫]、あるいは[出庫]フィールドにADO接続で数量が入力される (4)この数量を「部品表」の[在庫数]フィールドがExcel内で自動的に計算して値を更新しておく です。 しかし、 (4)の動作ができていません。Excelのアプリケーションそのものを開くと、更新されているのですが・・・ .addnewと.updateを使っております。 何か他の命令なりがあるのでしょうか? ちょっと解りづらいかもしれませんが、お知恵をお貸しください。 大変恐縮ですが宜しくお願い申し上げます。

  • 配列へのプラス?

    C++のコードを読んでいるところなのですが、 配列に プラスされているコード部の意味がわからずこまっております。 ********************************* unsigned char data1[32]; unsigned char data2[8]; ※ここでdata1, data2に値入力処理 if(memcmp(data1 + 2, data2, 8) != 0){  //処理X } ********************************* 上記のようなコードの「data1 + 2」の部分がよくわかりません。 byte配列にプラスされている2は、数値なのでしょうか?? C++は普段使わないもので、、、呆れるほどアホな質問だとしてもご了承ください。。 どなたかご教授ねがいます。 よろしくお願いいたします。

専門家に質問してみよう