• 検索結果がありません。

チャレンジ!FireDAC接続!

N/A
N/A
Protected

Academic year: 2021

シェア "チャレンジ!FireDAC接続!"

Copied!
67
0
0

読み込み中.... (全文を見る)

全文

(1)

【セッションNo.3】

Delphi/400技術セッション

チャレンジ!FireDAC接続!

株式会社ミガロ.

RAD事業部 営業・営業推進課

尾崎 浩司

(2)

【アジェンダ】

1.

Delphi/400 データアクセス手法の変遷

2.

FireDAC 開発入門

3.

FireDAC 実践プログラミングテクニック

4.

従来のデータベースエンジンからの移行

5.

まとめ

(3)
(4)

Delphi/400 データアクセス手法の変遷

Delphi 5 Delphi 2009

Delphi XE3 Delphi 6

Delphi XE5 Delphi 10 Delphi 7 Delphi 2007 32ビット Windows 64ビット Windows Shift-JIS Unicode マルチデバイス開発(FireMonkey) Windows10対応 BDE接続 BDE接続(後方互換) Delphi XE7 BDE接続(オプション) dbExpress接続 FireDAC接続 ネイティブ接続

Delphi/400の進化とIBM i データアクセス手法の遷移

• ネイティブ接続(Call400, Cmd400等) は、すべてのバージョンで使用可能。 • BDE接続は、Ver.7にて更新終了し、以降は後方互換の為搭載。 • dbExpress接続は、Ver.6よりBDE後継として登場。現在もサポート。

• XE3で登場したFireDACは、10 Seattleより IBM i 用ドライバが登場。

Delphi/400の進化

(5)

データベースエンジン

BDE接続

(Borland Database Engine)

• TTable/TQueryは双方向データセットの為、複数レコードを一括表示するような コンポーネント(DBGrid等)を直接関連付けることが可能。 • IBM i 用SQL-Linkドライバ(IDCO400)は、V7R3対応版を提供。 • 利用者の端末にアプリケーションとは別にBDEミドルウェアのインストールが必須。 (Delphi/400運用版とは、別にセットアップをしなければならない) • Delphi/400 Ver.7までの正式サポートの為、現在は後方互換として使用可能。 TDBEdit TDBGrid

(6)

データベースエンジン

dbExpress接続

• TSQLTable/TSQLQueryは単方向データセットの為、カレントレコードの情報しか 保持しておらず、データをキャッシュ(保持)しないので、複数レコードを一括表示 するようなコンポーネントは、直接関連付けることができない。 → データキャッシュの為、TDataSetProvider – TClientDataSet を組合せて使用。 • IBM i 用 CO400Connectionドライバは、V7R3対応版を提供。 • BDEと異なり、データベースエンジンミドルウェアの事前インストールは不要。 (Delphi/400運用版のみ導入すれば実行可能。) TDBEdit TDBGrid

(7)

データベースエンジン

FireDAC接続

• BDEに似たアーキテクチャのデータベースエンジンとして登場。 → Fireとつくが、FireMonkey専用ではなく VCLでも使用可能。 • TFDTable/TFDQueryは双方向データセットの為、BDE同様に複数レコードを一括 表示するようなコンポーネント(DBGrid等)を直接関連付けることが可能。 • IBM i 用 FDCO400ドライバーは、V7R3対応版を提供。 • BDEと異なり、データベースエンジンミドルウェアの事前インストールは不要。 (Delphi/400運用版のみ導入すれば実行可能) TDBEdit TDBGrid

(8)

第19回 Delphi/400 テクニカルセミナー

3-

今回のポイント

新データベースエンジンFireDAC に関する3つのトピックスをご紹介!

FireDAC 開発入門

• FireDACアプリケーションの作成手順 • FireDACコンポーネントの使用方法 • データセットの操作方法 • 2つのデータ更新方法

FireDAC 実践プログラミングテクニック

• データマッピングルールによるフィールド型定義 • FireDACモニタによる監視 • データのフェッチによるレスポンス最適化 • 配列DMLによる効率的なデータ登録 • FireDACでのファイルメンバーの使用方法

従来のデータベースエンジンからの移行

• BDEからFireDACへの移行 • dbExpressからFireDACへの移行 • 移行手順 • 移行ツールを使った効率的な移行作業

(9)

2.FireDAC 開発入門

• FireDACアプリケーションの作成手順

• FireDACコンポーネントの使用方法

• データセットの操作方法

(10)

簡単なFireDACアプリ作成

