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

Similar documents
24th Embarcadero Developer Camp

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

17th Embarcadero Developer Camp

25th Developer Camp

FastReportへの効率的な帳票レイアウトコンバート

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

21st Embarcadero Developers Camp T3

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

使用する前に

開発ツールのコラボレーション機能を検証する

Rational Roseモデルの移行 マニュアル

Indyを利用したメール送信機能開発

C#の基本

Delphi/400バージョンアップに伴う文字コードの違いと制御

AGT10(Android (TM) 2.3) ファームウェア更新方法

5-2. 顧客情報をエクスポートする 顧客管理へのアクセス手順 メールディーラーで管理する顧客情報に関する設定を行います 1. 画面右上の 管理設定 をクリックする 2. 管理設定 をクリックする 3. ( タブ ) 顧客管理 をクリックする 2

CodeGear Developer Camp

PowerPoint プレゼンテーション

スライド 1

MS104-SH2 USBドライバ(仮想COMポートドライバ)の不具合について

WebOTXマニュアル

マニュアル訂正連絡票

Webコンポーネントのカスタマイズ入門


CodeRecorderでカバレッジ

Source Insight

MultiLABELISTOCX と MultiLABELISTV4 MLOCX は MLV4 のレイアウト発行機能を継承しています したがって MLV4 の振分発行やプ リセット発行を使用するための登録情報は使用できません MLV4 のレイアウト管理でレイアウトを作成すると 拡張子が m lay

厚生労働省版ストレスチェック実施プログラムバージョンアップマニュアル (Ver2.2 から Ver.3.2) 目次 1. プログラム概要 バージョンアップ実施手順 要注意 zip ファイル解凍の準備 Windows によって PC が保護されました と

セットアップカード

インテル(R) Visual Fortran コンパイラ 10.0

BOM for Windows Ver

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

<4D F736F F F696E74202D D F838C815B F C835B83938E9197BF2E B93C782DD8EE682E890EA97705D205B8CDD8AB B83685D>

Microsoft PowerPoint - 第5章補足-DB2組み込みSQL.ppt

第 7.0 版 利用履歴管理 ETCPRO5 セットアップマニュアル (Ver5.002) カードリーダモデル変更 ( 表示付き 表示なし ) に伴い 改訂 Windows10 対応に伴い 改訂 参考ホームページサイト :

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

3/7 マイグレーション開発方針 顧客名 0 作成者 根岸正 < プログラム移行方針 > システム名称 A-VX システムマイグレーション作成日 2015/09/01 < COBOL 資産のプログラム移行 > COBOLソース ( メインとCOPYLIB) を入力としてSCC 言語変換ツールにてVB

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

PowerTyper マイクロコードダウンロード手順

Using VectorCAST/C++ with Test Driven Development

プリンタドライバのバージョンと パッケージのバージョン バージョン には プリンタドライバ単体のバージョンとプリンタドライバ群を表すパッケージバージョンの 2 通りあります プリンタドライバのバージョンは プリンタドライバプロパティを開いて確認することができます 1. プリンタフォルダを開きます 2

産直くん 9 リピートくん 9 バックアップ リストア作業チェックリスト バックアップ リストア作業項目一覧 作業項目作業目安時間概要 00 バックアップ リストア作業を行う前に 産直くん 9 リピートくん 9 のバックアップ リストア作業を円滑に行うための確認事項をまとめています 1. バックアッ

かぐや3Dムーンナビ起動障害対応手順書_

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

Microsoft Word - JDBC-ODBCu691cu8a3c docx

『テクノス』V2プログラムインストール説明書

カードプリンターImageCreateDBL 簡単操作ガイド(Accessデータ差し込み編)

