VB2005でfirebirdデータベースの開発したいと思っています。
これまでVB6でACCESSデータベース、VB6でoracleデータベース
の開発(どちらもデータベース操作はADODBを使用)していましたが
VB2005 + ADODB + firebirdになると方法がわかりません。
何か情報等ございましたらお願いします。
.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
もげさん、ご回答ありがとうございます。
>.NET Data Providerが公開させているようです。
>http://www.ibphoenix.com/main.nfs?a=ibphoenix&s=1172449632:337518&page=ibp_download_dotnet
全部英語表記なので、内容が全然理解できませんでした。
何をダウンロードしたらよいのかとVBへの組み込み方がわかりません。
尚開発環境は
VisualStudio2005 ProfessonalEdition
firebird 1.5
です。
あとサンプルコードがあればうれしいです。
> 全部英語表記なので、内容が全然理解できませんでした。
それは即ち、
(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
などの記述も見つけられました。ウィザード等もあるらしいので、まずは
試してみては如何でしょう。
魔界の仮面弁士さんご回答ありがとうございます。
>(1) 英語の文章なんて欲しくないので…日本語の資料を探してきてください。
>(2) 英語の文章なんて読みたくないので…自分のかわりに日本語に訳しておいてください。
>(3) 訳してはみたものの全然理解できないので…ダウンロードと組み込み手順だけでも教えてください。
>(4) 訳してみたが分からない部分が多いので…分からない部分を挙げていくのでひとつずつ教えてください。
>(5) その他
(3)になります。
なんとか.NET Data ProviderをVBのコンポーネントとして組み込むところまで
できました。
あとわからないのがコンポーネントを使用してのデータ操作方法のコードが
わかりません。
具体的には
①firebirdのデータをテキストボックス等に表示させる(select)
②firebirdのデータを更新する(insert,update,delete)
です。
何かサンプルコードはないでしょうか。
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固有のことをやっていない場合。
Yuoさんご回答ありがとうございます。
>ドキュメントをダウンロードしてください。
># Documentaionのリンクです。
すみませんリンク先が表示されていないです。
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)トランザクションの記述
がわかりません
どうかよろしくお願いします。
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 クラスを利用できる事もあります。
魔界の仮面弁士さんご回答ありがとうございます。
以下のコードで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
> (1)レコードがあるかどうかの判断
DataSet に取り込む事ができているのであれば、
ds.Tables("表名").Rows.Count
で得られます。
データそのものは読み込まず、データの存在判定だけで十分であれば、
〜Command系クラスの ExecuteScalar メソッド等が使えます。
>(2)Selectしたデータをテキストボックスに表示させたい
データバインドで表示することもできますが、手動連結なら、
Dim obj As Object = ds.Tables("表名").Rows(行番号)(列名または列番号)
という感じでデータを取り出せます。
魔界の仮面弁士さんご回答ありがとうございます
すべて解決しました。
本当にありがとうございました。助かりました。