完成イメージ

D400PA00 (音楽CDマスター) IBM i クライアントPC [Active]ボタンクリック毎に ファイルがオープン/クローズする。

(11)

簡単なFireDACアプリ作成

作成手順1

• フォーム上にFireDAC固有の2つのコンポーネントを貼り付け

TFDGUIxWaitCursor (FireDAC UIカテゴリ)

• FireDACでデータベースアクセスする際の待機

カーソルを制御。

TFDPhysXXDriverLink (FireDAC Linksカテゴリ)

• FireDACで使用するドライバーの種類を選択 • IBM i の場合、TFDPhysCO400DriverLinkを使用。 ScreenCursorプロパティ 待機時のカーソル種類を指定。 Providerプロパティ Forms : VCLフォームアプリ FMX: FireMonkeyアプリ Console: コンソールアプリ FireDAC Linkカテゴリ 使用するDBのドライバーを 選択する。

(12)

簡単なFireDACアプリ作成

作成手順2

• フォーム上にデータベースコンポーネントを貼り付けて、関連付けを行う。 • TFDConnection (FireDACカテゴリ) • データベースへの接続情報を定義。 • TFDTable (FireDACカテゴリ) • アクセスするファイル(テーブル)を定義。 • TDataSource (DataAccessカテゴリ) TDBGrid (DataControlsカテゴリ) DataSourceプロパティ 接続するDataSourceを 指定。 DBGrid1 DataSetプロパティ DB対応コンポーネントに 関連付けるDataSetを指定。 Conncetionプロパティ 接続先のFDConnectionコンポーネント を指定。 ※FDConnection1を配置してから、 FDTableを配置した場合、初期値が 自動設定される。

(13)

簡単なFireDACアプリ作成

作成手順3

• FDConnection1にホストへ接続する為の定義を行う。 • ダブルクリック(あるいは、右クリック→接続エディタ) • FireDAC接続エディタ上で接続パラメータを定義する。 • LoginPromptプロパティ • FireDACデフォルトのログオン画面を表示しない場合Falseにする。 ドライバID ドライバIDを指定。 (IBM i の場合、CO400) パラメータ DataBase: Configration 接続名 User_Name:ユーザー Password: パスワード パラメータ ODBCAdvanced:接続オプション (ライブラリ名を指定する場合、 LibraryOption=[ライブラリ] )

(14)

簡単なFireDACアプリ作成

作成手順4

• FDTable1にアクセスするファイル(テーブル) の定義を行う。 • TableNameプロパティ • ファイル名(テーブル)を指定する。

作成手順5

• イベント(処理)を定義する。 • FormのOnCreate • Button1のOnClick Buttom1 frmMain

(15)

FDコンポーネント

TFDConnection

• データベース接続やトランザクション管理を行う。 • 主なプロパティ • コンポーネントをダブルクリックすると [FireDAC接続エディタ]が起動。 プロパティ 機能 Connected データベースへの接続を行う(True/False)。 LoginDialog TFDGUIxLoginDialogコンポーネントを関連づけることで、独自の ログオン画面を表示。 LoginPrompt FireDACログオン画面を表示するかどうか?Falseの場合、暗黙ログオン。 Params データベース接続パラメータ。通常はFireDAC接続エディタで設定。 FormatOptions データのマッピングを定義。通常はFireDAC接続エディタで設定。 UpdateOptions 更新処理の制御を行う。

(16)

FDコンポーネント

TFDConnection

• FireDAC接続エディタ • 指定したドライバID毎に接続に必要なパラメータが一覧表示される。 • よく使用する設定を接続エリアスとして、IDEのデータエクプローラに登録して おくと、[接続定義名]より選択することも可能。 • CO400ドライバに必要な設定パラメータ パラメータ 機能 DataBase Configrationの接続名を指定。 User_Name サインオンユーザーを指定。 Password サインオンパスワードを指定。 MonitorBy FireDAC監視機能の設定。 ODBCAdvanced 接続オプションを設定。 (オプションを複数指定の場合、; で区切る) ・LibraryOption=[ライブラリ名] ライブラリ名の指定 ・BUFFERCOUNT=[バッファ数] 一度に読み込むデータ量 (20~100) ・Commitment=[トランザクションレベル] トランザクション指定 (*NONE,*CHG,*CS,*ALL ) ・Namingconvention=[区切文字] SQLにおける区切文字の基準を指定 ( . or / ) ※ 未指定の場合は /

(17)