Oracle Un お問合せ : Oracle Data Integrator 11g: データ統合設定と管理 期間 ( 標準日数 ):5 コースの概要 Oracle Data Integratorは すべてのデータ統合要件 ( 大量の高パフォーマンス バッチ ローブンの統合プロセスおよ

Microsoft PowerPoint - Session4古賀様.ppt

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

スライド 1

Windows 10の注意点

スライド 1

WebアプリケーションサーバJBoss入門

1. ネットワーク経由でダウンロードする場合の注意事項 ダウンロード作業における確認事項 PC 上にファイアウォールの設定がされている場合は 必ずファイアウォールを無効にしてください また ウイルス検知ソフトウェアが起動している場合は 一旦その機能を無効にしてください プリンターは必ず停止状態 (

Team Foundation Server 2018 を使用したバージョン管理 補足資料

Java知識テスト問題

環境影響物質含有量集計ツール操作ガイド

レベルアップ詳細情報 < 製品一覧 > 製品名 バージョン < 追加機能一覧 > 管理番号 内容 説明書参照章 カナ文字拡張対応 < 改善一覧 > 管理番号 内容 対象バージョン 説明書参照章 文字列のコピー ペースト改善 ~ 子画面の表示方式 ~ 履歴の詳細情報 ~ タブの ボタン ~ 接続時の管

Caché SQL ゲートウェイの使用法

セキュリティ設定ツールインストール 桐セキュリティ設定ツールインストール C: K3 KIRIV9 Security フォルダ内 KISECURE をダブルクリックして設定を開始します 初回セキュリティ設定ツールを起動時はウィザート形式で設定します メッセージにしたがって初期設定を行ってください セ

ご利用のブラウザのバージョンによっては 若干項目名が異なる場合があります 予めご了承ください Windows をお使いの場合 [ 表示 ] [ エンコード ] [ 日本語 ( 自動選択 )] を選択 [ 表示 ] [ エンコード ] [Unicode(UTF-8)] を選択 Firefox をご利用

■POP3の廃止について

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

(2) [ バックアップツール ] が表示されます [1] [2] [3] [4] [5] [6] Windows Storage Server 2012 バックアップ手順 (V_01) < 画面の説明 > [1] バックアップ項目リスト登録されているバックアップセットの一覧です [2] 新規 ボタ

SHOFU SureFile for DentalX Manual

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

1. 開発ツールの概要 1.1 OSS の開発ツール本書では OSS( オープンソースソフトウェア ) の開発ツールを使用します 一般に OSS は営利企業ではない特定のグループが開発するソフトウェアで ソースコードが公開されており無償で使用できます OSS は誰でも開発に参加できますが 大規模な

システム要件 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

目次 目次 準備いただくもの 準備 SQLServer2008 R2 ExpressEdition のインストール インストールの前に インストール 設定一覧 機

ユーティリティ 管理番号 内容 対象バージョン 157 管理情報バッチ登録コマンド (utliupdt) のメッセージ出力に対し リダイレクトまたはパイプを使用すると メッセージが途中までしか出 力されないことがある 267 転送集計コマンド (utllogcnt) でファイル ID とホスト名の組

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

Enterprise Architect 12.1 機能ガイド

ARCHITREND ZERO バージョンアップ/オプション追加編

開発・運用時のガイド JDK8への移行に伴う留意点 [UNIX]

スライド 1

WebOTX V6 JDBCアプリケーションのトラブルシューティング(JDBCデータソース)

Transcription:

データベースアプリケーション構築技法 Delphi C++Builder によるメンテナンス性を考慮した開発 第三章 : 旧バージョンから BDS 2006 への移行

移行に関する注意事項 移行の必要性 BDS2006 での旧 Delphi / C++Builder から変更点 BDE の現状 データアクセスフレームワークを変更するか否か? データアクセスロジックをどのように扱うか データアクセスロジックをどのように変更するのか? メンテナンス性の高いシステム 低いシステム 移行に関する一般的な手順

移行の必要性 例 ) Oracle 8i をターゲットに Delphi 6 で作成されていたシステム Delphi 6 + BDE + SQl-Link for ORACLE + Oracle 8i ハードウェア ソフトウェアのライフサイクルやサポート期間の終了による変更などがあった場合 どのように対応するか 外的要因により 現状のシステム ( アプリケーション ) の変更を行なわなければならない 稼動するプラットフォーム (Windows) のバージョン サポート期間 ターゲットとなる DBMS のバージョン サポート期間 ハードウェアの変更 これらの要因に対応するには どのようにすれば良いのか? 新しい BDS を利用してシステムを構築し直す必要がある? システム再構築のために開発環境を最新の物に移行する場合 開発環境の違いを知る必要がある

移行に関する注意点 Delphi / C++Builder / および VCL ライブラリは 可能な限り 高い下位互換性を保持するようにバージョンアップを繰り返している ただし完全では無く 例えば VCL ライブラリではバージョン間で互換が失われる個所がある 新しい機能の追加などに対応する為 ライブラリ構成の見直しの為の修正 3 rd Party 製コンポーネントの提供終了 推奨されないコンポーネントのパッケージからの削除 以前のプロジェクトを全く作業無しに完全な形で移行は難しい場合がある 特に開発環境のバージョンが開いた場合などに顕著となる Delphi 5 で作成されたソースを BDS 2006 へ移行する場合など 基本的に多くのコードは流用可能だが 移行先のバージョンが移行元のバージョンから 何がどのくらい変更されているかを把握する事は重要となる

BDS2006 での旧 Delphi / C++Builder から変更点 1 BDE の取り扱いの変更があった ( 後述 ) BDE の DBMS サポートの正式終了 Delphi が採用しているクラスライブラリ VCL の互換性 VCL のバージョン間の互換性は極力 それを維持している やむを得ない事情などによってはその限りではない 例 ) データベース関連のクラス定義などを dbexpress 導入前後で見直し BDE / DBExpress など複数のデータアクセス技術に対応するため TDataSet クラスの位置付けや定義が変更されている BDE 用の抽象クラス -> 汎用データセット抽象クラス 変更によってインターフェイス間の互換の問題が出た場合 新しいクラスの仕様に合わせコードを適切に変更する 3rd Party 製品での互換性の問題 新しいバージョンに対応していない可能性 VCL の互換性と同等の問題 例として Office 製品ではバージョンが変更で 以前のバージョンではプロパティであったものが 以後のバージョンでは同じ名前のプロシージャに変わっていたなどの実例がある

