ADOデータソースコントロールを使って、エディットコントロールとデータベースを連携させる方法について、以下の手順で説明します。
フォームにコントロールを配置します。
コントロールのプロパティを設定します。
コントロールの手続きを記述します。
ポイント
本節で作成するサンプルプログラムは、"ADODataSource\ADODataSource1.ppj"に格納されています。必要に応じて参照してください。
フォームにコントロールを配置する
以下のコントロールを図のようにフォームに配置します。
ADOデータソースコントロールを1つ(CmADODataSource1)
ラベルコントロールを5つ(CmLabel1~CmLabel5)
コマンドボタンコントロールを2つ(CmCommand1~CmCommand2)
エディットコントロールを4つ(CmEdit1~CmEdit4)
ポイント
エディットコントロールがツールバーにない場合、フォームにコントロールを配置する前に、以下の手順で、コントロールをツールボックスに追加してください。
[ツール]メニューの[カスタムコントロール]コマンドを選択します。
[カスタムコントロール]ダイアログボックスの[利用可能なコントロール]一覧中の[FUJITSU PowerCOBOL Light Weight Controls 4.6]をチェック状態にします。
ツールボックスに、エディットコントロールのビットマップが追加されたことを確認します。
コントロールのプロパティを設定する
まず、コントロールのプロパティを次の図と同じになるよう変更します。
プロジェクトウィンドウのデザインツリーウィンドウからラベルコントロールを1つずつ選択し、プロパティリストウィンドウ上の"Caption"に、それぞれの文字列を設定します。
各コマンドボタンコントロールのプロパティ設定ダイアログボックスを開き、[コマンドボタン]タブの[キャプション]を変更します。
ポイント
ラベルコントロールには、コントロール固有のプロパティページは用意されていません。したがって、ラベルコントロールに表示する文字列や文字の配置(Alignmentプロパティ)などはプロパティリストウィンドウを使って設定します。
また、エディットコントロールについても同様に、プロパティリストウィンドウで設定します。
次に、ADOデータソースコントロール(CmADODataSource1)のプロパティ設定ダイアログボックスを開き、以下の手順でプロパティを設定します。
[ADOデータソース]タブで[接続文字列]の右側にあるボタンをクリックします。
→3つのサブメニューが表示されます。
[ODBCデータソース名を指定]を選択します。
→[ODBCデータソース名の選択]ダイアログボックスが表示されます。
ODBCデータソース名の一覧からCOBOLSampleを選択します。(一覧にCOBOLSampleがない場合は、後述のワンポイントを参照してください。)
[OK]ボタンをクリックします。
[レコードセット]タブを開きます。
[コマンドタイプ]から"2 - adCmdTable"を選択します。
[適用]ボタンをクリックします。
→[コマンドテキスト]がコンボボックスに変わり、連携するテーブルの選択ができるようになります。
[コマンドテキスト]から"STOCK"を選択します。
[OK]ボタンをクリックします。
次に、以下の手順で、それぞれのエディットコントロール(CmEdit1~CmEdit4)のデータソースとして、ADOデータソースコントロール(CmADODataSource1)を設定します。
エディットコントロールのプロパティ設定ダイアログボックスを開きます。
[データ連結]タブの[データソース]から、"CmADODataSource1"を選択します。
[適用]ボタンをクリックします。
[データフィールド]から、エディットコントロールに設定するフィールド名(CmEdit1の場合は"GNO"、CmEdit2の場合は"GOODS"、CmEdit3の場合は"QOH"、CmEdit4の場合は”WHNO”)を選択します。
[OK]ボタンをクリックします。
最後に、以下の手順で、それぞれのエディットコントロール(CmEdit1~CmEdit4)の文字列を削除します。
プロジェクトウィンドウのデザインツリーウィンドウからエディットコントロールを選択します。
プロパティリストウィンドウ上の"Text"に設定されている文字列を削除します。
ポイント
ここでは、SQL Serverに作成した、COBOLSampleデータベースを使用します。COBOLSampleデータベースの構築手順については、“C.4 サンプルデータベースを構築する”を参照してください。
ODBCデータソース名の選択で、一覧にCOBOLSampleがない場合は、一覧の右側にある[新規作成]ボタンをクリックし、以下の手順で一覧に追加します。
データソースの型として、ユーザデータソースを選択します。
[次へ]ボタンをクリックします。
データソースのドライバとして、SQL Serverを選択します。
[次へ]ボタンをクリックします。
[完了]ボタンをクリックします。
→[SQL Server に接続するための新規データ ソースを作成する]ダイアログボックスが表示されます。
新しいデータソースの名前は、“COBOLSample”を設定します。
データソースの説明には、”NetCOBOL サンプル”を設定します。
接続するSQL Server サーバー名には、COBOLSampleデータベースを構築したサーバー名を設定します。
[次へ]ボタンをクリックします。
SQL Serverに接続にユーザIDとパスワードが必要な場合は、SQL ServerのログインIDとパスワードを設定します。
[次へ]ボタンをクリックします。
[既定のデータベースを以下のものに変更する]をチェックし、“COBOLSample”を選択します。
[次へ]ボタンをクリックします。
[完了]ボタンをクリックします。
[OK]ボタンをクリックします。
すべてのコントロールのプロパティを設定したあと、フォームをプレビューして、エディットコントロールにSQL Serverのデータが表示されれば、データベースと正しく連携できていることが確認できます。
プロパティの設定方法は、利用するデータベースやADOの種類により異なります。詳細は、各データベースおよびADOのマニュアルを参照してください。
コントロールの手続きを記述する
ADOデータソースコントロールを使って連携しているデータベースの、カレントレコードを変更することにより、エディットコントロールに表示される文字列を変更します。
カレントレコードの変更は、以下のイベント手続きに記述します。
イベント | 説明 |
---|---|
CmCommand1-Click | カレントレコードの位置を先頭に移動します。 |
CmCommand2-Click | カレントレコードの位置を次のレコードに移動します。 |
ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. PROCEDURE DIVISION. * カレントレコードの位置を先頭に移動します。 INVOKE "Recordset" OF CmADODataSource1 "MoveFirst"
ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. PROCEDURE DIVISION. * カレントレコードの位置を次のレコードに移動します。 INVOKE "Recordset" OF CmADODataSource1 "MoveNext"
ポイント
"MoveFirst"および"MoveNext"は、ADOの"Recordset"オブジェクトのメソッドです。その他にも、"Recordset"オブジェクトのメソッドやプロパティを利用して、レコードに対する操作ができます。
たとえば、カレントレコードのフィールド"GOODS"の値を参照する場合は、以下のような手続きを記述します。
MOVE "Value" OF "Item"("GOODS") OF "Fields" OF "Recordset" OF CmADODataSource1 TO WK-PRODUCT-NAME
また、フィールド"QOH"の値を更新する場合は、以下のような手続きを記述します。
MOVE 1000 TO "Value" OF "Item"("QOH") OF "Fields" OF "Recordset" OF CmADODataSource1 INVOKE "Recordset" OF CmADODataSource1 "Update"
さらに、新規にレコードを追加する場合は、以下のような手続きを記述します。
INVOKE "Recordset" OF CmADODataSource1 "AddNew" MOVE WK-GNO TO "Value" OF "Item"("GNO") OF "Fields" OF "Recordset" OF CmADODataSource1 MOVE WK-GOODS TO "Value" OF "Item"("GOODS") OF "Fields" OF "Recordset" OF CmADODataSource1 MOVE WK-QOH TO "Value" OF "Item"("QOH") OF "Fields" OF "Recordset" OF CmADODataSource1 MOVE WK-WHNO TO "Value" OF "Item"("WHNO") OF "Fields" OF "Recordset" OF CmADODataSource1 INVOKE "Recordset" OF CmADODataSource1 "Update"