FDコンポーネント

TFDConnection

• 接続処理 • Paramsプロパティにより、ソースコードでパラメータを指定可能。 • ソースコード例 ソースコードで、接続パラメータを指定可能。

(18)

FDコンポーネント

TFDConnection

• トランザクション処理 • 更新対象のファイルがジャーナル対象になっていることが条件。 • ODBCAdvancedパラメータにCommitment=*CHG, *CS, *ALL いづれか指定。 • StartTransactionメソッドでトランザクションを開始し、Commitメソッドで変更 を確定(コミット)あるいは、RollBackメソッドで破棄(ロールバック)する。 • トランザクション実行中かどうかは、InTransactionプロパティで判定する。 • ソースコード例

(19)

FDコンポーネント

TFDTable

• 指定したファイル(テーブル)へのアクセスを行う。 • 主なプロパティ

TFDQuery

• 抽出SQL文(SELECT)でのデータアクセス、更新SQL文でのデータ更新を行う。 プロパティ 機能

Active データセットを開く/閉じる。(True/False) (Open/Closeも可) Connection 接続先のFDConnectionを指定。 (同じユニット内にFDConnectionがある場合、自動セット。) TableName ファイル(テーブル)名を指定。 ・LibraryOptionでライブラリ指定されている場合、リストから選択可能。 ・ファイル名のみでもよい。(ライブラリリストに基づき実行) ・プロパティにライブラリ名を記述する場合、”D4TEC19LIB.D400PA00” のようにライブラリ名とファイル名の間は、”.”で定義。(”/”は使用不可) プロパティ 機能

Active 抽出SQLを開く/閉じる。(True/False) (Open/Closeも可) SQL SQL文を記述

・SQL文は、ファイル名のみでもよい。(ライブラリリストに基づき実行) ・ライブラリ名を記述する場合、”D4TEC19LIB/D400PA00”

(20)

データセット(TDataSet)

• TFDTableやTFDQueryでアクセスするデータの集合体。 • データセットの考え方は、BDEと同じ。 • データセットには、現在の行(カレントレコード)があり、フィールドへの アクセス操作はカレントレコードに対して行う。 • フィールドへのアクセスは、FieldByNameメソッドを使用する。 フィールドの属性にあわせたキャスト(型変換)を行う。 (As~)

データセットの操作

データセット カレントレコード

(21)

データセットの操作

データセットの移動

• ソースコード例 • 先頭レコードから最終 レコードまで順番に読込む。 メソッド/プロパティ 機能 First カレントレコードを先頭へ移動。 Prior カレントレコードを1つ前へ移動。 Next カレントレコードを1つ後ろへ移動。 Last カレントレコードを最終へ移動。 MoveBy 引数に指定したレコード数前後に移動。 Bof カレントレコードが先頭になった場合True。 Eof カレントレコードが最終になった場合True。 DBNavigator データセット操作用部品

(22)

データセットの操作

データセットの検索

メソッド 機能 Locate 指定したフィールドの値が合致するレコードへ 移動。 対象データがない場合、Falseとなる。

データセットの絞り込み

プロパティ 機能 Filter 絞り込み(フィルタ)条件を文字列で指定。 Filtered フィルタの有効/無効。 (True時有効)

(23)

データの更新

2つの更新方法

更新SQLを使用したデータの更新 • 直接データ更新 / 一括データ更新 • データセットを使用したデータの更新 • SELECTで選択したデータセットを使用して更新 • QTEMP等のワークファイルのデータセットを使用して更新 直接データベースに更新条件を指示 IBM i クライアントPC トランザクション (TRN) データセット UPDATE TRN SET FLD = ‘1’ WHERE KEY = 1 TableName= QTEMP.WKFILE RPG ワークファイル (QTEMP/WKFILE) データセット SELECT * FROM TRN WHERE KEY = 1 データセットの変更を反映 ワークファイル全レコードを取得 追加・編集・削除 追加・編集・削除 CALL RPGPGM 更新SQL使用 データセット使用

(24)

データの更新

更新SQLを使用したデータの更新

• TFDQueryを使用する。 • SQLプロパティに更新SQLを記述する。 →コンポーネントをダブルクリックして、FireDAC クエリーエディタを使用することも可能。 • TFDQueryのExecSQLメソッドで更新が実行。 • パラメータクエリーも使用可能。 → SQL文中に :[変数名] で定義 → ParamByNameメソッドで変数に値をセット。 (パラメータの属性に合わせてキャスト) 更新SQL パラメータ パラメータへ値をセットする。