BDE の現状 BDEの開発およびメンテナンスは Delphi 7 付属の BDE 5.2 にて終了 最新の BDS 2006 において BDEはローカルデータベースファイルへアクセスするエンジンとして残されているが SQL- Link は廃止されており 付属しておらず BDE からの DBMS への接続はサポートしていません Oracle 8i / InterBase 6 等 旧バージョンの DBMS での対応で終了 今後の提供予定なし BDS 2006 に付属の BDE でも ODBC 経由での DBMS への接続は技術的に可能だが その動作はサポート対象外 関連資料 : The Future of the BDE and SQL Links http://bdn.borland.com/article/0,1410,28688,00.html

BDS2006 での旧 Delphi / C++Builder から変更点 2 VCL のライブラリ構成の変更 ユニット名の変更 クラスの定義が別ユニットへ移動 この問題に遭遇した場合の対処法 症状理由対処法症状理由対処法 未定義の識別子 コンパイルエラー クラスの定義がない マイグレーション作業で新しいユニットを USES 節に反映する 型の不一致 コンパイルエラー 偶然にも同名のクラスやレコード型などが複数のユニットに宣言されていると 従来適用されていた型がスコープから外れ 他方の型が適用されてしまう ( この場合 識別子は見つかっているため 未定義 とは報告されない ) 以前のバージョンのフレームワークを解析し 適切な名前空間が反映されるように コードを修正する

BDS2006 での旧 Delphi / C++Builder から変更点 3 クラスライブラリのフォント / 文字コード関連の変更 VCL アプリケーションのデフォルト フォントの変更 Delphi 2005 以降の Font プロパティを持つ VCL クラスにおける変更 デフォルトのフォントが MS P ゴシック 9pt から Tahoma 8pt に変更 デフォルトの Charset が SHIFTJIS_CHARSET から DEFAULT_CHARSET に変更 旧プロジェクトに新規フォームを追加する場合など注意が必要 この問題に遭遇した場合の対処法 症状 理由 対処法 設定を変更せずに Windows XP でコンパイルすると Windows 98 環境で実行したときに文字化け Font / Charset のデフォルト値が変更され 初期値のままでは Windows9x では表示できなくなった為 Charset を SHIFTJIS_CHARSET に変更し 再コンパイルする

