vb2005とfirebirdで開発するには

解決


見ざる聞かざる土居まさる  2007-11-19 10:14:22  No: 144106  IP: 192.*.*.*

VB2005でfirebirdデータベースの開発したいと思っています。
これまでVB6でACCESSデータベース、VB6でoracleデータベース
の開発(どちらもデータベース操作はADODBを使用)していましたが
VB2005 + ADODB + firebirdになると方法がわかりません。
何か情報等ございましたらお願いします。

編集 削除
もげ  2007-11-19 10:34:50  No: 144107  IP: 192.*.*.*

.NET Data Providerが公開させているようです。
http://www.ibphoenix.com/main.nfs?a=ibphoenix&s=1172449632:337518&page=ibp_download_dotnet
日本ユーザ会はこちらのようです。
http://tech.firebird.gr.jp/firebird/index.php?firebird_xsite=0

編集 削除
見ざる聞かざる土居まさる  2007-11-19 10:47:55  No: 144108  IP: 192.*.*.*

もげさん、ご回答ありがとうございます。
>.NET Data Providerが公開させているようです。
http://www.ibphoenix.com/main.nfs?a=ibphoenix&s=1172449632:337518&page=ibp_download_dotnet
全部英語表記なので、内容が全然理解できませんでした。
何をダウンロードしたらよいのかとVBへの組み込み方がわかりません。
尚開発環境は
  VisualStudio2005 ProfessonalEdition
  firebird 1.5
です。
あとサンプルコードがあればうれしいです。

編集 削除
魔界の仮面弁士  2007-11-19 12:06:52  No: 144109  IP: 192.*.*.*

> 全部英語表記なので、内容が全然理解できませんでした。
それは即ち、
  (1) 英語の文章なんて欲しくないので…日本語の資料を探してきてください。
  (2) 英語の文章なんて読みたくないので…自分のかわりに日本語に訳しておいてください。
  (3) 訳してはみたものの全然理解できないので…ダウンロードと組み込み手順だけでも教えてください。
  (4) 訳してみたが分からない部分が多いので…分からない部分を挙げていくのでひとつずつ教えてください。
  (5) その他
のいずれの意味でしょうか?

# いずれにしても、私は firebird 未経験なので、お役に立てそうに無いのですが。m(_ _;)m


> 何をダウンロードしたらよいのかとVBへの組み込み方がわかりません。
とりあえず、"Data Provider for .NET Framework" と書かれたリンクから、exe ファイルを
ダウンロードできるようなので、それをそのまま実行すれば良いのかと思いますよ。

あとは、セットアップ画面(Ghost Installer)に言語選択の指示が出るので、そこで日本語を
選んでみては如何でしょう? (そこから先は試していないのでわかりませんけど)


> あとサンプルコードがあればうれしいです。
.NET Data Provider というからには、使い方は他の ADO.NET プロバイダと
基本的には似たような物だと思いますよ。(試していない自分が言うのも何ですが)

一応、「firebird  .net data provider」などで google ってみると、
http://www.xdip.com/sylph/index.php?sylph_xsite=43
》 Firebird ADO.NET Data Provider 1.7 Beta 2は こちらからダウンロードして
》 テスト出来ます。いくつものバグの修正や、設計時の開発効率を向上する
》 新しいウィザード形式のフレームワークなど、それにFbDataAdapterクラスの
》 設定ウィザードなどが含まれます。 詳細はこちらでご覧下さい。 
》 http://www.firebirdsql.org/index.php?op=devel&sub=netprovider
などの記述も見つけられました。ウィザード等もあるらしいので、まずは
試してみては如何でしょう。

編集 削除
見ざる聞かざる土居まさる  2007-11-19 18:37:17  No: 144110  IP: 192.*.*.*

魔界の仮面弁士さんご回答ありがとうございます。
  >(1) 英語の文章なんて欲しくないので…日本語の資料を探してきてください。
  >(2) 英語の文章なんて読みたくないので…自分のかわりに日本語に訳しておいてください。
  >(3) 訳してはみたものの全然理解できないので…ダウンロードと組み込み手順だけでも教えてください。
  >(4) 訳してみたが分からない部分が多いので…分からない部分を挙げていくのでひとつずつ教えてください。
  >(5) その他