(25)

3-

データの更新

データセットを使用したデータの更新

• データセットを更新可能なモードに設定する。 • TFDConnectionのUpdateOptionsプロパティ → 個々のTFDQueryやTFDTableでも UpdateOptionsプロパティで設定可能。 → TFDConnectionで設定をしておくと、 各TFDQueryやTFDTableに自動反映 される。 • FDCO400ドライバーの場合、次のとおり 設定を行う。 CheckReadOnly :False CheckRequired :False CheckUpdatable :False LockWait :True RefreshMode :rmManual UpdateMode :upWhereChanged UpdateNonBaseFields :True UpdateOptionsプロパティ 展開してサブプロパティを変更。

(26)

データの更新

データセットを使用したデータの更新

• 開いているデータセットに対して操作を行う。 • カレントレコードに対して、メソッドを実行。 メソッド 機能 Append データセットに新規レコードを作成し、挿入状態とする。 Edit カレントレコードを編集状態とする。 Post データセットに変更を登録して、参照状態に戻る。 Cancel データセットの変更を破棄して、参照状態に戻る。 Delete カレントレコードを削除する。

(27)

データの更新

データセットを使用したデータの更新

• 通常は、データセットに対し、Postした時点で即時データベースに反映される。 • CachedUpdates プロパティをTrue にすると 遅延更新が可能になる。 Post時点では、データセットのみが変更され、ApplyUpdatesメソッド実行時に 追加/変更/削除されたデータセットの変更が一度に反映される。 メソッド 機能 ApplyUpdates データセットの変更内容をすべてデータベースに反映する。 引数は、許容される更新エラー数 CancelUpdates データセットの変更内容をすべて破棄する。 データセット Post (クライアント上のみ反映) IBM i ApplyUpdates(変更箇所が反映) DB クライアントPC

(28)

3.FireDAC 実践プログラミングテクニック

データマッピングルールによるフィールド型定義

FireDACモニタによる監視

データのフェッチによるレスポンス最適化

配列DMLによる効率的なデータ登録

FireDACでのファイルメンバーの使用方法

(29)

データマッピングルール

データセット 項目コンポーネント

• TFDTable/TFDQuery に定義されたデータセットより作成可能なフィールド単位の コンポーネント。 • TField型を起点としたフィールドの属性にあわせた項目コンポーネントが作成される。 • フィールド単位の表示や入力の制御が可能。 DisplayLabel DBGrid等に表示する列タイトルを指定。

(30)

データマッピングルール

データセット 項目コンポーネント

• 項目コンポーネントは、BDE接続/dbExpress接続のデータセットでも使用される。

• FireDAC接続の場合、数値項目のデータ属性がこれまでと異なっている。

(整数項目) BDE/dbExpress: TIntegerField, TSmallintField

FireDAC: TBCDField (2進化10進数項目)

(小数項目) BDE/dbExpress: TFloatField

(31)

データマッピングルール

データマッピングルールの設定

• FireDACには、データ型のマッピング(変換)を行う仕組みが用意されている。 • TFDConncectionコンポーネントのFormatOptionsプロパティにて設定可能。 → 通常は、 [FireDAC接続エディタ]上で設定する。 • 設定例 形式オプション FormatOptionsプロパティに相当 データマッピングルール SourceDataType : 変換前のデータ型 TargetDataType : 変換後のデータ型 PrecMin : 最小桁数 PrecMax : 最大桁数 ※BDEの場合、通常TSmallIntは使用されない為 (0-9)桁をdtInt32(Integer)として定義する。 【設定後に項目を作成】

(32)

FireDACモニタ

• FireDACには、FireDACとデータベースとの間で実行しているSQLコマンドや処理 件数等をロギングする仕組みが用意されている。 • アプリケーションに組み込めば、障害発生時等にどのようなSQL処理が行われたかを 確認することができる。

FireDACモニタ

想定通りの結果がでない⁉ IBM i ログファイルを見れば どんなSQLが実行されたか 確認可能!

(33)

FireDACモニタ

TFDMoni

XX

ClientLinkコンポーネント

• FireDACのログ情報を出力するためのコンポーネント。 • FDConnectionコンポーネントと同じユニットに配置。 • 配置したコンポーネントにあわせて、FDConnecition のMoniterByパラメータを定義。 種類 機能 TFDMoniFlatFileClientLink 指定したログファイルにFireDAC ログ情報を出力。 TFDMoniCustomClientLink イベントを使用して独自のログ出力 を実装。 TFDMoniRemoteClientLink FireDACモニターにログ情報を出力。 MonitorByパラメータ

