25th Developer Camp

Similar documents
25th Developer Camp

25th Developer Camp

25th Developer Camp

21st Embarcadero Developers Camp T3

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

17th Embarcadero Developer Camp

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

20th Embarcadero Developer Camp

CodeGear Developer Camp

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

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

24th Embarcadero Developer Camp

ミガロ.製品 最新情報

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

Notesアプリが iPadで動くDomino Mobile Apps ご紹介

10th Developer Camp - B5

17th Embarcadero Developer Camp

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

Visual Studio with Cordova クロスプラットフォーム開発の全貌

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

新バージョンDelphi/400 XE7ご紹介 - マルチデバイスデザイナ機能で開発効率アップ! -

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


スライド 1

28th Embarcadero Developer Camp

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

Delphi/400開発ノウハウお教えします 情報を守ろう!安全性を高めたWebシステムの構築

Windows開発者のためのFireMonkeyモバイル開発入門

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

~ アドレス収集くん ~ セキュリティ対策御説明資料

LightSwitch で申請システム Windows ストアアプリで受付システムを構築してみた 情報政策グループ技術職員金森浩治 1. はじめに総合情報基盤センターでは 仮想サーバホスティングサービスや ソフトウェアライセンス貸与といった さまざまなエンドユーザ向けサービスを行っている 上記のよう

チャレンジ!dbExpress接続

Windowsユーザでも 手軽に作れるiPhoneアプリ

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

Delphi/400活用! スマートデバイスアプリケーション開発

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

IBM i ユーザーの課題 モバイルや IOT に対応した新しい開発案件への対応 RPG COBOL など既存アプリのメンテナンス 要員の確保 属人化しない運用 管理体制 2

Oracle SQL Developer Data Modeler

Silk Central Connect 15.5 リリースノート

使用する前に

目次 はじめに 4 概要 4 背景 4 対象 5 スケジュール 5 目標点 6 使用機材 6 第 1 章 C# 言語 7 C# 言語の歴史 7 基本構文 8 C 言語との違い 9 Java 言語との違い 10.Netフレームワーク 10 開発資料 10 第 2 章 Mono 11 Monoの歴史 1

FastReportにおまかせ! ~印刷もPDFもラクラク開発~

Delphi XE 機能評価ガイド

IBM Cognos 10 Upgrade FAQ

5th CodeGear Developer Camp [A3]

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

LDAP Manager SupportList

21st Embarcadero Developer Camp T9

バージョン比較表 SPREAD for ASP.NET

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

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

--

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

新OS使用時の留意事項

( 目次 ) 1. はじめに 開発環境の準備 仮想ディレクトリーの作成 ASP.NET のWeb アプリケーション開発環境準備 データベースの作成 データベースの追加 テーブルの作成

intra-mart FormatCreator Version6.1

Control Manager 6.0 Service Pack 3 System Requirements

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

WSMGR for Web External V7.2 L50 ご紹介

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

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

報道関係者各位 プレスリリース 2019 年 01 月 15 日 株式会社ネオジャパン グループウェア desknet's NEO バージョン 5.2 を 1 月 15 日に提供開始 ~ 業務アプリ作成ツール AppSuite との連携を強化 他にも AppSuite 連携 API 公開など多数の機

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

c5

Qlik Sense のシステム要件

ArcGIS for Server 機能比較表

IBM i のスマート・デバイス活用【HATSのiPhone / iPadサポート編】

新製品 Arcserve Backup r17.5 のご紹介 (SP1 対応版 ) Arcserve Japan Rev. 1.4

Embarcadero Developer Camp

Microsoft PowerPoint - Tutorial_2_upd.ppt

Source Insight

Delphi/400を利用したはじめてのWeb開発

OneDrive for Businessのご紹介

スライド 1

2. 生田仮想デスクトップ PC の接続方法 生田仮想デスクトップ PC に接続する方法は 次の 2 通りです 1. HTML アクセス Internet Explorer や Safari などのブラウザを用います PC に特別なソフトウェアをインストールす る必要が無いので 管理者権限をもってい

intra-mart Accel Platform

Veritas System Recovery 16 Management Solution Readme

Transcription:

