25th Developer Camp

Similar documents
「Delphiのマイグレーションを行うのであれば、これだけは知っておこう!」

25th Developer Camp

CodeGear Developer Camp

20th Embarcadero Developer Camp

Delphi / C++Builderユーザーのためのオープンソースコンポーネントを使ったDBアクセス

24th Embarcadero Developer Camp

データベースアプリケーション構築技法 Delphi、C++Builderによるメンテナンス性を考慮した開発

25th Developer Camp

5th CodeGear Developer Camp [A3]

17th Embarcadero Developer Camp

「DataSnapユースケース研究」 多層技術の概要と最適化、実践テクニック

InterBaseツール・ユティリティ大全


「RAD Studio XE5によるマルチ言語/マルチデバイス開発の進め方」

LDAP Manager SupportList

intra-mart EX申請システム version.7.2 PDFオプション リリースノート

スライド 1

21st Embarcadero Developer Camp T9

システム要件 Trend Micro Safe Lock 2.0 SP1 Trend Micro Safe Lock 2.0 SP1 エージェントのシステム要件 OS Client OS Server OS Windows 2000 (SP4) [Professional] (32bit) Wind

Embarcadero Developer Camp

intra-mart EX申請システム version.5.3 PDFオプション リリースノート

チャレンジ!dbExpress接続

Trend Micro Safe Lock 2.0 Patch1 管理コンソールのシステム要件 OS Windows XP (SP2/SP3) [Professional] Windows 7 (SP なし /SP1) [Professional / Enterprise / Ultimate] W

HULFT-DataMagic Ver2.2.0 製品対応OS

SQL Server 2005 自習書管理編 No.6 1 SQL Server 2005 自習書シリーズ管理編 No.6 アップグレード 移行

本セミナーの目的 Firebird の利点を最も有効に利用できる開 発環境は Delphi です 理由その 1 ミドルウェアの充実 理由その 2 データベース対応機能の充実 理由その 3 国内 海外での豊富な実績の蓄積

BOM for Windows Ver

10th Developer Camp - B5

目次 1. はじめに Kaspersky Security Center 10 に関する注意事項 インストール前 動作環境 Kaspersky Security Center 9.x から Kaspersky Securit

Oracle SQL Developerの移行機能を使用したOracle Databaseへの移行

