ブラウザでダウンロード lightbox.dll の使用直接 Framework のコードを書いても良いのですが、実際は現実的ではありません。 できれば、クラスを提供する側と利用する側の両方の都合を考えながら、比較的 簡単なクラスを覗くのが良い訓練になると思います このインターフェイスの実装は基本的なものしかなく、開発に適宜必要なものを 各 RDBMS のクラスを継承して実装します。 ※ DbOracle クラス では、いろいろなメソッドやプロパティを実装しています。 まず、フォームのフィールドの値から名称を取得する例です。 DB は、同梱の 販売管理C.mdb を使用していますが、インターフェイスを使っているので、 接続文字列さえ変更すれば、他の RDBMS( Oracle・ODBC・MDB・SQLServer ) でもたいていすぐに使えます。 実際問題では、SQL の差がある場合もあるので、SQL は本来、外部ファイルのテキスト として記述されるべきです。 db という変数を本来であれば、DbAccess で定義するところですが、 DbInterface で定義しています。 インスタンスを作成しても、接続はされません。 ボタンクリックのイベントで、SELECT 文を実行して、氏名を取得しています 業務アプリケーションであれば、一旦接続したら、アプリケーションが終了するまで 接続を継続する事が多いですが(エンドユーザにとって最良の環境)、開発中はそれでは いろいろ問題が予想され、開発員全てが技術的にもうしぶん無い事は考えられないので、 必要な瞬間のみ接続し、必要なくなれば解除するようにしています。 これは、個人利用のユーティリティに多い仕様であり、デスクトップ上でいろいろな アプリケーションが同一のリソースにアクセスする場合に向いています。 業務アプリのエンドユーザにとっては、業務がスピィーディーに進む必要があるので、 DB にアクセスするたびに時間のロスをするわけにはいかないのです。 また、業務用の PC では、一日中そのアプリケーションは実行中であったりするわけ ですから、接続のコストが余程大きく無いかぎり、接続を継続する事は自然な事です。 ユーティリティは、比較すると目的の処理のサイクルが 起動=>接続=>処理=>アプリ終了 である事が多いです。 社員マスタ
Imports System.Windows.Forms Imports lightbox.db Public Class FormProg ' RDBMS 共通のインターフェイス Private db As DbInterface ' ****************************************************** ' 初期処理 ' ****************************************************** Private Sub 初期処理(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Dim dbpath As String ' MDB の場所を取得 dbpath = Application.StartupPath dbpath = dbpath + "\販売管理C.mdb" MessageBox.Show(dbpath) ' MDB 用インスタンス作成 db = New DbAccess(dbpath) End Sub ' ****************************************************** ' 確認処理 ' ****************************************************** Private Sub 確認_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles 確認.Click If Not db.Connect() Then MessageBox.Show(db.myError) Return End If Dim Query as String = "SELECT * from 社員マスタ where 社員コード = " Query += "'" + Me.TextBox1.Text + "'" if db.QueryAndRead( Query ) then Me.TextBox2.Text = db.GetValue("氏名") else ' 接続解除 db.Close() MessageBox.Show("データがありません") return end if ' 接続解除 db.Close() End Sub End Class ※ QueryAndRead は、単一行の取得を想定したメソッドです。 ※ SQL の作成は、いずれテキストファイル化するので、{0} を使用した置き換えはしていません。 また、この地道に文字列を連結していくやり方を書けるほうが確実なので、 他の言語に準備できない状態で移行した時のロスタイムを少なくできます。 db.myError のプロパティは、通常であれば設定される事のまずないエラーメッセージ が入ります。ですから、インターフェイスの仕様では、クリアする事はできません。 どうしても、クリアしたい場合は以下のようにします Ctype(db,DbAccess)._myError = "" |