B1 Delphi/C++Builder ild テクニカルセッション 株式会社ドリームハイブ代表取締役 IT コンサルタント山本悟

マルチデバイスに対応できる DB アクセス形態を作るには? 実践テクニック

自己紹介 会社 : 株式会社ドリームハイブ 会社 URL :http://www.dreamhive.co.jp/ お得なコンテンツ配信サイト :http://dhive.jp/ 名前 : 山本悟 ( やまもとさとる ) ドリームハイブ代表取締役 & ITコンサルタント ブログ :http://dhive.jp/blog/yama/ facebook :http://www.facebook.com/kryu2 twitter :http://twitter.com/kryu2h i /k 2 山本はこんな感じの人 : 17 歳から IT 業界へ Delphi は1.0からの親友 テレビ埼玉に出たり ドリームハイブの経営 ITコンサルティング システム開発 スピーカーなどが主な仕事 3

本日の内容 拡張しづらいシステム構成 問題が起こるケース 拡張しやすいシステム構成 構成を具体的に考える ベストプラクティスのまとめ このセッションは テクニカル セッションです Delphi/C++ Builder 製のデータベースアプリケーションの 構築方法について 私の主観と経験に基づいてお話しいたします あなたにとって最適解では無いかもしれませんが 参考になると思います 4

拡張しづらいシステムの特徴 単層 / 二層構造 単一クライアント デスクトップアプリケーション PC デスクトップアプリケーション BL: ビジネスロジック UI: ユーザーインターフェイス BL UI TTable/TQuery など DB 5

BDEのみはもっともダメなパターン Form に TTableとか直置きのアプリのパターン データベース 6

そのままだと最新 OS では動きません ルートディレクトリにファイル書き込んじゃうし 対処方法 http://dhive.jp/blog/yama/?p=2679 7

最低限 BDE アプリは互換コンポーネントで 置き換えましょう BL: ビジネスロジック UI: ユーザーインターフェイス PC デスクトップアプリケーション BL UI TTable/TQuery など DB PC デスクトップアプリケーション BL UI TXXTable/TXXQuery など DB 移 は簡単ですが ユーザーが単数の場合の暫定的な対処です 8

問題が起こるケース それは要求 変更!! 例 ) 複数の PC から見られるのは当たり前だろオーダーが入った! 社長から Web が主流らしいじゃんの鶴の一声が出た! 最近流行のモバイルアプリに対応しろオーダーが入った! 何が問題となるのか 複数クライアントから同時アクセスを想定しなければならない クライアント環境が複数存在する事になる クライアントへの配布が難しい クライアントアプリケーションのバージョン管理が難しい 他のシステムやライブラリを利用する確率が増える 社内サーバに社外から直接アクセスできなければ 中継サーバが必要になる 社内外間のネットワーク負荷が増大する DBへの同時接続数の問題が発生する 9

拡張しやすいシステムの特徴 移り変わる運用環境これまでも これからも 企業システムの多くが Web を主軸に BYODの増加 モバイル タブレット 整備されてきたクラウドサーバー環境 Amazon Web Services Windows Azure Platform Google App Engine 今後ますます増えるクライアントデバイスの種類 IaaS(Infrastructure as a Service) PaaS(Platform as a Service) などがキーワード オートスケーリングなど柔軟な拡張性を持っています 拡張性を確保するには機能ごとのレイヤー分割が必須! 10

レイヤー分割 = 多層化 PC デスクトップアプリケーション 単層 BL UI TTable/TQuery など DB DB サーバ PC デスクトップアプリケーション 層 BL UI TTable/TQuery など DB DataSnap サーバなど DB サーバ PC デスクアプリ 多層 UI BL TTable/TQuery など DB モバイルや Web モバイルアプリ UI BL: ビジネスロジック UI: ユーザーインターフェイスイス 11

各レイヤーごとに変更を吸収できる IaaS/PaaS がサービスする範囲 クライアントレイヤー ビジネスロジックレイヤー データレイヤー PC デスクアプリ UI BL DB モバイルや Web モバイルアプリ UI BL: ビジネスロジック UI: ユーザーインターフェイス RAD Studio が開発をサポートする範囲 12