(3)になります。
なんとか.NET Data ProviderをVBのコンポーネントとして組み込むところまで
できました。
あとわからないのがコンポーネントを使用してのデータ操作方法のコードが
わかりません。
具体的には
  ①firebirdのデータをテキストボックス等に表示させる(select)
  ②firebirdのデータを更新する(insert,update,delete)
です。
何かサンプルコードはないでしょうか。

編集 削除
YuO  2007-11-19 19:16:20  No: 144111  IP: 192.*.*.*

Firebirdは使ったことがないですが……。


ドキュメントをダウンロードしてください。
# Documentaionのリンクです。

FirebirdSql.Data.Firebird.FbCommandクラスの例としてSELECTの例が,
FirebirdSql.Data.Firebird.FbConnectionクラスの例としてINSERTの例が,
それぞれ載っています。
# UPDATE, DELETEはINSERTと同じ方法でできます。

他に,FirebirdSql.Data.Firebird.FbDataAdapterクラスの例ではパラメータの設定やDataSetの利用があったりします。

ちなみに,基本的な使い方は,ヘルプを見る限り他のADO.NETのものと変わらないようなので,
例えばSQL Serverを相手にしている記事があれば,クラス等を読み替えるだけでFirebirdでも使えると思います。
# その記事がSQL Server固有のことをやっていない場合。

編集 削除
見ざる聞かざる土居まさる  2007-11-19 20:30:31  No: 144112  IP: 192.*.*.*

Yuoさんご回答ありがとうございます。
>ドキュメントをダウンロードしてください。
># Documentaionのリンクです。
  すみませんリンク先が表示されていないです。

編集 削除
見ざる聞かざる土居まさる  2007-11-19 21:44:54  No: 144113  IP: 192.*.*.*