BDS2006 での旧 Delphi / C++Builder から変更点 4 ヘルプシステムの取り扱い方式の変更 デフォルトのヘルプファイルの取り扱いが WinHELP から HTMLHelp に変更 (Delphi 2005 以降 ) Delphi 2005 以降で WinHELP を利用するには WinHelpViewer ユニットを USES 節に指定する レポートツール QuickReport の使用 C++Builder6 / Delphi7 まで提供されていた QuSoft 社の QuickReport は このバージョンでは提供を受けていない これを利用した実装がある場合は 次の 2 つから選択する 別の機能に置き換える 例 :RaveReports 等 別途 QuSoft 社から QuickReport を購入する http://www.qusoft.com/ 国内での購入方法については 弊社問い合わせ窓口まで お問い合わせください

BDS2006 での旧 Delphi / C++Builder から変更点 5 STL の変更 (C++Builder) 付属の STL が STLport から Dinkumware へ変更されています MakeFile 作成ツールが付属していない (C++Builder) 別途 Borland のダウンロードサイトより入手可能 BDSProj2Mak http://www.borland.com/downloads/registered/download_bds.html NetMaster 系のネットワーク関連コンポーネントの廃止 オープンソースで提供される Indy ライブラリのみが付属 http://www.indyproject.org/

古いコードを変更する際のテクニック 古いバージョンの Delphi でコンパイルできる可能性を残す IFDEF の利用 バージョンの互換性を単一コードで確保できない場合などに利用する コンパイラの条件定義 IFDEF を利用しコードを分割する 条件指令の指定方法 {$DEFINE } を利用する プロジェクトオプションの [ ディレクトリ / 条件 ] の条件指令に指定する 埋め込みバージョン定義を利用する Delphi 7 VER150 BDS 2006 の Delphi Win32 VER180 ただし埋め込みバージョン定義を用いる場合 コンパイラのマイナーバージョンアップに伴い 定義も変更される恐れがあるので注意! {$IFDEF VER150} //Delphi 7 固有のコード {$ELSEIF VER180} //Delphi 2006 固有のコード {$ELSE} //Delphi 7 でも Delphi 2006 でも無い場合 {$ENDIF}

データアクセスフレームワークを変更するか否か? 旧 Delphi / C++Builder + BDE + DBMS で構成されていたシステム BDS では BDE + SQL-Link による DBMS へのアクセスをサポートしない BDE + SQL Link から他の接続形態を利用するように変更しなければならない データアクセスロジックをどのように扱うか BDE + ODBC による接続設定変更のみでの対応 現行のシステムに手を入れたくない 正規にサポートされない接続形式 開発者の責任において行なう 変更作業の大半は テスト テスト テスト に費やす テストケースの作成 現行のシステムを修正する ADO Express / DBExpress 等を利用 正規にサポートされる範囲での組み合わせで利用可能 システムに対し ある程度の規模の修正が必要

現行のシステムを修正する場合 データアクセス部分のコードを変更する データアクセスコンポーネントを違う物に置き換える BDE -> ADO Express / DBExpress / IBExpress or 3 rd Party 製品等 置き換えたコンポーネント用にコードを書き換える 各接続形式に対応したデータアクセスコンポーネントは 細かい部分での動作に違いがある 接続設定の扱い トランザクションの扱い データの取得された結果やその扱い データベース ミドルウェアエラーのハンドリング方法や その扱い 必要に応じ コードを書き換える必要がある メンテナンス性の高いシステム 低いシステム 変更要件 現行システムの仕様 様々なファクターで必要な工数は変わる 特にメンテナンス性の低いシステムでは工数は飛躍的に増える傾向にある

メンテナンス性の高いシステム 低いシステム 適切なクラス設計をしているメンテナンス性の高いシステムの移行は比較的容易になる傾向がある データ操作を正しく抽象化 カプセル化しているか否か? 悪い例 TDabase.Open(); をフォームのイベントで呼んでいる 検索をフォーム上の TTable クラスの Filter プロパティで処理している 良い例 自分で作成した DataModule に DBConnect 等の関数を作成し TDabase.Open(); をその中から呼んでいる 自分で作成した DataModule に検索用の関数を用意してある メンテナンス性の高い / 低いで移行の作業内容は大きく変わる 変更箇所の把握が行ないやすい 変更に対するほかの個所への影響が把握しやすい 関連する場所への影響を最小限に留められる 画面上のイベントなどに散乱したデータ操作コードを探し出し一つづつ直す 直し忘れや不適切な修正方法 修正によるほかのコードとの競合など問題がある メンテナンス性の高いシステム メンテナンス性の低いシステム