FlatFile / Custom / Remote より 選択する。

(34)

FireDACモニタ

TFDMoni

XX

ClientLinkコンポーネント

• ログ出力を行う場合、Tracingプロパティ=Trueを指定。 • 常にログ出力を行うと、大量のログファイルが生成され、 レスポンスにも影響の可能性があるため、トラブル発生時 のみモードを切り替えれば効果的。 • ソースコード例 デバッグ用 アプリケーションのショートカット 実行時引数 /DEBUG オプションを付けた ショートカットを作成。

(35)

TFDMoniFlatFlieClientLinkコンポーネント

• 任意のログファイルにログを出力。

FireDACモニタ

プロパティ 機能 FileName ログファイル名をフルパスで指定。 デフォルト:C:¥Users¥<LoginName>¥AppData¥Local¥Temp¥Trace1.txt FileEncoding ログファイル出力形式。 (ecUTF8) FileAppend ログファイルに追記するかどうか?(False:新しいファイル作成) ShowTraces ログトレースをしている場合にメッセージを表示する。 (False) FDQueryを実行 ログファイルが生成。 実行されたSQLが出力。

(36)

TFDMoniRemoteClientLinkコンポーネント

• FireDACモニタ(FDMonitor.exe)にログを出力。 • IDEの[ツール]→[FireDACモニタ]で起動可能。 • ローカルだけでなく、リモート監視もできる。

FireDACモニタ

プロパティ 機能 Host FireDACモニタの稼働端末のIPアドレスを指定。 デフォルト:127.0.0.1 FDQueryを実行 リアルタイムなログ確認が可能。 コンポーネント毎の状況も把握できる。

(37)

データのフェッチ

• データベースから値を取得して、クライアントのデータセットに保持することを フェッチという。 • 一般的に大量のデータをフェッチしようとすると、Openに時間がかかる。 • FireDACで、1,000件のデータと、500,000件のデータの開く時間を比較。 → 処理時間が変わらない!

データのフェッチ

IBM i 得意先マスタ (MTOKUP) 売上ファイル (FURDTP) 500,000件 1,000件 データセット データセット FDQuery1 FDQuery2 FDQuery1を実行 FDQuery2を実行 平均Open 時間:317ms 平均Open 時間:307ms

件数にかかわらず高速にオープンできるのはなぜか?

(38)

オンデマンドなフェッチ

• FireDACでは、データセットを作成する際、一度に全レコードをフェッチするのでは なく、予め設定された件数までフェッチし、その後フェッチされたカレントレコード のカーソル位置にあわせて、必要になったときに都度、次のデータを取得する。 • 初期設定では、50件ずつレコードがフェッチされる。

データのフェッチ

カレントレコードが50行目。 スクロールバーが最下部に きている。 次の行へ移動 次の50件が読み込まれ、 スクロールバーが中央に移動。

(39)

FetchOptionsプロパティ

• FDConnectionのFetchOptions.RowSetSizeに全体の フェッチ件数が指定可能。 • FDTable、FDQuery単位でも個別に上書き指定できる。 → 実行するSQLやテーブルにあわせて、フェッチする件数を 調整することで、よりパフォーマンスの向上が可能。 • IBM i 用のFDCO400ドライバでは、さらに一度に 読込むバッファ数を調整可能。(BEFFERCOUNT)

データのフェッチ

ODBCAdvancedパラメータに BUFFERCOUNT=[バッファ数] の指定が可能。(20~100) データセット RowSetSize 一度にデータを フェッチして 保持する件数。 BUFFERCOUNT 一回当たりの読取り バッファサイズ。

(40)

配列DML

更新SQLを使用したデータの大量登録

• 更新SQLを使用して、1つのワークファイルに大量のレコードを登録するような場合、 通常パラメータクエリーを使用することが多い。 • IBM i に対して、同じSQL文を何度も実行することになる。 パラメータをもつSQL文。 (INSERT) 1件ずつパラメータに値をセット しながら、SQL(INSERT)を実行。

(41)

配列DML

配列DML

