Visual Studio 無しで Form + DB アプリケーション (1)

   


ブラウザでダウンロード
lightbox.dll の使用
直接 Framework のコードを書いても良いのですが、実際は現実的ではありません。
できれば、クラスを提供する側と利用する側の両方の都合を考えながら、比較的
簡単なクラスを覗くのが良い訓練になると思います

このインターフェイスの実装は基本的なものしかなく、開発に適宜必要なものを
各 RDBMS のクラスを継承して実装します。

※ DbOracle クラス では、いろいろなメソッドやプロパティを実装しています。

まず、フォームのフィールドの値から名称を取得する例です。
DB は、同梱の 販売管理C.mdb を使用していますが、インターフェイスを使っているので、
接続文字列さえ変更すれば、他の RDBMS( Oracle・ODBC・MDB・SQLServer ) でもたいていすぐに使えます。

実際問題では、SQL の差がある場合もあるので、SQL は本来、外部ファイルのテキスト
として記述されるべきです。
db という変数を本来であれば、DbAccess で定義するところですが、
DbInterface で定義しています。

インスタンスを作成しても、接続はされません。
ボタンクリックのイベントで、SELECT 文を実行して、氏名を取得しています


業務アプリケーションであれば、一旦接続したら、アプリケーションが終了するまで
接続を継続する事が多いですが(エンドユーザにとって最良の環境)、開発中はそれでは
いろいろ問題が予想され、開発員全てが技術的にもうしぶん無い事は考えられないので、
必要な瞬間のみ接続し、必要なくなれば解除するようにしています。


これは、個人利用のユーティリティに多い仕様であり、デスクトップ上でいろいろな
アプリケーションが同一のリソースにアクセスする場合に向いています。
業務アプリのエンドユーザにとっては、業務がスピィーディーに進む必要があるので、
DB にアクセスするたびに時間のロスをするわけにはいかないのです。
また、業務用の PC では、一日中そのアプリケーションは実行中であったりするわけ
ですから、接続のコストが余程大きく無いかぎり、接続を継続する事は自然な事です。

ユーティリティは、比較すると目的の処理のサイクルが
起動=>接続=>処理=>アプリ終了 である事が多いです。
社員マスタ

列名 型値 型定数 型名 最大桁 精度 スケール NULL 主キー 型説明
1 社員コード 130 adWChar VARCHAR 4       1 Null で終了する Unicode 文字列
2 氏名 130 adWChar VARCHAR 50         Null で終了する Unicode 文字列
3 フリガナ 130 adWChar VARCHAR 50         Null で終了する Unicode 文字列
4 所属 130 adWChar VARCHAR 4         Null で終了する Unicode 文字列
5 性別 3 adInteger INT   10       4 バイトの符号付き整数
6 作成日 7 adDate DATETIME           日付値
7 更新日 7 adDate DATETIME           日付値
8 給与 3 adInteger INT   10       4 バイトの符号付き整数
9 手当 3 adInteger INT   10       4 バイトの符号付き整数
10 管理者 130 adWChar VARCHAR 4         Null で終了する Unicode 文字列
11 生年月日 7 adDate DATETIME           日付値
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 = ""