メンテナンス性の高いシステム 低いシステム 例えば データベース ミドルウェアエラーのハンドリングの変更方法を考えた場合 BDE でのデータベースエラーは EDBEngine クラス の例外となる 他のコンポーネントに置き換えた場合 別のクラスの例外となる 例外ハンドリングで try Except on EDBEngine do を利用できない 例外のエラーコードやメッセージも変わる 例えば try Except on E:EDBEngine do begin 等で e.message と取得するメッセージは同じではない どうすれば良いのか? 単に例外クラスのみ置き換えるだけでは終わらない どのようなエラーが発生した場合にどのようにするかを確認し 適切に直す必要がある

データベース ミドルウェアエラーのハンドリングの変更 このような問題を回避するために データ操作ロジックと同じように例外を抽象化することが有効 VCL フレームワークで提供されているエラーをアプリケーション固有の例外クラスを作成し抽象化しておく データアクセス操作と同様 その結果としての例外もデータモジュール側で処理する 例えば単純なデータベース接続に関する実装の場合 Form Form 側は側は Connect Connect 関数を呼び関数を呼び出し 失敗は出し 失敗は TMyErrorClass TMyErrorClass でハでハンドリングしているので変更の影ンドリングしているので変更の影響が無い響が無い TMyErrorClass = class(exception);... procedure TMyDataModule.Connect; begin SQLConnection.ConnectionName DataBase.Params := getconnectionname(); := getconnectionname(); Try DataBase.Open(); SQLConnection.Open(); except on EDBEngineError DatabaseError do do raise TMyErrorClass.Create(' 正常に接続できませんでした '); end; end;

移行に関する一般的な手順 1 計画 準備 移行前修正 変更 何を移行するのかを明確化 漏れがないように また必要のないものまで移行しないように 1 移行の影響調査 テストアプリケーションの作成 バックアップ後 テスト環境で事前コンバートのテストを行なう 移行に必要なソースコードを準備する 2 パッケージ ソースコード 外部コンポーネントのソース プロジェクトソースコード ( 旧バージョンでビルド可能な物 ) 移行前に 旧バージョンの Delphi / C++Builder で作業 既存の問題点の解消 3 移行に際し 問題となりそうな個所の切り出しと修正 少しでもメンテナンス性の高いシステムとして構成を変更するのも有効 開発環境移行前に 既存プロジェクトの問題を解決しておけば 移行後に発生した問題が 従来からの問題か 移行による問題なのか切り分けが容易になる

移行に関する一般的な手順 2 BDS2006 への移行 動作確認テスト パッケージ / コンポーネントのインストール 4 必要な場合 修正を行いインストールする プロジェクトファイルのコンバート 旧バージョンの Delphi / C++Builder のプロジェクトを BDS 2006 で開く Win32 プロジェクトへコンバートする 必要な場合 修正を行ない ビルドする 修正作業 データベースアプリケーションの場合 コンポーネントや関連コードの変更など 5 必要な場合 ユニットテストなどを用いる テストを繰り返す

この章のまとめ 旧 Delphi / C++Builder から BDS 2006 への移行はプランニングが重要 特にデータベースアプリケーションでは そのフレームワークの違いによる移行方法の検討が非常に重要となる BDE を利用しているシステム BDE はサポートが終了しており最新の DBMS をサポートしていない アーキテクチャの理解 もちろん 多くのコンポーネントの機能に対して互換性は確保してある プロトタイプによるテスト等も有効な手段となる どのような開発にも当てはまるが メンテナンス性の高いシステムほど移行は楽になる 移行に関する一般的な内容は解説したが やはり移行はアプリケーション毎に千差万別であり 充分なプランニングの上で行なって欲しい