Delphi/C++ Builder の構成を 具体的に考える 拡張に強い設計を考える前に気をつけるべきポイント 動作する OS のバージョン 開発する Delphi/C++ Builder のバージョン 使用する文字コード データベース接続で利用しているフレームワークの種類 13

構築する環境の基準は? OS Delphi のバージョン ~ Delphi 6 98~ 2000~ XE3を買えば 2000~ 過去のバージョンも (8 対応 ) XP XP (Vista 使えます対応 ) \(^_^)/ Mac OS Delphi 7 Delphi の場合 D7, と 2007 以降 (2007, 2009, 2010, XE, XE2, XE3) C++Builder の場合 CB6 と, 2007 以降 (2007, 2009, 2010, XE, XE2, XE3) ~Delphi 2006 Delphi 2007 Delphi 2009~ 7 対応は 2010 から Delphi XE2 Delphi XE3~ 文字コード ANSI UNICODE データベースの BDE フレームワーク DBX DBX FireDAC 98 が必須 Vista 以降の OS Vista 以降の OS +ANSI +UNICODE 14

過去のプロジェクトの移行はどうする? とりあえず だいたい動きます \(^_^)/ プログラムの 互換性 タブを使用するとか 新しい Delphi に切り替えるだけでも効果ありです ドライバ パッケージ ソースなどが更新されています 新しいコンパイラによる効果 ( 最適化や新機能が有効になる ) があります 15

規模が小さい プロジェクトの移行であれば とりあえず新しい Delphi で開いてみましょう ただし 規模の大小に関わらず Delphi 2007 より前のプロジェクトについては一度 Delphi 2007へ移行してから 最新の Delphiに移行することを強くオススメします 16

開発環境はどうする? 仮想環境を構築するのがオススメ 仮想化 :1 台のコンピュータを あたかも複数台のコンピュータであるかのように論理的に分割し それぞれに別の OS を動作させることで 複数の環境を少ないリソースで比較的安全に構築することができる Hyper-V: マイクロソフト VMWare: ヴイエムウェア Xen: シトリックス システムズ ジャパンシなど 複数の環境 = 複数のPC 複数の環境を 1 台のPCで