• パラメータ配列を作成することで、 1回のSQL実行で複数登録を可能に する仕組み。 • 通信回数を減らすことができ、処理 効率化が可能。 (DBサーバー側で配列DMLをサポートしているもの(SQLServer, Oracle等)であれば、さらに 効率があがり処理速度の向上が期待できる。) プロパティ/メソッド 機能 Params.ArraySize パラメータの配列要素数を指定。 Execute 配列DMLの実行。 パラメータの配列要素数を指定。 SQLを一括実行する。 パラメータ配列の 各要素に値をセット。 型キャストメソッドに複数形の”s”がつく。

(42)

ファイルメンバー処理

ファイルメンバー処理

• IBM i 独自の考え方。一つの物理ファイルに対して複数のメンバーを指定できる。 • ジョブ(セッション)毎に同じファイルに異なる内容がセットできる。 (ワークファイル等の目的に多用)

BDEの場合

• TTableコンポーネントのTableNameプロパティに 直接メンバー指定が可能。 ワークファイル (WTEC19P) メンバー (M168001121) メンバー (WTEC19P) ファイルレイアウトは共通 データはメンバー 単位に独立して保持

FireDACの場合

• TFDTableコンポーネントのTableNameプロパティに メンバー指定ができない。

(43)

ファイルメンバー処理

ネイティブ接続との併用

• Delphi/400では、データベースエンジン以外にネイティブ接続が利用できるが、 データベースエンジンと、ネイティブ接続は同時使用が可能。 • デフォルト設定の場合、2つの接続は同一ジョブとなる。 • FDTableでファイルをオープンする前に OVRDBFコマンドでファイル名を一時変更し FDTableでファイルをクローズした後に、DLTOVRコマンドで一時変更を削除する。 OVRDBF FILE(WTEC19P) TOFILE(WTEC19P) MBR(M168001121) OVRSCOPE(*JOB)

RemoteCmd メソッド

DLTOVR FILE(WTEC19P) LVL(*JOB)

RemoteCmd メソッド オープン クローズ 指定した メンバーにアクセス

(44)

ファイルメンバー処理

実装例

(OVRDBF, DLTOVR実行部)

宣言部 実装部 RemoteCmdメソッド CLコマンドを実行。

(45)

ファイルメンバー処理

実装例

(TFDTableイベント)

AfterCloseイベント テーブルを閉じた後に 発生するイベント。 BeforeOpenイベント テーブルを開く前に 発生するイベント。

実行例

テーブルをオープンする だけで、指定したメンバー にアクセスできる。 Button1 Edit1.Text:メンバー名

(46)

ファイルメンバー処理

Multiple Channel設定

• Configrationの [Multiple Channel]をONにすると、全ての接続が異なるジョブとして

実行される。 • WebアプリやDataSnapアプリの場合、複数クライアントからアクセスされる為、 ジョブを分けないといけない。 • ネイティブ接続とFireDAC接続とでジョブが分かれるため、TAS400コンポーネントで 発行したコマンドが、TFDTableでのアクセスに反映されない。 Multiple Channel 接続ごとにジョブを分割。 Delphi/400 アプリ ネイティブ接続と FireDACとでジョブが 異なる。

FireDACのみでファイルメンバーを扱うことはできないか?

Configration 活動ジョブの処理(WRKACTJOB)

(47)

ファイルメンバー処理

FireDACのみで実現するメンバー処理

SQLベースで実行できる CREATE ALIAS / DROP ALIAS でメンバーに対して

別名を作成。

• 作成した別名を TableNameプロパティに設定すればよい。

• FDQueryを別途配置しなくても、FDConnection で直接SQLが実行可能。(ExecSQL)

※OVRDBFと異なり、CREATE ALIASは別名で実体を作成する為、複数端末から同じメンバー名のエリアスを 作成しようとすると、エラーになるので注意。

CREATE ALIAS WTEC19P_M168001121

FOR WTEC19P(M168001121)

DROP ALIAS WTEC19P_M168001121

エリアス(別名)作成

エリアス(別名)削除

(48)

ファイルメンバー処理

実装例

(CREATE ALIAS, DROP ALIAS実行部)

宣言部 実装部 ExecSQLメソッド SQLを実行。 エリアス名を返却。 (ファイル名_メンバー名) ファイル名を返却。 (エリアス名の左部分)

(49)

ファイルメンバー処理

実装例

(TFDTableイベント)

TableNameプロパティに 元のファイル名をセット。 TableNameプロパティに エリアス名をセット。

実行例

FireDAC接続のみで、 メンバーにアクセスできる。 Button1

(50)

4.従来のデータベースエンジンからの移行

BDEからFireDACへの移行

dbExpressからFireDACへの移行

移行手順

(51)