Dim AdoCn As ADODB.Connection
Dim AdoRs As ADODB.Recordset 
Dim Ret as String 
'データSELECT
private sub Buttun1_Click
  Set AdoCn = New Adodb.Connection
  With AdoCn
    .ConnectionString = "なんたらかんたら"
    .Open
  End With
  Set AdoRs = AdoCn.Execute("Select * From T_Hoge Where フィールド1 = """ & Text1.Value & """; ")
  With AdoRsInterfaceTable
    If .EOF Then 
        Ret = MsgBox( "データがありません。")
      Else
        Text2.Value = !フィールド2
    End If
  AdoCn.Close
  Set AdoCn = Nothing '
end sub

private sub Buttun2_Click
  Set AdoCn = New Adodb.Connection
  With AdoCn
    .ConnectionString = "なんたらかんたら"
    .Open
  End With
  AdoCn.BeginTrans
  AdoCn.Execute("Update T_Hoge Set フィールド1 = """ & Text2.Value & """ Where フィールド1 = """ & Text1.Value & """; ")

  AdoCn.CommitTrans
  AdoCn.Close
  Set AdoCn = Nothing '
end sub

上記はadodbでのコードですがこれをNET Data Provider + firebirdでの
コードがわかりません
特に
  (1)RecoedSetにあたる部分
  (2)トランザクションの記述
がわかりません
どうかよろしくお願いします。

編集 削除
魔界の仮面弁士  2007-11-20 03:39:36  No: 144114  IP: 192.*.*.*

Yuoさんが書いてくださった
>> FirebirdSql.Data.Firebird
をキーワードに検索すれば、幾つかのサンプルが見つかるかと思いますが、
そもそも ADO.NET の前提知識が無いと、内容を読み解き難いかと思います。

ADO.NET と ADO では、プログラムモデルが異なるので、firebird 云々の前に、
まずは ADO.NET について、きちんと順を追って学習される事をお奨めします。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdnstepbyadonet/htm/lesson1.asp
http://ja.gotdotnet.com/quickstart/howto/doc/adoplus/ADOPlusOverview.aspx

「300 秒でズバリ !!」「10 行でズバリ !!」「ステップ 7 ハンズオン」の
Data Access / ADO.NET 関連も、基礎理解の役に立つかと思います。
(できれば、2003 版 / 2005 版の両方に目を通しておきましょう)
http://www.microsoft.com/japan/msdn/thisweek/wednesday/
http://www.microsoft.com/japan/msdn/thisweek/300x10/
http://www.microsoft.com/japan/msdn/thisweek/step7/


> 上記はadodbでのコードですがこれを
たとえば、ADO でいうところの
  ADODB.Command
に相当するのが、ADO.NET でいうところの
  FirebirdSql.Data.Firebird.FbCommand
  System.Data.OracleClient.OracleCommand
  Oracle.DataAccess.Client.OracleCommand
  System.Data.SqlClient.SqlCommand
  Microsoft.Data.Odbc.OdbcCommand
  System.Data.OleDb.OleDbCommand
  System.Data.Odbc.OdbcCommand
といった 〜Command 系クラスになります。
(DB によって名前空間の違いはありますが、基本的な使い方は同一です)

同様に、ADODB.Connection に相当する 〜Connection 系クラスもあります。


その一方で、ADODB.Recordset に相当するクラスはありません。
強いて言うならば、
  CursorLocation = adUseServer
  CursorTyep = adOpenForwardOnly
  LockType = adLockReadOnly
の、いわゆる 「ファイアホースカーソル」モードに当たるのが
ADO.NET でいうところの 〜DataReader 系のクラスとなりますし、
  CursorLocation = adUseClient
  CursorType = adOpenStatic
  LockType = adLockBatchOptimistic
  ActiveConnection = Nothing / Connection
で運用される「切断型バッチ更新カーソル」に当たるのが、ADO.NET での
DataSet での操作と言えなくも無いのですが…そもそものモデル構造が
まったく異なりますので、ADO とは分けて考えた方が良いかと思います。


> RecoedSetにあたる部分
ファイアホースカーソルで良ければ、〜DataReader 系のクラスがそれにあたります。
それ以外では、〜DataAdapter 系クラスを元に、データを DataTable / DataSet に
受け取り、それを読み書きすることになります。

> トランザクションの記述
それぞれの名前空間には、〜Transaction 系のクラスが用意されていますので、
それを利用してください。また、.NET Data Provider 側が対応している場合は、
System.Transactions.TransactionScope クラスを利用できる事もあります。

編集 削除
見ざる聞かざる土居まさる  2007-11-20 13:38:01  No: 144115  IP: 192.*.*.*

魔界の仮面弁士さんご回答ありがとうございます。
以下のコードでInsert Update Deleteはできました。
(コードはUpdate分だけですがInsert,Deleteも同じようなものです)
わからないのはSelectの場合です。DataSetにデータ格納までは
できたと思うのですがそこから先がわかりません。
やりたいことは以下の2点です。
(1)レコードがあるかどうかの判断
      (Adodbの場合はRecordSet.Eof で判断)
(2)Selectしたデータをテキストボックスに表示させたい
      以下のコードの場合、T_Hoge.Nameフィールドの内容を
      TEXT_002に表示させたい。
      (Adodbの場合はTEXT_002.TEXT = RecordSet!フィールド名で可能)
どうかよろしくおねがいします。
  Private Sub SubSelectData()
    Dim FbDs As DataSet = New DataSet
    With FbDA_1 'DataAdapterです
      .SelectCommand.CommandText = "SELECT * FROM T_Hoge WHERE ID =" & TEXT_1.Text
      .Fill(FbDs)
    End With
    'ここから先がわからない
  End Sub
  Private Sub SubInsertData()
    With FbDA_1
      .InsertCommand.CommandText = "INSERT INTO T_Hoge ( ID, NAME ) VALUES (" & TEXT_001.Text & ",'" & TEXT_002.Text & "' )"
      .InsertCommand.Connection.Open()
      .InsertCommand.ExecuteNonQuery()
      .InsertCommand.Connection.Close()
    End With
  End Sub

編集 削除
魔界の仮面弁士  2007-11-20 14:21:11  No: 144116  IP: 192.*.*.*

> (1)レコードがあるかどうかの判断
DataSet に取り込む事ができているのであれば、
  ds.Tables("表名").Rows.Count
で得られます。

データそのものは読み込まず、データの存在判定だけで十分であれば、
〜Command系クラスの ExecuteScalar メソッド等が使えます。


>(2)Selectしたデータをテキストボックスに表示させたい
データバインドで表示することもできますが、手動連結なら、
  Dim obj As Object = ds.Tables("表名").Rows(行番号)(列名または列番号)
という感じでデータを取り出せます。

編集 削除
見ざる聞かざる土居まさる  2007-11-20 14:58:20  No: 144117  IP: 192.*.*.*

魔界の仮面弁士さんご回答ありがとうございます
すべて解決しました。
本当にありがとうございました。助かりました。

編集 削除