拡張しやすい構成 拡張しやすいとは 理想は 変更数ゼロ コードの追加のみで機能追加などができること 設計の例 データモジュールを利用する クラスだけでなく 例外処理などもカプセル化する BDE+ClientDataSet への変更作業を中間に挟む FireDAC を利用する メソッド内でオブジェクト参照を付け替える var MyMemo: TMemo; begin MyMemo := Memo1; MyMemo.Lines.Add('AAA'); MyMemo.Lines.Add( Add('BBB'); MyMemo.Lines.Add('CCC'); end; 18

ちょっとだけ FireDAC の説明

拡張しやすい構成への変更例 絶対ダメ構成とりあえず逃げの構成素晴らしい構成 BDE+ClientDataSet 構成のデータモジュール DBX 構成のデータモジュール BDE 構成のデータモジュール FireDAC 構成のデータモジュール

BDE のみ データベース 21

BDE+DataModule 22

FireDAC+DataModule 23

FireDAC+DataModule+IntraWeb アプリ構成 データベース 実 結果 24

FireDAC+DataModule+DataSnap +FireMonkey DataSnapServer.exe データベース DataSnapClient.exe 25

サンプル ( 見せる? 作る?) DataModuleへの切り出し 既存クライアントの作成 Web アプリの作成 更に DataSnap インターフェイスの作成 iosアプリの作成 クラウドに展開してみる 案件成功ばんざーい \(^_^)/ http://docwiki.embarcadero.com/radstudi o/ja/tdatamodule_%e3%81%ae_classgr oup_%e7%96%91%e4%bc%bc%e3%83 %97%E3%83%AD%E3%83%91%E3%83 %86%E3%82%A3 26

工数を比較してみる 規模単層 / 二層多層 設計小 多層は設計に 大 製造小 大 テスト小 大 時間がかかる 多層は製造にも時間がかかる 多層はテストが楽 移行小 多層は移 が楽 大 拡張小 多層は 大 拡張しやすい 27

まとめ レイヤー構成の範囲を明確にすること 利用するプラットフォームによって 利用できる技術が変わります 利用できる技術が変わります 対応するクライアントによって 製作のしやすさが変わります データベースの構成は DBX のみ もしくは FireDAC にすること DBX フレームワークを利用していれば 多層化対応のコンポーネントが多数揃っています 既存のプロジェクトの移行案件であれば ( 特に BDE からの移行案件であれば ) FireDAC の構成へ変更するのが簡単です リファクタリングはこまめに行うこと RADの本来の機能を十分に使いましょう Delphi 2005 以降 リファクタリングのための機能が数多くIDEに統合されています 複数のバージョンがテストできる環境を用意すること ここ数年で 仮想環境構築のコストは極端に下がっています 実機よりも仮想環境! 環境依存の問題を検証をするのにかかる人件費よりも安いです 28

メルマガもご登録ください ( 期間限定 ) http://www.dreamhive.co.jp/25thdc/ / パスワード :25thdc

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

B4 Delphi/C++Builder ild テクニカルセッション 株式会社ドリームハイブ代表取締役 IT コンサルタント山本悟

Web/ モバイル系アプリでの帳票を考える

自己紹介 会社 : 株式会社ドリームハイブ 会社 URL :http://www.dreamhive.co.jp/ お得なコンテンツ配信サイト :http://dhive.jp/ 名前 : 山本悟 ( やまもとさとる ) ドリームハイブ代表取締役 & ITコンサルタント ブログ :http://dhive.jp/blog/yama/ facebook :http://www.facebook.com/kryu2 twitter :http://twitter.com/kryu2h i /k 2 山本はこんな感じの人 : 17 歳から IT 業界へ Delphi は1.0からの親友 テレビ埼玉に出たり ドリームハイブの経営 ITコンサルティング システム開発 スピーカーなどが主な仕事 3

4 本日の流れ モバイル スマートフォンに対応するアプリの開発方法とは? RAD Studio XE3を利用した Wb Web アプリの開発手法を紹介 デモ まとめ このセッションは テクニカル セッションです Delphi/C++ Builder 製の Webアプリケーションの構築方法についてションの構築方法について 私の主観と経験に基づいてお話しいたします あなたにとって最適解では無いかもしれませんが 参考になると思います

モバイル スマートフォンに対応するには? C1,C2セッションで説明がありました メリット アプリが動くデバイスの機能をほぼ全て使うことができる ネイティブアプリで対応する方法 デメリット 各デバイスごとにアプリ開発をする必要があり 多くの場合データ保存などで互換性が無い Webアプリで対応する方法 メリット 本セッションで説明いたします 全てのモバイル スマートフォンでWebブラウザが利用できるので 開発の手間が少ない イントラネットなどの特定ドメイン内での展開が簡単 デメリット ネイティブアプリに比べて機能制限があり 動作速度が低下する

モバイル スマートフォンの 動作確認環境はどうする? 実機 一番確実な確認環境であり 最終的には行わなければならない仮想環境 iphoneシミュレーター 取得元 :AppStore - Xcode Androidエミュレーター 取得元 :http://developer.android.com/sdk/ Windows Phoneエミュレーター 取得元 :http://www.microsoft.com/ja-jp/download/details.aspx?id=27570 com/ja jp/download/details aspx?id 参考 : シミュレーターとエミュレーターの違い シミュレーターソフトウェアを模倣する 再現性はそこそこ 動作速度は速い バイナリ互換が無い エミュレーターハードウェアを模倣する 再現性は完璧 動作速度は遅い バイナリ互換がある

RAD Studio の Web 対応技術 WebBroker URIに関連づけたイベントハンドラを作成できる イベント駆動型 Webサーバーアプリケーション作成用フレームワーク Web Application Web Module (WebSnap: 廃止予定であり サポートは終了している ) WebBrokerを拡張したデータ駆動型 Webサーバーアプリケーション作成用フレームワーク IntraWeb(VCL for Web) RAD スタイルで Web サーバーアプリケーションを作成できる GUI フレーム ワーク Atozed 社が提供している DataSnap JSON/REST 形式のWebサーバーアプリケーションを作成できるフレームワーク

デモ WebBrokerによる Webサーバーアプリケーションの作成 1 WebBroker リクエスト TWebRequest TWebModule Actions レスポンス TWebResponse Content <html> </html> PathInfo に割り当てられた URL に応じて WebActionItem 毎に HTML データを 成 プログラムで HTML を 成 パターン

デモ WebBrokerによる Webサーバーアプリケーションの作成 2 WebBroker リクエスト TWebRequest TWebModule Actions レスポンス TWebResponse Content <html> </html> Pathinfo に割り当てられた URL に応じて WebActionItem 毎に HTML データを 成 外部のファイルを読み込む パターン

デモ WebBrokerによる Webサーバーアプリケーションの作成 3 WebBroker リクエスト TWebRequest TWebModule Actions レスポンス WebActionItemAction イベント TWebResponse Content <html> 2013/04/23 14:45:00 </html> TPageProducer Content <html> 2013/04/23 14:45:00 </html> HTMLDoc <html> <#NOW> </html> 外部のテンプレートファイル <html> <#NOW> </html>

デモ IntraWebによる Webサーバーアプリケーションの作成 1 IntraWeb リクエスト レスポンス TIWAppForm IW Control など TIWButton TIWList TIWImage TIWEdit TIWFile TIWUserSession ユーザー用セッション

デモ IntraWebによる Webサーバーアプリケーションの作成 2 IntraWeb TIWAppForm DataModule リクエスト レスポンス TIWUserSession ユーザー用セッション dbdemos. gdb

デモ IntraWebによる Webサーバーアプリケーションの作成 3 リクエスト IntraWeb TIWAppForm レスポンス TIWForm.Create(WebApplication).Show TIWAppForm Self.Release

参考リンク jquery Mobile http://jquerymobile.com/ ThemeRoller for jquery Mobile http://jquerymobile.com/themeroller/ TMS IntraWeb iphone Controls Pack http://www.tmssoftware.com/site/tmsiwiphone.asp

FastReport で帳票を作成する FastReportとは UNICODEをサポートしトし バイナリへの埋め込みが可能な多機能レポーティングソリューション 主な特徴 Delphi 4 XE3,C++ Builder 6 XE3をサポート Mono 版 FMX 版も存在する UNICODEをサポート 競合製品に比べて安め Delphiの実行用バイナリにライブラリごと埋め込むことが可能 埋め込みでも外部ファイル参照でもデザインしたレポートを利用可能 バンドによるレポート構成なのでト構成なので Quick Report や Rave Report から移行しやすい 縦型バンドもあります テキスト 画像 線 図形はもちろん チャート バーコード クロステーブル OLEオブジェクト リッチテキスト などが使用可能 ランタイムデザイナを搭載 しかもロイヤリティフリー レポート内にデータセット (ADO, BDE, DBX, IBX, FIB) を組み込み事が可能 Script(FastScript) に対応 (PascalScript, C++Script, BasicScript, JScript) プリンタ以外にも出力先が指定可能 (PDF, RTF, XLS, XML, HTML, JPG, BMP, GIF, TIFF, TXT, CSV, ODF) レポートの継承関係を作成することが可能 クロスタブタイプ ドリルダウンタイプのレポートの作成が可能

16 Edition によって使えない機能 Embarcadero RAD Edition Enterprise Edition RunTime end-user designer Vertical Bands Cross Tabs Dialog forms designer Interbase Express (IBX), IBOjects, ActiveX Data Objects (ADO), dbexpress support Excel Binary Excel XML E-Mail Script Components for webapplications

デモ FastReportによるレポートの生成 1 FastReport TfrxPDFExport PDF frxreport1.export(frxpdfexport1); TfrxReport 外部のレポートデザインの利 も可能 デザイン.fr3

ちょっとだけ FireDAC の説明

デモ FastReportによるレポートの生成 2 FastReport TfrxPDFExport PDF frxreport1.export(frxpdfexport1); TfrxReport Data デザイン TfrxDBDataset Dataset データベース

デモ IntraWeb + FastReport によるレポート生成 IntraWeb FastReport リクエスト WebApplication.SendStream() レスポンス PDF TIWAppForm TMemoryStream TfrxPDFExport TfrxReport デザイン

まとめ モバイル スマートフォンへの対応方法は 2 種類ある ネイティブアプリを作り パフォーマンスを優先する方法 Webアプリを作り スケラービリティを優先する方法 Web アプリ対応の開発方法は 2 種類ある IntraWeb による RAD スタイルで開発する方法 DataSnap によってビジネスロジックを Webサービスで公開し それを利用するアプリを開発する方法

メルマガもご登録ください ( 期間限定 ) http://www.dreamhive.co.jp/25thdc/ / パスワード :25thdc

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

B5 VCL ユーザーのための FireMonkey 入門

はじめに FireMonkey とは? FireMonkey と VCL アプリケーションの外観 FireMonkey の便利なコンポーネント FireMonkey HD/3D アプリケーション データベースアプリケーション まとめ

B5 VCL ユーザーのための FireMonkey 入門

FireMonkey とは? XE2 から追加されたフレームワーク マルチプラットフォームに対応 Win32, Win64 (XP~, DirectX 必須 ) OS X (10.7~) ios (ios5.1 ~) ) プラットフォーム毎にネイティブアプリケーションを作成 (VM 等の中間層は無い ) CPU/GPU を利用した HD/3D アプリケーションの作成