Install / Protect / Monetize InstallShield 全機能 データシート プロフェッショナルなインストールの作成 PREMIER PROFESSIONAL EXPRESS MSIX パッケージ サポート フレームワークをサポート Windows Installer(

DBMSリポジトリへの移行マニュアル

既存のDelphi/C++Builderアプリケーションの移行方針

intra-mart FormatCreator Version6.1

a2

システム要件 Trend Micro Safe Lock Trend Micro Safe Lock 2.0 エージェントのシステム要件 OS Client OS Server OS Windows 2000 (SP4) [Professional] (32bit) Windows XP (SP1/

1. はじめに (1) 本書の位置づけ 本書ではベジフルネット Ver4 の導入に関連した次の事項について記載する ベジフルネット Ver4 で改善された機能について 新機能の操作に関する概要説明 ベジフルネット Ver4 プログラムのインストールについて Ver4 のインストール手順についての説明

PHP 開発ツール Zend Studio PHP アフ リケーションサーハ ー Zend Server OSC Tokyo/Spring /02/28 株式会社イグアスソリューション事業部

intra-mart EX申請システム version.5.4 提出依頼機能 リリースノート

既存のDelphi/C++Builderアプリケーションの移行方針

内容 Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作... 1 サーバーエクスプローラ... 4 データ接続... 4 データベース操作のサブメニューコンテキスト... 5 データベースのプロパティ... 6 SQL Server... 6 Microsoft

データベース暗号化ツール「D’Amo」性能検証

21st Embarcadero Developers Camp T3

アドバンスト・フォーマットディスクのパフォーマンス

ミガロ.製品 最新情報

ライセンスの注意事項 サーババンドル版のライセンスについてサーババンドル版では 通常のサーバライセンスおよび 4 コアライセンスを ベースライセンス 追加サーバライセンスおよび追加 2 コアライセンスを 追加ライセンス と呼びます 1 台の物理サーバに対してベースライセンスは 1 つしか購入すること

Oracle SQL Developer Data Modeler

使用する前に

新OS使用時の留意事項

Web会議システム IC3(アイシーキューブ)│FAQ│IC3:キヤノンITソリューションズ株式会社

Web会議システム IC3(アイシーキューブ)│FAQ│IC3:キヤノンITソリューションズ株式会社

Silk Central Connect 15.5 リリースノート

BricRobo V1.5 インストールマニュアル

データベースアクセス

MxLogonサーバサイドツールキット用UI

セットアップカード

Microsoft Word - JDBC-ODBCu691cu8a3c docx

ボリュームライセンス簡易ガイド Windows および Microsoft Office を Mac で使用するためのライセンス Mac で使用するためのライセンス この簡易ガイドはすべてのボリュームライセンスプログラムを対象とします 目次 概要... 1 この簡易ガイドの更新内容... 1 詳細.

Visual Basic Oracle Database 11 Release 1

<4D F736F F D CA08CC082AA B835E B D C58B9194DB82B382EA82DC82B582BD2E646F63>

intra-mart Accel Platform

クライアント証明書導入マニュアル

intra-mart EX申請システム version.7.2 事前チェック

— intra-mart Accel Platform セットアップガイド (WebSphere編)   第7版  

知って得する!現役ヘルプデスクが答えるDelphiテクニカルエッセンス 8.0

INFINI DATA STATION R Client Edition インストール手順書 INFINI TRAVEL INFORMATION, INC.

mySQLの利用

Control Manager 6.0 Service Pack 3 System Requirements

Microsoft Word - PCOMM V6.0_FAQ.doc

Microsoft Word - JDBC検証 docx

PowerPoint プレゼンテーション

目次 Windows 2003 への新規インストール... 3 Windows 2008 への新規インストール... 4 Windows 2012 への新規インストール... 6 Microsoft SQL のサポート... 8 IPv4/IPv6 のサポート... 8 制限事項... 9 Web

スライド 1

Transcription:

B2 Delphi/C++Builder ild テクニカルセッション エンバカデロ テクノロジーズエヴァンジェリスト高橋智宏

BDE アプリを最新へ FireDAC による移行

はじめに BDE の現状 BDE から移行がなぜ必要なのか BDE からの移行の壁 FireDAC について Paradox/dBase ユーザー向けの移行 BDE から FireDAC へ移行のポイント FireDAC のデモ まとめ

BDE アプリを最新へ FireDAC による移行

BDE とは? 旧 Borland 社が提供したデータベースアクセスを共通化するミドルウェア ( 古くはIDAPI と呼ばれたDBアクセスエンジン ) 複数のアプリケーションで共有できるデータアクセスメカニズム BDEと併せて SQL-Link というミドルウェアを利用することで主要な RDBMS へネイティブ接続が可能 開発されたプリケシと共 Delphi/C++Builder で開発されたアプリケーションと共に利用され 広く普及している

BDE の特徴 ( その 1) 共通の手順で様々な DB へアクセス可能 BDEユーザーはデータベースの違いを意識することなく 異なるシステムへ同じ手順でアクセスできる BDE の機能を直接使用するための API を提供 BDE API は Windows DLL をロードし その中の関数を使用できるプログラミング言語であれば どの言語からも呼び出せる (Delphi/C++Builder 以外からも利用可 ) BDEオブジェクトは BDE API(DBIxxxx) をラップしたコンポーネント 幅広いデータベースのサポート Paradox dbase Access などのファイルベース DB I B O l Sb MSSQL DB2 I f i などの RDBMS InterBase Oracle Sybase MSSQL DB2 Informix などの RDBMS ODBC を介してさらに多くのデータベースへ接続も可能

BDE の特徴 ( その 2) 異種結合異なるデータベースに属する 2 つのテーブルを結合可能 例えば SELECT * FROM ":DBDEMOS:Customer.db" C, ":BCDEMOS:Orders.db" O WHERE (C.CustNo = O.CustNo) 異種結合できるのは BDE( ローカル,ODBC, または SQL-Link) でアクセス可能なデータベースタイプのテーブル

BDE のよくある旧システムの構成例 Oracle 8i をターゲットに Delphi 7で作成されていたC/Sシステム (Delphi7+BDE+SQL-Link + Link for ORACLE + Oracle 8i) クライアントアプリケーション クライアント PC BDE Oracle 用 SQL-Linkドライバ DB Oracleクライアントライブラリ oci.dll tnsnames.ora Oracle 8i

BDE の現状 BDE は 2002 年に開発 保守終了 不具合があっても修正パッチの提供は無し BDE の最新バージョンは 5.2 Delphi 7/C++Builder 6 以降 BDE のバージョンは更新されていない 現在の Delphi /C++Builder 製品に付属する BDE は あくまで過去の資産の保守用 動作保証プラットホームは Windows XP まで Windows XP 以降にリリースされた OS バージョンは 動作保証外 ( 例えば Windows Vista/7 Windows 2003/2008 Server など )

BDE アプリを最新へ FireDAC による移行

BDE+Paradox について 現在の BDE は Paradox/dBase の保守用 BDE + Paradox の短所 (RDBMS と比較して ) トランザクションや排他処理が貧弱 テーブルのデータが破損しやすい ( そのリスクが大きい ) Paradox のテーブルサイズの制限 ( ブロックサイズ 65535 ) データ量に比例し パフォーマンス低下やエラーが発生しやすい Unicode は当然扱えない ますますデータの肥大化が進む現状のシステムにおいてこれらの問題を抱えたまま Paradoxを使い続ける意味があるのか?

BDE の抱える問題 ( その 1) 近年の (PC) ハードウェア構成にマッチしない 4GB 越えのHDDの空き容量が正しく認識しない マルチコア/ プロセッサ搭載 PC 上での動作不安 Vista 以降の OS 機能に未対応 UAC(User Account Control) ASLR(Address Space Layout Randomization) によるアドレス衝突が発生 BDE アプリを複数同時起動した場合 初期化エラーが発生することがある PC や Windows そして BDE の設定を色々変更すればなんとか動作するが 一切の保証は無し

BDE の抱える問題 ( その 2) 対応しているデータベースのバージョンが古い ODBC 接続によって一応新しいバージョンへ繋がるが一切の保証は無し

BDE の抱える問題 ( その 3) とにかく配布が面倒 例えば BDE + SQL-Link for ORACLE + Oracle 8i の構成の場合 クライアントアプリケーションン BDE Oracle 用 SQL-LinkLi ドライバ BDE 対応のインストーラ作成が必須 BDE のエリアス設定が必須 クライアント PC Oracle クライアントライブラリ oci.dll tnsnames.ora Oracleクライアントのインストールが必須設定が必須 異なる BDE のバジョン ( 例えば 4 と 5 ) の混在やエリアスの重複など異なる BDE のバージョン ( 例えば 4.x と 5.x ) の混在や エリアスの重複など実行環境に依存し 問題が生じるケースも多い

BDE の抱える問題 ( その 4) 最近のニーズに適したアプリケーションが作成できない 64 ビットアプリ化 Unicodeへ対応 クロスプラットホーム化 マルチデバイス 多層データベースアプリケーションへの対応 など

BDE を使い続けることのリスク メーカーからのサポートが期待できない既にサポートが終了しているため もしシステムに深刻な問題が発生しても 自己責任で利用 回避が必要 BDE は不安定な土壌で動作しているという認識が必要 あくまで旧システムとの互換性の範囲で動作しているに過ぎない 今後普及していくデバイス Windows OS データベース等でも同じ仕様で利用できるとは限らないため もし仕様が変われば いずれ動作しなくなる 既存のアプリケーション資産を様々な分野へ展開できる可能性を自ら閉ざしている 実行環境が固定されるため アプリケーションの更なる発展は見込めない

その場しのぎ や 延命 もそろそろ限界じゃありませんか? 既存の BDE アプリを最新にアップデートしましょう! では それをいつやるのか? 今でしょ!

BDE アプリを最新へ FireDAC による移行

BDE から移行するための選択肢 BDE 以外で 従来の Delphi/C++Builder から 標準で利用可能なデータベースフレームワークの種類 IBExpress (InterBase 専用 ) dbgo(ado/oledb) ( ) dbexpress サードパーティ製品は除く おそらくこれらのコンポーネントを利用し BDE から 移行を一度は検討された方も多いと思います

サポートへよくあるお問い合わせ (1) 現在 BDE の TTable(TQuery) から移行中です ところがdbExpressのTSQLTable(Query) では 例えば 以下に該当するメソッドやプロパティの見つかりません TTable.FetchAll TQuery.Constrained TTable.UpdateObject TQuery.Data TQuery.RequestLive TTable.exclusiveexclusive 存在しないプロパティやメソッドの代替案を教えてください 上記に依存しているコードが多くドが多く できれば修正したくありません BDE DataSet との非互換性の例

サポートへよくあるお問い合わせ (2) Oracleテーブル ( レコード数は約 100 万件 ) のオープンにかかる時間は BDE 1 秒 dbgo(ado) やdbExpress 21 秒かかりました テーブルのアクセス方法は Tableコンポーネントでは 特にフィルタは設定してません Queryコンポーネントでは select * from テーブル名 で結果セットを取得しており where 句によってフィルタはしていません なぜ同じコードで BDEとこんなにパフォーマンスが違うんですか? データアクセスアーキテクチャの違いにより実行パフォーマンスが出ない典型的な例

BDE からの移行をより困難にする理由 データアクセスアーキテクチャの違いア サーバーサイドカーソルか クライアントサイドカーソルか フィルタの指定有無/ 条件など BDE DataSet と非互換 ( メソッドやプロパティの違いなど ) 同等の実行パフォーマンスが出ない 上記のような理由により コードの修正が発生し それにかかる工数が大きいため なかなか移行に踏み切れない

BDE から移行する新たな選択肢 BDE 以外で Delphi/C++Builder から利用可能な データベースフレームワークの新定番 IBExpress (InterBase 専用 ) dbgo(ado/oledb) ( ) dbexpress FireDAC New! サードパーティ製品は除く

BDE アプリを最新へ FireDAC による移行

FireDAC とは? 広範なデータアクセスコンポーネント あらゆるデータベースアプリケーション開発向け Delphi および C++Builder 向け Win32, Win64, Mac OS X Delphi 5~XE3, C++Builder 6~XE3 ハイパフォーマンス且つ 簡単にエンタープライズデータベースに接続可能 統一的なデータアクセスが可能 しかも データベースに特有な機能も利用可能

FireDAC のネイティブドライバ MySQL yq 3.21 以降 Microsoft SQL Server 2000 以降 Unicodeに対応!! Microsoft SQL Azure Oracle 8.0.3 以降 Sybase SQL Anywhere 5.0 以降 InterBase 6 以降 Microsoft Access 2000 以降 PostgreSQL 74 7.4 以降 IBM DB2 8.1 以降 DataSnap Firebird 1.5 以降 SQLite 3.x Advantage Dtb Database 80 8.0 以降 ODBC 接続 dbexpress ブリッジ接続 http://docs.embarcadero.com/products/rad_studio/firedac/databases.html

FireDAC の構造

FireDAC を使用するメリット BDE との互換性 データアクセスアーキテクチャが類似 従来のBDE Datasetとの互換性を備えたDataSetクラス CachedUpdatesモードも利用可能 配布がとても簡単 専用のデータベースドライバやインストーラーが不要 BDE と同等以上のパフォーマンス Professional エディションでもリモート接続が可能

BDE アプリを最新へ FireDAC による移行

データベースの移行について FireDAC は Paradox/dBaseを未サポート Paradox/dBase から別のデータベースへ移行が必要 代替データベースに関する指針 各種 RDBMS へ移行 同じタイプのローカル DB へ移行 例えば XMLファイル MS Access SQLite InterBase Desktop Editionなど

テーブルのデータを移行するには BDE を介し DataPump( データポンプ ) を利用する データベースへの接続は SQL-LinkもしくはODBCで行なう 注意点 : BDE のエリアスを予め設定しておく 移行先の( 入れ物となる ) データベースファイルを予め作成しておく このユーティリティが付属しているバージョンは C++Builder6,Delphi7 迄 Paradoxから各種 RDBMSへ移行するサードパーティ製のツールを利用 自分でデータ移行用のプログラムを作成する TClientDataSetを介してXMLファイルへ出力 http://blogs.embarcadero.com/teamj/2013/03/06/3722/

BDE アプリを最新へ FireDAC による移行

BDE と FireDACのコンポーネント名 BDE FireDAC TDatabase TADConnection TSession TADManager TTable TADTable TQuery TADQuery TStoredProc TADStoredProc TUpdateSQL TADUpdateSQL TBatchMove TADDataMove など 一部対応するコンポーネントがあっても 挙動が異なるものがあります

FireDAC のコンフィグファイル BDE Administrator と同様に FireDAC Explorer によってエリアスの情報を設定ファイルに保存できる BDE では IDAPI.CFG に保存 FireDAC では ADConnectionDefs.ini に保存 注意 : Windows Vista 以降のOSでデフォルトのADConnectionDefs.iniを編集するためには FireDAC Explorer を [ 管理者として実行 ] が必要

BDE のエリアスの移行 FireDAC Explorerのメインメニュー [Connection]-[Import BDE Alias] を選択し BDE Administratorに設定されている一部のエリアスをインポートできます 但し Paradox のエリアスはインポートできません エリアスの移行後 空欄のパラメータは個別の設定が必要

データベースドライバの対応表 データベース BDE(SQL-Link) FireDAC Oracle sqlora8.dll TADPhysOracleDriverLink MSSQLServer sqlmss32.dll TADPhysMSSQLDriverLink DB2 sqldb2v5.dll TADPhysDB2DriverLink PostgreSQL N/A TADPhysPgDriverLink MySQL N/A TADPhysMySQLDriverLink SQLite N/A TADPhysSQLiteDriverLink Sybase ASE sqlsyb32.dll TADPhysODBCDriverLink Paradox idpdx32.dll N/A ODBC ブリッジドライバ idodbc32.dll TADPhysODBCDriverLink DataSnap N/A TADPhysDataSnapDriverLink InterBase FireBird sqlint32.dll N/A TADPhysIBDriverLink FireDACでは ターゲットのデータベースに応じた TADPhysXXXXDriverLinkが必要

TSession の代替は? アプリケーションでデータベース接続を管理する役割を持つコンポーネント BDE TSession Session 変数 FireDAC TADManager ADManager 変数 ADManagerへ接続設定を登録することで ワーカースレッド内で物理接続の再利用を行なうコネクションプーリングが利用できる

TTable を移行する最良な選択は? 普通にコンポーネントの名前だけで見ると TTable TADTableへ置き換えたいところですが TADTableは 利用に関して制限が多く データの取得の際に余計なラウンドトリップが発生したり オーバーヘッドが大きい TADQuery は TTable と共通するプロパティやメソッドを持つ パフォーマンスはマンスは TADQuery > TADTable 通常は TADQuery へ置き換えることがベストな選択

データ型のマッピング FireDAC は dbexpressのデータ型マッピングに類似 BDEからFireDACへ移行すると RDBMSごとに異なるデータ型マッピングを持っているかもしれませんが FireDACでは データ型マッピングを調整するための強力な機能を備えています

アプリケーションの配布 FireDAC は BDEと比べて配布がとってもシンプル!! BDE の場合 : FireDAC の場合 : クライアントアプリケーション BDE BDE 専用のドライバ ( 例えば sqlora8.dll や idobc32.dll など ) DB クライアントライブラリ ( 例えば oci.dll や gds32.dll など ) クライアントアプリケーション TADPhysXXXXDriverLink ADCConnectionsDefs.ini ADDrivers.ini ( ) DB クライアントライブラリ ( 例えば oci.dll や gds32.dll など ) もし FireDAC のエリアスを参照していないアプリケーションの場合 この 2 つのファイルの配布は不要

互換性の無い BDE プロパティについて FireDACでは 一部 BDEに対応したプロパティを持っていない BDE プロパティ FireDAC プロパティ Alias ConnectionDef Database Connection SessionName N/A PrivateDir N/A FireDAC に存在しないプロパティは 完全に削除が必要

データベースドライバのパラメータの違いタの違い 下記は Oracleドライバのパラメータ同士を比較した例 : BDE(SQLLink) FireDAC パラメータ名が異なるため 個別に設定が必要になります

CharacterSet パラメータ FireDAC で Unicode データベースに接続するには? データベース Oracle CharacterSet パラメータ utf8 あるいは NLS_LANG=_.UTF8 MSSQLServer 自動的に UTF-16 がセットされる DB2 自動的に UTF-16 がセットされる PostgreSQL MySQL utf8 utf8 SQLite 自動的に UTF-16 がセットされる MS Access 自動的に UTF-16 がセットされる InterBase /Firebird utf8 Sybase SQL Anywhere 自動的に UTF-16 がセットされる ODBC ブリッジドライバ自動的に UTF-16 がセットされる dbexpress ブリッジドライバ dbexpress ドライバに依存 RAD Studio/Delphi/C++Builder のバージョンが2009 以降の場合 2007 以前のバージョンはUnicode 未対応

OnLoginイベント TADConnection.OnLoginイベントは TDatabase.OnLogin イベントのパラメータリストと互換性が無い procedure TMyDataModule.dbLogin(Connection: TDEConnection; LoginParams: TStrings); begin LoginParams.Values['USER NAME'] := 'me'; LoginParams.Values['PASSWORD'] := 'pwd'; end; BDE 例として 以下のようにコードを置き換えれる procedure TMyDataModule.dbLogin (AConnection: TADCustomConnection; const AConnectionDef: IADStanConnectionDef); begin AConnectionDef.UserName := 'me'; AConnectionDef.Password := 'pwd'; end; FireDAC

時間のかかる処理 Screen.Cursor := crsqlwait; try... finally Screen.Cursor := crdefault; end; BDE 例として 以下のようにコードを置き換えれる uses uadstanfactory, uadguixintf;... var owait: IADGUIxWaitCursor;... ADCreateInterface(IADGUIxWaitCursor, owait); owait.startwait; try... finally owait.stopwait; end; FireDAC

データベースの例外エラーについて BDE の例外クラス EDBEngineError エラーの種類を取得するには ErrorCode プロパティを使用 FireDAC の例外クラス EADDBEngineException エラーを列挙した値を返す Kind プロパティを使用 if E is EDBEngineError then begin case EDBEngineError(E).Errors[0].ErrorCode of DBIERR_KEYVIOL: MetaBaseDBError(SMb_DataSetInvalidPKeyValue, E); end; BDE 以下のようにコードを書き換える if E is EADDBEngineException then begin case EADDBEngineException(E).Kind of ekukviolated: MetaBaseDBError(SMb_DataSetInvalidPKeyValue, E); end; FireDAC

注意点 BDE API を直接呼び出しているプログラムコードはドは そのままでは移行できない BDE API(DBIxxxx) とFireDACのAPI(Phys interface) は 全く互換性が無いため FireDACのAPIを利用して再コーディングが必要 BDE と FireDAC は異種クエリの構文と機能が異なる FireDAC では LocalSQL を利用し BDE のような異種結合が行える機能を提供 TBatchMoveとTADDataMoveは 機能的に多くの点で異なる ( コードの書き直しが必要なケースあり )

BDE アプリを最新へ FireDAC による移行

デモ 簡単な BDE アプリから FireDAC アプリへの移行 パフォーマンス対決 dbexpress と FireDAC の比較

BDE アプリを最新へ FireDAC による移行

FireDAC へ移行することによって 最新の OS や DBのバージョンに対応 BDE と同様 共通手順で広範な DB へアクセス アプリケーションの配布がシンプルに BDE と同等以上のパフォーマンスが期待 BDEとの互換性により 移行にかかる工数を最低限に抑えられる

さらにアプリケーション資産をニーズに合わせた様々な分野への展開が期待できる

いつかは BDEのアプリをアップデートしなければなりません では それをいつやるのか? 今でしょ!

FireDAC を利用するには? Delphi/C++Builder/RAD / Studio XE3 Enterprise Editionライセンスに含まれる 既にXE3を購入済みのユーザーも含む FireDAC Client/Server Pack for XE3 Professional Editionに追加するアドオン http://www.embarcadero.com/jp/products/rad-studio/firedac

参考情報 FireDACのオンラインヘルプ ( 英語 ) http://docs.embarcadero.com/products/rad_studio/firedac/ RAD Studio マイグレションセンタ RAD Studio マイグレーションセンター http://www.embarcadero.com/jp/rad in action/migration upgrade center