【セッションNo.3】
Delphi/400技術セッション
チャレンジ!FireDAC接続!
株式会社ミガロ.
RAD事業部 営業・営業推進課
尾崎 浩司
【アジェンダ】
1.
Delphi/400 データアクセス手法の変遷
2.
FireDAC 開発入門
3.
FireDAC 実践プログラミングテクニック
4.
従来のデータベースエンジンからの移行
5.
まとめ
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の進化
データベースエンジン
•
BDE接続
(Borland Database Engine)
• TTable/TQueryは双方向データセットの為、複数レコードを一括表示するような コンポーネント(DBGrid等)を直接関連付けることが可能。 • IBM i 用SQL-Linkドライバ(IDCO400)は、V7R3対応版を提供。 • 利用者の端末にアプリケーションとは別にBDEミドルウェアのインストールが必須。 (Delphi/400運用版とは、別にセットアップをしなければならない) • Delphi/400 Ver.7までの正式サポートの為、現在は後方互換として使用可能。 TDBEdit TDBGrid
データベースエンジン
•
dbExpress接続
• TSQLTable/TSQLQueryは単方向データセットの為、カレントレコードの情報しか 保持しておらず、データをキャッシュ(保持)しないので、複数レコードを一括表示 するようなコンポーネントは、直接関連付けることができない。 → データキャッシュの為、TDataSetProvider – TClientDataSet を組合せて使用。 • IBM i 用 CO400Connectionドライバは、V7R3対応版を提供。 • BDEと異なり、データベースエンジンミドルウェアの事前インストールは不要。 (Delphi/400運用版のみ導入すれば実行可能。) TDBEdit TDBGrid
データベースエンジン
•
FireDAC接続
• BDEに似たアーキテクチャのデータベースエンジンとして登場。 → Fireとつくが、FireMonkey専用ではなく VCLでも使用可能。 • TFDTable/TFDQueryは双方向データセットの為、BDE同様に複数レコードを一括 表示するようなコンポーネント(DBGrid等)を直接関連付けることが可能。 • IBM i 用 FDCO400ドライバーは、V7R3対応版を提供。 • BDEと異なり、データベースエンジンミドルウェアの事前インストールは不要。 (Delphi/400運用版のみ導入すれば実行可能) TDBEdit TDBGrid第19回 Delphi/400 テクニカルセミナー
3-
今回のポイント
•
新データベースエンジンFireDAC に関する3つのトピックスをご紹介!
•
FireDAC 開発入門
• FireDACアプリケーションの作成手順 • FireDACコンポーネントの使用方法 • データセットの操作方法 • 2つのデータ更新方法•
FireDAC 実践プログラミングテクニック
• データマッピングルールによるフィールド型定義 • FireDACモニタによる監視 • データのフェッチによるレスポンス最適化 • 配列DMLによる効率的なデータ登録 • FireDACでのファイルメンバーの使用方法•
従来のデータベースエンジンからの移行
• BDEからFireDACへの移行 • dbExpressからFireDACへの移行 • 移行手順 • 移行ツールを使った効率的な移行作業2.FireDAC 開発入門
• FireDACアプリケーションの作成手順
• FireDACコンポーネントの使用方法
• データセットの操作方法
簡単なFireDACアプリ作成
•
完成イメージ
D400PA00 (音楽CDマスター) IBM i クライアントPC [Active]ボタンクリック毎に ファイルがオープン/クローズする。
簡単な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のドライバーを 選択する。
簡単なFireDACアプリ作成
•
作成手順2
• フォーム上にデータベースコンポーネントを貼り付けて、関連付けを行う。 • TFDConnection (FireDACカテゴリ) • データベースへの接続情報を定義。 • TFDTable (FireDACカテゴリ) • アクセスするファイル(テーブル)を定義。 • TDataSource (DataAccessカテゴリ) • TDBGrid (DataControlsカテゴリ) DataSourceプロパティ 接続するDataSourceを 指定。 DBGrid1 DataSetプロパティ DB対応コンポーネントに 関連付けるDataSetを指定。 Conncetionプロパティ 接続先のFDConnectionコンポーネント を指定。 ※FDConnection1を配置してから、 FDTableを配置した場合、初期値が 自動設定される。
簡単なFireDACアプリ作成
•
作成手順3
• FDConnection1にホストへ接続する為の定義を行う。 • ダブルクリック(あるいは、右クリック→接続エディタ) • FireDAC接続エディタ上で接続パラメータを定義する。 • LoginPromptプロパティ • FireDACデフォルトのログオン画面を表示しない場合Falseにする。 ドライバID ドライバIDを指定。 (IBM i の場合、CO400) パラメータ DataBase: Configration 接続名 User_Name:ユーザー Password: パスワード パラメータ ODBCAdvanced:接続オプション (ライブラリ名を指定する場合、 LibraryOption=[ライブラリ] )
簡単なFireDACアプリ作成
•
作成手順4
• FDTable1にアクセスするファイル(テーブル) の定義を行う。 • TableNameプロパティ • ファイル名(テーブル)を指定する。•
作成手順5
• イベント(処理)を定義する。 • FormのOnCreate • Button1のOnClick Buttom1 frmMain
FDコンポーネント
•
TFDConnection
• データベース接続やトランザクション管理を行う。 • 主なプロパティ • コンポーネントをダブルクリックすると [FireDAC接続エディタ]が起動。 プロパティ 機能 Connected データベースへの接続を行う(True/False)。 LoginDialog TFDGUIxLoginDialogコンポーネントを関連づけることで、独自の ログオン画面を表示。 LoginPrompt FireDACログオン画面を表示するかどうか?Falseの場合、暗黙ログオン。 Params データベース接続パラメータ。通常はFireDAC接続エディタで設定。 FormatOptions データのマッピングを定義。通常はFireDAC接続エディタで設定。 UpdateOptions 更新処理の制御を行う。
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 / ) ※ 未指定の場合は /
FDコンポーネント
•
TFDConnection
• 接続処理 • Paramsプロパティにより、ソースコードでパラメータを指定可能。 • ソースコード例 ソースコードで、接続パラメータを指定可能。
FDコンポーネント
•
TFDConnection
• トランザクション処理 • 更新対象のファイルがジャーナル対象になっていることが条件。 • ODBCAdvancedパラメータにCommitment=*CHG, *CS, *ALL いづれか指定。 • StartTransactionメソッドでトランザクションを開始し、Commitメソッドで変更 を確定(コミット)あるいは、RollBackメソッドで破棄(ロールバック)する。 • トランザクション実行中かどうかは、InTransactionプロパティで判定する。 • ソースコード例
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”
•
データセット(TDataSet)
• TFDTableやTFDQueryでアクセスするデータの集合体。 • データセットの考え方は、BDEと同じ。 • データセットには、現在の行(カレントレコード)があり、フィールドへの アクセス操作はカレントレコードに対して行う。 • フィールドへのアクセスは、FieldByNameメソッドを使用する。 フィールドの属性にあわせたキャスト(型変換)を行う。 (As~)
データセットの操作
データセット カレントレコード
データセットの操作
•
データセットの移動
• ソースコード例 • 先頭レコードから最終 レコードまで順番に読込む。 メソッド/プロパティ 機能 First カレントレコードを先頭へ移動。 Prior カレントレコードを1つ前へ移動。 Next カレントレコードを1つ後ろへ移動。 Last カレントレコードを最終へ移動。 MoveBy 引数に指定したレコード数前後に移動。 Bof カレントレコードが先頭になった場合True。 Eof カレントレコードが最終になった場合True。 DBNavigator データセット操作用部品
データセットの操作
•
データセットの検索
メソッド 機能 Locate 指定したフィールドの値が合致するレコードへ 移動。 対象データがない場合、Falseとなる。•
データセットの絞り込み
プロパティ 機能 Filter 絞り込み(フィルタ)条件を文字列で指定。 Filtered フィルタの有効/無効。 (True時有効)
データの更新
•
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使用 データセット使用
データの更新
•
更新SQLを使用したデータの更新
• TFDQueryを使用する。 • SQLプロパティに更新SQLを記述する。 →コンポーネントをダブルクリックして、FireDAC クエリーエディタを使用することも可能。 • TFDQueryのExecSQLメソッドで更新が実行。 • パラメータクエリーも使用可能。 → SQL文中に :[変数名] で定義 → ParamByNameメソッドで変数に値をセット。 (パラメータの属性に合わせてキャスト) 更新SQL パラメータ パラメータへ値をセットする。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プロパティ 展開してサブプロパティを変更。
データの更新
•
データセットを使用したデータの更新
• 開いているデータセットに対して操作を行う。 • カレントレコードに対して、メソッドを実行。 メソッド 機能 Append データセットに新規レコードを作成し、挿入状態とする。 Edit カレントレコードを編集状態とする。 Post データセットに変更を登録して、参照状態に戻る。 Cancel データセットの変更を破棄して、参照状態に戻る。 Delete カレントレコードを削除する。
データの更新
•
データセットを使用したデータの更新
• 通常は、データセットに対し、Postした時点で即時データベースに反映される。 • CachedUpdates プロパティをTrue にすると 遅延更新が可能になる。 Post時点では、データセットのみが変更され、ApplyUpdatesメソッド実行時に 追加/変更/削除されたデータセットの変更が一度に反映される。 メソッド 機能 ApplyUpdates データセットの変更内容をすべてデータベースに反映する。 引数は、許容される更新エラー数 CancelUpdates データセットの変更内容をすべて破棄する。 データセット Post (クライアント上のみ反映) IBM i ApplyUpdates(変更箇所が反映) DB クライアントPC3.FireDAC 実践プログラミングテクニック
•
データマッピングルールによるフィールド型定義
•
FireDACモニタによる監視
•
データのフェッチによるレスポンス最適化
•
配列DMLによる効率的なデータ登録
•
FireDACでのファイルメンバーの使用方法
データマッピングルール
•
データセット 項目コンポーネント
• TFDTable/TFDQuery に定義されたデータセットより作成可能なフィールド単位の コンポーネント。 • TField型を起点としたフィールドの属性にあわせた項目コンポーネントが作成される。 • フィールド単位の表示や入力の制御が可能。 DisplayLabel DBGrid等に表示する列タイトルを指定。
データマッピングルール
•
データセット 項目コンポーネント
• 項目コンポーネントは、BDE接続/dbExpress接続のデータセットでも使用される。
• FireDAC接続の場合、数値項目のデータ属性がこれまでと異なっている。
(整数項目) BDE/dbExpress: TIntegerField, TSmallintField
FireDAC: TBCDField (2進化10進数項目)
(小数項目) BDE/dbExpress: TFloatField
データマッピングルール
•
データマッピングルールの設定
• FireDACには、データ型のマッピング(変換)を行う仕組みが用意されている。 • TFDConncectionコンポーネントのFormatOptionsプロパティにて設定可能。 → 通常は、 [FireDAC接続エディタ]上で設定する。 • 設定例 形式オプション FormatOptionsプロパティに相当 データマッピングルール SourceDataType : 変換前のデータ型 TargetDataType : 変換後のデータ型 PrecMin : 最小桁数 PrecMax : 最大桁数 ※BDEの場合、通常TSmallIntは使用されない為 (0-9)桁をdtInt32(Integer)として定義する。 【設定後に項目を作成】•
FireDACモニタ
• FireDACには、FireDACとデータベースとの間で実行しているSQLコマンドや処理 件数等をロギングする仕組みが用意されている。 • アプリケーションに組み込めば、障害発生時等にどのようなSQL処理が行われたかを 確認することができる。
FireDACモニタ
想定通りの結果がでない⁉ IBM i ログファイルを見れば どんなSQLが実行されたか 確認可能!
FireDACモニタ
•
TFDMoni
XX
ClientLinkコンポーネント
• FireDACのログ情報を出力するためのコンポーネント。 • FDConnectionコンポーネントと同じユニットに配置。 • 配置したコンポーネントにあわせて、FDConnecition のMoniterByパラメータを定義。 種類 機能 TFDMoniFlatFileClientLink 指定したログファイルにFireDAC ログ情報を出力。 TFDMoniCustomClientLink イベントを使用して独自のログ出力 を実装。 TFDMoniRemoteClientLink FireDACモニターにログ情報を出力。 MonitorByパラメータFlatFile / Custom / Remote より 選択する。
FireDACモニタ
•
TFDMoni
XX
ClientLinkコンポーネント
• ログ出力を行う場合、Tracingプロパティ=Trueを指定。 • 常にログ出力を行うと、大量のログファイルが生成され、 レスポンスにも影響の可能性があるため、トラブル発生時 のみモードを切り替えれば効果的。 • ソースコード例 デバッグ用 アプリケーションのショートカット 実行時引数 /DEBUG オプションを付けた ショートカットを作成。•
TFDMoniFlatFlieClientLinkコンポーネント
• 任意のログファイルにログを出力。
FireDACモニタ
プロパティ 機能 FileName ログファイル名をフルパスで指定。 デフォルト:C:¥Users¥<LoginName>¥AppData¥Local¥Temp¥Trace1.txt FileEncoding ログファイル出力形式。 (ecUTF8) FileAppend ログファイルに追記するかどうか?(False:新しいファイル作成) ShowTraces ログトレースをしている場合にメッセージを表示する。 (False) FDQueryを実行 ログファイルが生成。 実行されたSQLが出力。•
TFDMoniRemoteClientLinkコンポーネント
• FireDACモニタ(FDMonitor.exe)にログを出力。 • IDEの[ツール]→[FireDACモニタ]で起動可能。 • ローカルだけでなく、リモート監視もできる。
FireDACモニタ
プロパティ 機能 Host FireDACモニタの稼働端末のIPアドレスを指定。 デフォルト:127.0.0.1 FDQueryを実行 リアルタイムなログ確認が可能。 コンポーネント毎の状況も把握できる。•
データのフェッチ
• データベースから値を取得して、クライアントのデータセットに保持することを フェッチという。 • 一般的に大量のデータをフェッチしようとすると、Openに時間がかかる。 • FireDACで、1,000件のデータと、500,000件のデータの開く時間を比較。 → 処理時間が変わらない!
データのフェッチ
IBM i 得意先マスタ (MTOKUP) 売上ファイル (FURDTP) 500,000件 1,000件 データセット データセット FDQuery1 FDQuery2 FDQuery1を実行 FDQuery2を実行 平均Open 時間:317ms 平均Open 時間:307ms件数にかかわらず高速にオープンできるのはなぜか?
•
オンデマンドなフェッチ
• FireDACでは、データセットを作成する際、一度に全レコードをフェッチするのでは なく、予め設定された件数までフェッチし、その後フェッチされたカレントレコード のカーソル位置にあわせて、必要になったときに都度、次のデータを取得する。 • 初期設定では、50件ずつレコードがフェッチされる。
データのフェッチ
カレントレコードが50行目。 スクロールバーが最下部に きている。 次の行へ移動 次の50件が読み込まれ、 スクロールバーが中央に移動。•
FetchOptionsプロパティ
• FDConnectionのFetchOptions.RowSetSizeに全体の フェッチ件数が指定可能。 • FDTable、FDQuery単位でも個別に上書き指定できる。 → 実行するSQLやテーブルにあわせて、フェッチする件数を 調整することで、よりパフォーマンスの向上が可能。 • IBM i 用のFDCO400ドライバでは、さらに一度に 読込むバッファ数を調整可能。(BEFFERCOUNT)
データのフェッチ
ODBCAdvancedパラメータに BUFFERCOUNT=[バッファ数] の指定が可能。(20~100) データセット RowSetSize 一度にデータを フェッチして 保持する件数。 BUFFERCOUNT 一回当たりの読取り バッファサイズ。
配列DML
•
更新SQLを使用したデータの大量登録
• 更新SQLを使用して、1つのワークファイルに大量のレコードを登録するような場合、 通常パラメータクエリーを使用することが多い。 • IBM i に対して、同じSQL文を何度も実行することになる。 パラメータをもつSQL文。 (INSERT) 1件ずつパラメータに値をセット しながら、SQL(INSERT)を実行。
配列DML
•
配列DML
• パラメータ配列を作成することで、 1回のSQL実行で複数登録を可能に する仕組み。 • 通信回数を減らすことができ、処理 効率化が可能。 (DBサーバー側で配列DMLをサポートしているもの(SQLServer, Oracle等)であれば、さらに 効率があがり処理速度の向上が期待できる。) プロパティ/メソッド 機能 Params.ArraySize パラメータの配列要素数を指定。 Execute 配列DMLの実行。 パラメータの配列要素数を指定。 SQLを一括実行する。 パラメータ配列の 各要素に値をセット。 型キャストメソッドに複数形の”s”がつく。
ファイルメンバー処理
•
ファイルメンバー処理
• IBM i 独自の考え方。一つの物理ファイルに対して複数のメンバーを指定できる。 • ジョブ(セッション)毎に同じファイルに異なる内容がセットできる。 (ワークファイル等の目的に多用)•
BDEの場合
• TTableコンポーネントのTableNameプロパティに 直接メンバー指定が可能。 ワークファイル (WTEC19P) メンバー (M168001121) メンバー (WTEC19P) ファイルレイアウトは共通 データはメンバー 単位に独立して保持•
FireDACの場合
• TFDTableコンポーネントのTableNameプロパティに メンバー指定ができない。
ファイルメンバー処理
•
ネイティブ接続との併用
• Delphi/400では、データベースエンジン以外にネイティブ接続が利用できるが、 データベースエンジンと、ネイティブ接続は同時使用が可能。 • デフォルト設定の場合、2つの接続は同一ジョブとなる。 • FDTableでファイルをオープンする前に OVRDBFコマンドでファイル名を一時変更し FDTableでファイルをクローズした後に、DLTOVRコマンドで一時変更を削除する。 OVRDBF FILE(WTEC19P) TOFILE(WTEC19P) MBR(M168001121) OVRSCOPE(*JOB)RemoteCmd メソッド
DLTOVR FILE(WTEC19P) LVL(*JOB)
RemoteCmd メソッド オープン クローズ 指定した メンバーにアクセス
ファイルメンバー処理
•
実装例
(OVRDBF, DLTOVR実行部)
宣言部 実装部 RemoteCmdメソッド CLコマンドを実行。
ファイルメンバー処理
•
実装例
(TFDTableイベント)
AfterCloseイベント テーブルを閉じた後に 発生するイベント。 BeforeOpenイベント テーブルを開く前に 発生するイベント。•
実行例
テーブルをオープンする だけで、指定したメンバー にアクセスできる。 Button1 Edit1.Text:メンバー名
ファイルメンバー処理
•
Multiple Channel設定
• Configrationの [Multiple Channel]をONにすると、全ての接続が異なるジョブとして
実行される。 • WebアプリやDataSnapアプリの場合、複数クライアントからアクセスされる為、 ジョブを分けないといけない。 • ネイティブ接続とFireDAC接続とでジョブが分かれるため、TAS400コンポーネントで 発行したコマンドが、TFDTableでのアクセスに反映されない。 Multiple Channel 接続ごとにジョブを分割。 Delphi/400 アプリ ネイティブ接続と FireDACとでジョブが 異なる。
FireDACのみでファイルメンバーを扱うことはできないか?
Configration 活動ジョブの処理(WRKACTJOB)
ファイルメンバー処理
•
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
エリアス(別名)作成
エリアス(別名)削除
ファイルメンバー処理
•
実装例
(CREATE ALIAS, DROP ALIAS実行部)
宣言部 実装部 ExecSQLメソッド SQLを実行。 エリアス名を返却。 (ファイル名_メンバー名) ファイル名を返却。 (エリアス名の左部分)
ファイルメンバー処理
•
実装例
(TFDTableイベント)
TableNameプロパティに 元のファイル名をセット。 TableNameプロパティに エリアス名をセット。•
実行例
FireDAC接続のみで、 メンバーにアクセスできる。 Button14.従来のデータベースエンジンからの移行
•
BDEからFireDACへの移行
•
dbExpressからFireDACへの移行
•
移行手順
従来のデータベースエンジンからの移行
•
BDEからFireDACへの移行
• FireDACは、BDE同様双方向データセットの為、コンポーネントの置き換えで移行可能。 • [DataAccess]カテゴリ、[DataControls]カテゴリは同じものを使用可能。 TDBEdit TDBGrid [BDE]カテゴリ [DataAccess]カテゴリ [DataControls]カテゴリ [FireDAC]カテゴリ
従来のデータベースエンジンからの移行
•
dbExpressからFireDACへの移行
• dbExpressは単方向データセットの為、通常TClientDataSet(ローカルキャッシュ)と 併用して利用。 • FireDACでも、TClientDataSetはそのまま使用できる為、コンポーネントの置き換え で移行可能。 • 。 TDBEdit TDBGrid [dbExpress]カテゴリ [DataAccess]カテゴリ [DataControls]カテゴリ
従来のデータベースエンジンからの移行
•
BDE自体の開発・保守が既に終了済
• 動作保証は、WindowsXPまで。 → Windows Vista以降でも稼働はさせられるが、動作保証なくPTFも提供されない。 → UACの考慮がない。(Cドライブ直下への書込みが発生することがある。) → BDE初期化エラー等が発生する場合がある。 • 32bitのみで、UNICODEに非対応。 → IBM i での利用においても、CCSID=1399(JP-4)の文字が一部使用できない。 • VCL専用でFireMonkeyでは使用できない。 → マルチデバイスアプリ開発に対応できない。 → 3層アプリ作成時に使用するDataSnapでも使用不可。BDEアプリは、FireDACに移行することで 上記課題を解決可能!
従来のデータベースエンジンからの移行
•
移行手順
従来のデータベースエンジンコンポーネントより、FireDACコンポーネントを追加。
FireDAC固有コンポーネント(カーソル、ドライバー)の追加。
FDConnection ドライバ、接続パラメータ、マッピングルール等の指定。
従来のデータベースエンジンコンポーネントのプロパティやイベントを移行。
従来のデータベースエンジンコンポーネントを削除。
従来のデータべースエンジン固有のソースコードを修正。
従来のデータベースエンジンからの移行
•
移行手順の具体例
• ミガロ.テクニカルレポート No.9 2016年秋 『新データベースエンジンFireDACを使ってみよう!』 にて、BDE、dbExpressからFireDACへの具体的な 移行手順を紹介! FireDAC関連の コンポーネントを追加。 FireDACアプリの完成。
従来のデータベースエンジンからの移行
•
実際の移行作業時の懸念点
• 大量のデータベース関連コンポーネントの置き換えが発生 • コード修正量を減らすには、元のコンポーネントと同じ名前にしたほうが良い。 → いったん元のコンポーネントをリネームして、新しいコンポーネントを貼り付け て、元の名前を付与したうえで、元のコンポーネントを削除する必要がある。 • usesリストの修正が必要 • FireDAC関連のusesリストは、FireDACコンポーネントの配置で自動的にセット されるが、元のデータベースエンジンのusesリストは、コンポーネントを削除しても クリアされない。 → 手でリストを修正しなければいけない。 FireDAC関連のユニットは コンポーネント配置で 自動的に追加される。 BDE関連のユニットは、 コンポーネント削除後に 手で削除しなければいけない。
従来のデータベースエンジンからの移行
•
移行ツールの活用
• 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
BDEからFireDACへの移行デモ
•
サンプルプログラム
• ネイティブ接続(Call400)でRPGをCALLして、ワークファイルを作成。 • 処理結果のワークファイルをBDE接続で取得して、DBGridに出力。 BDEコンポーネント ネイティブ
BDEからFireDACへの移行デモ
•
サンプルプログラム
• プログラムソース FormのOnCreateイベント CL(RPG)をCALL。 BDE Tableをオープン。 ネイティブ、BDEの 接続パラメータ指定。 ライブラリリスト の追加。 Button1のOnClickイベント
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を実行する。 処理結果が出力される。