従来のデータベースエンジンからの移行

BDEからFireDACへの移行

• FireDACは、BDE同様双方向データセットの為、コンポーネントの置き換えで移行可能。 • [DataAccess]カテゴリ、[DataControls]カテゴリは同じものを使用可能。 TDBEdit TDBGrid [BDE]カテゴリ [DataAccess]カテゴリ [DataControls]カテゴリ [FireDAC]カテゴリ

(52)

従来のデータベースエンジンからの移行

dbExpressからFireDACへの移行

• dbExpressは単方向データセットの為、通常TClientDataSet(ローカルキャッシュ)と 併用して利用。 • FireDACでも、TClientDataSetはそのまま使用できる為、コンポーネントの置き換え で移行可能。 • 。 TDBEdit TDBGrid [dbExpress]カテゴリ [DataAccess]カテゴリ [DataControls]カテゴリ

(53)

従来のデータベースエンジンからの移行

BDE自体の開発・保守が既に終了済

• 動作保証は、WindowsXPまで。 → Windows Vista以降でも稼働はさせられるが、動作保証なくPTFも提供されない。 → UACの考慮がない。(Cドライブ直下への書込みが発生することがある。) → BDE初期化エラー等が発生する場合がある。 • 32bitのみで、UNICODEに非対応。 → IBM i での利用においても、CCSID=1399(JP-4)の文字が一部使用できない。 • VCL専用でFireMonkeyでは使用できない。 → マルチデバイスアプリ開発に対応できない。 → 3層アプリ作成時に使用するDataSnapでも使用不可。

BDEアプリは、FireDACに移行することで 上記課題を解決可能!

(54)

従来のデータベースエンジンからの移行

移行手順

従来のデータベースエンジンコンポーネントより、FireDACコンポーネントを追加。

FireDAC固有コンポーネント(カーソル、ドライバー)の追加。

FDConnection ドライバ、接続パラメータ、マッピングルール等の指定。

従来のデータベースエンジンコンポーネントのプロパティやイベントを移行。

従来のデータベースエンジンコンポーネントを削除。

従来のデータべースエンジン固有のソースコードを修正。

(55)

従来のデータベースエンジンからの移行

移行手順の具体例

ミガロ.テクニカルレポート No.9 2016年秋 『新データベースエンジンFireDACを使ってみよう!』 にて、BDE、dbExpressからFireDACへの具体的な 移行手順を紹介! FireDAC関連の コンポーネントを追加。 FireDACアプリの完成。

(56)

従来のデータベースエンジンからの移行

実際の移行作業時の懸念点

大量のデータベース関連コンポーネントの置き換えが発生 • コード修正量を減らすには、元のコンポーネントと同じ名前にしたほうが良い。 → いったん元のコンポーネントをリネームして、新しいコンポーネントを貼り付け て、元の名前を付与したうえで、元のコンポーネントを削除する必要がある。 • usesリストの修正が必要 • FireDAC関連のusesリストは、FireDACコンポーネントの配置で自動的にセット されるが、元のデータベースエンジンのusesリストは、コンポーネントを削除しても クリアされない。 → 手でリストを修正しなければいけない。 FireDAC関連のユニットは コンポーネント配置で 自動的に追加される。 BDE関連のユニットは、 コンポーネント削除後に 手で削除しなければいけない。

(57)

従来のデータベースエンジンからの移行

移行ツールの活用

reFind (テキスト置換ユーティリティ) • 変換ルールの定義のもとづき、テキストを 一括置換できるツール。 • Delphi/400 10 Seattle に標準で付属。 C:¥Program Files¥Embarcadero¥Studio¥17.0¥bin¥reFind.exe • 変換ルールをテキストファイルで作成可能。 詳細は、エンバカデロDocWikiに記載。 http://docwiki.embarcadero.com/RADStudio/Seattle/ja/Refind • Delphiのソースファイル(*.pas) 及び フォームファイル(*.dfm/*.fmx)は、 テキスト形式で保管されている為、テキスト一括置換でコンポーネントの置き換えが できる。 • BDE、dbExpress 関連のそれぞれの文字列をFireDAC関連の文字列に置換する変換 ルールファイルも用意されているので、reFindは、容易に使用可能。 BDE → FireFAC C:¥Users¥Public¥Documents¥Embarcadero¥Studio¥17.0¥Samples¥Object Pascal ¥Database¥FireDAC¥Tool¥reFind¥BDE2FDMigration¥FireDAC_Migrate_BDE.txt dbExpress → FireDAC C:¥Users¥Public¥Documents¥Embarcadero¥Studio¥17.0¥Samples¥Object Pascal ¥Database¥FireDAC¥Tool¥reFind¥DBX2FDMigration¥FireDAC_Migrate_DBX.txt