FireMonkey フレームワーク IDE C++ Delphi FireMonkey + ラインタイムライブラリ DirectX OpenGL OpenGL ES OpenGL ES Windows OS X ios Android

B5 VCL ユーザーのための FireMonkey 入門

VCL vs. FireMonkey ey VCL FireMonkey Windows Mac OS X クロス開発なら ios FireMonkey Android ( 将来 ) Windowsに最適化 スタイル グラフィック効果 HD/3D OSレベルのAPIコール 既存の開発資産 データアクセス ビジネスアプリ エンターテインメント

FireMonkey の特徴 マルチプラットフォーム 同一ソースで Windows 32/64, Mac OS X ios アプリの開発 ネイティブアプリケーション C++ or Delphi FireMonkey Windows OS X ios Android

スタイルその 1 FireMonkey Windowsテーマの影響を受けない スタイルの切り替えで 1つのコンポーネントに対し別の動作を設定可能 VCL Windows のテーマの有無に影響されることが多い ( マニフェストを利用することもできます ) テーマなし テーマあり

スタイルその 2 XE2 より VCL にも TStyleManager が提供され FireMonkeyと同じように アプリケーション全体 コンポーネントに適用できるようになった ただし VCLスタイルをイチから作るのはかなりの労力 コード上で作成されたスタイルリソースを動的に切り替える場合は VCL の場合は Vcl.Themes FireMonkey の場合は FMX.Styles を uses に追加し 次のように記述 ( この部分は双方ほとんど変わらない )

スタイルその 3 FireMonkeyコード例 VCLコード例 //TStyleManager を利用した場合 procedure TForm1.Button1Click(Sender: TObject); Begin TStyleManager.SetStyle( TStyleManager.LoadFromFile( スタイルファイル名 ')); end; //Stylebook を利用した場合 procedure TForm1.Button2Click(Sender: TObject); begin StyleBook1.Resource.LoadFromFile( スタイルファイル名 '); end; procedure TForm1.Button1Click(Sender: TObject); begin TStyleManager.SetStyle( スタイル名 '); end;

スタイルその 4 プロジェクトチームでの開発時もムでの開発時も スタイルを使えば統一した外観の設計が楽 コンポーネントのような パッケージのビルドやインストール作業は不要 FireMonkey なら後述する効果 アニメーションの組み合わせも自在 プロパティの変更だけで丸いボタンも楽に作成

コンポーネントの組み合わせ FireMonkey TControl の機能が拡張され何でも親子関係に 複雑なインターフェースもコンポーネントの組み合わせで作成可能 VCL 親子関係にできるものが限られている 組み合わせによっては自力で描画

アニメーション FireMonkey プロパティの設定だけで コンポーネント自身に動きを付けられる 開始値と終了値を指定し それに沿って遷移 一連の値リストに沿って遷移 従来のコンポーネントにドラッグ & ドロップで追加するだけ TAniIndicator VCL 例えば TTimer を使ってイベント内でコードを記述 TAnimate で.avi ファイルを再生