(58)

BDEからFireDACへの移行デモ

サンプルプログラム

• ネイティブ接続(Call400)でRPGをCALLして、ワークファイルを作成。 • 処理結果のワークファイルをBDE接続で取得して、DBGridに出力。 BDEコンポーネント ネイティブ

(59)

BDEからFireDACへの移行デモ

サンプルプログラム

• プログラムソース FormのOnCreateイベント CL(RPG)をCALL。 BDE Tableをオープン。 ネイティブ、BDEの 接続パラメータ指定。 ライブラリリスト の追加。 Button1のOnClickイベント

(60)

BDEからFireDACへの移行デモ

reFindによる変換

• コマンドプロンプト上でreFindを実行する • カレンドディレクトリをソースフォルダに移動する。 cd [ソースフォルダ] • reFindツールを実行する。 reFind.exe [変換対象ファイル名] /X:[変換ルールファイル名]

"C:¥Program Files¥Embarcadero¥Studio¥17.0¥bin¥reFind.exe" *.pas *.dfm *.fmx /X:"C:¥Users¥Public¥Documents¥Embarcadero¥Studio¥17.0¥Samples¥Object Pascal¥Database¥FireDAC¥Tool¥reFind¥BDE2FDMigration¥FireDAC_Migrate_BDE.txt" カレントディレクトリを 移動する。 reFindを実行する。 処理結果が出力される。

(61)

BDEからFireDACへの移行デモ

プロジェクトを開く

• FireDACコンポーネントに置換 • 全てのBDEコンポーネントがFireDACコンポーネントに変換される。 • uses のBDE関連エントリーもすべてクリアされる。 FireDACコンポーネントに 変換されている!

(62)

BDEからFireDACへの移行デモ

FireDAC関連の追加作業

• FireDAC固有コンポーネントの追加 • TFDGUIxWaitCursor (カーソル制御) • TFDPhysCO400DriverLink(ドライバー) • TFDConncectionの個別設定追加 • ドライバIDの指定。 • パラメータの追加。 • データマッピングルールの追加。 FireDACコンポーネントの追加 ドライバIDの指定 パラメータの追加 データマッピング ルールの追加 数値項目をBDEと 同じデータ型に変換

(63)

BDEからFireDACへの移行デモ

FireDAC関連の追加作業

• TFDConncectionに関するプログラムの修正 • パラメータの違いに起因する箇所を修正する。 FireDACの接続パラメータにあわせて Paramsプロパティのセット項目を 修正。

(64)

BDEからFireDACへの移行デモ

移行完了

(65)
(66)

まとめ

FireDAC 開発入門

TFDConncetion / TFDTable / TFDQuery の使用方法

データセットの操作方法や、頻出プログラムパターンの紹介

SQLとデータセットを使用した2つの更新方法

FireDAC 実践プログラミングテクニック

データマッピングルールによるフィールド型定義

FireDACモニタによる監視

データのフェッチによるレスポンス最適化

配列DMLによる効率的なデータ登録

FireDACでのファイルメンバーの使用方法

従来のデータベースエンジンからの移行

BDEやdbExpressからFireDACへの移行手順

移行ツールを使った効率的な移行作業

(67)

参照

関連したドキュメント

日臨技認定センターの認定は 5 年毎に登録更新が必要で、更新手続きは有効期間の最終

その後、時計の MODE ボタン(C)を約 2 秒間 押し続けて時刻モードにしてから、時計の CONNECT ボタン(D)を約 2 秒間押し続けて

② 特別な接種体制を確保した場合(通常診療とは別に、接種のための

パスワード 設定変更時にパスワードを要求するよう設定する 設定なし 電波時計 電波受信ユニットを取り外したときの動作を設定する 通常

Q-Flash Plus では、システムの電源が切れているとき(S5シャットダウン状態)に BIOS を更新する ことができます。最新の BIOS を USB

紀陽インターネット FB へのログイン時の認証方式としてご導入いただいている「電子証明書」の新規

技術士のCPD 活動の実績に関しては、これまでもAPEC

キャンパスの軸線とな るよう設計した。時計台 は永きにわたり図書館 として使 用され、学 生 の勉学の場となってい たが、9 7 年の新 大