効果 FireMonkey 豊富な効果コンポーネント 複数の効果の組み合わせも自在 コンポーネントにドラッグ & ドロップで追加するだけ VCL 自力描画 コンポーネントの作成

センサー ロケーション カメラ FireMonkey TLocationSensor, TMotionSensor 等コンポーネント, クラスが用意されている VCL 汎用的なクラスが用意されているので それを利用してコードを記述

コンポーネントアーキテクチャ FireMonkey アプリケーションのフレーム コンポーネント共に充実 HD(2D)/3Dの入れ子も可能 VCL 自力描画 ( プログラミング ) DirectX OpenGL GLS (O GL ベスの GLScene(OpenGL ベースの 3D ライブラリ ) 等を使用する

HD/3Dコンポーネント フレーム TViewPort3D 3D オブジェクト用のフレーム HD 上に置き 3D コンポーネントを配置することが可能 TLayer3D 2D オブジェクトを配置できる 3D レイヤ 3D コンポーネント TCamera TLight etc TCube TMesh TGrid3D TText3D etc

データベースフレームワーク 提供されているフレームワークは BDE を除き VCL/FireMonkey 共に同じ dbexpress IBExpress dbgo FireDAC BDE は ホントもう使うのを止めましょう

データアクセス FireMonkey DB 専用の表示コンポーネントは無い LiveBinding によりスタンダードの表示コンポーネント ( たとえば TEditや TLabel) を使用 複数の属性のカラムが扱える TGrid コンポーネント VCL TDBxxx のような DB 専用の表示コンポーネントが用意されている (DataSource 経由で使用 ) LiveBinding によりスタンダードの表示コンポーネント (TEdit 等 ) も使用可能

B5 VCL ユーザーのための FireMonkey 入門

FireMonkey 設計手法は VCL の時と変わらない マルチプラットフォーム (Windows/Mac OS X/iOS) に対してネイティブアプリケーションを作成できる Windows/Mac OS Xに関しては1つのコードで双方のプラットフォームのネイティブアプリが作成できる OSのネイティブAPIも使用できる 表現豊かなアプリケーションの作成 高解像度にも標準で対応 豊富なコンポーネントにより コード量の削減 更なる豊富り 量削減 更生産性 up

FireMonkey と VCL の使いどころ Mac OS X アプリケーション /ios アプリ開発を考えている方 FireMonkey 過去バージョンからの移行 FireMoneky e or VCL BDE アプリケーション データベース自身のマイグレーションと データベースアクセス部分を FireDAC や dbexpress に変更し FireMonkey or VCL 高解像度が必要なアプリケーション FireMonkey タブレット用アプリケーション FireMonkey ipad, Android, Windows 8

参考資料 デベロッパーキャンプアーカイブ http://www.embarcadero.com/jp/developercamp-japan/archive 第 24 回 - FireMonkey が得意とするビジネスアプリ の考察 第 23 回 - 見た目で楽しいDelphiプログラミング 第 22 回 - FireMonkey 道場 第 21 回 - FireMonkeyファーストインプレッション 第 20 回 - DelphiでGLSceneを使って簡単な3Dプログラミング

参考ビデオ YouTube Embarcadero Japan http://www.youtube.com/embarcaderotechjapan RAD Studio XE3 Webセミナーシリーズ Developer Direct Webセミナーシリーズ 過去のデベロッパーキャンプビデオ RAD Studio XE2ビデオシリーズ 8つのポイント

参考ビデオ ( 英語 ) YouTube Embarcadero Technologies http://www.youtube.com/user/embarcaderotechnet FireMonkey Tutorial Video Series 31 Days of RAD Studio XE2 Tutorial Series RAD Studio XE3 RAD Studio XE2

エンバカデロ内の技術情報 Embarcadero Developer Network (EDN) http://edn.embarcadero.com/jp Embarcadero サポート情報 http://support.embarcadero.com/jp Team Japan Blog http://blogs.embarcadero.com/teamj