14th Developer Camp

Similar documents
Embarcadero Developer Camp

12th Developer Camp

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

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

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

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

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

20th Embarcadero Developer Camp

8th CodeGear Developer Camp


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

17th Embarcadero Developer Camp

CodeGear Developer Camp

チャレンジ!dbExpress接続

Microsoft Word - Lab5d-DB2組み込みSQL.doc

Firebirdの歴史と概要

HULFT-DataMagic Ver2.2.0 製品対応OS

5th CodeGear Developer Camp [A3]

PowerPoint Presentation

25th Developer Camp

10th Developer Camp - B5

セットアップカード

CodeGear Developer Camp

Embarcadero Developer Camp

7th CodeGear Developer Camp

NEC COBOL SQL アクセス Server Runtime V1.0 COBOL SQL アクセス Server Runtime V1.0 (1 年間保守付 ) COBOL SQL アクセス Server Runtime V1.0 (1 年間時間延長保守付 ) セットアップカード SL438

21st Embarcadero Developers Camp T3

PowerPoint Presentation

24th Embarcadero Developer Camp

標準化 補足資料

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

ミガロ.製品 最新情報

Microsoft Word - JDBC-ODBCu691cu8a3c docx

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

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

リレーショナルデータベース入門 SRA OSS, Inc. 日本支社 Copyright 2008 SRA OSS, Inc. Japan All rights reserved. 1

Microsoft Word - tutorial3-dbreverse.docx

メール全文検索アプリケーション Sylph-Searcher のご紹介 SRA OSS, Inc. 日本支社技術部チーフエンジニア Sylpheed 開発者 山本博之 Copyright 2007 SRA OSS, Inc. Japan All right

mySQLの利用

Oracle Database Connect 2017 JPOUG

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

データベースアクセス

Oracle SQL Developer Data Modeler

intra-mart Accel Platform

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

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

iNFUSE インフューズ

Windowsユーザーの為のOracle Database セキュリティ入門

1,.,,,., RDBM, SQL. OSS,, SQL,,.

Embarcadero Developer Camp

PGECons技術ドキュメントテンプレート Ver.3

eラーニング資料 e ラーニングの制作目標 データベース編 41 ページデータベースの基本となる概要を以下に示す この内容のコースで eラーニングコンテンツを作成予定 データベース管理 コンピュータで行われる基本的なデータに対する処理は 次の 4 種類です 新しいデータを追加する 既存のデータを探索

Microsoft Word - JDBCドラバーの設定.doc

Microsoft Word - JDBC検証 docx

関係データベース

Visual Basic Oracle Database 11 Release 1

7th CodeGear Developer Camp

7th CodeGear Developer Camp

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

Microsoft PowerPoint - UseOSDB2.ppt

Oracle XML DB によるスケーラビリティおよびパフォーマンス検証 - MML v.3.0

SOC Report

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

21st Embarcadero Developer Camp T9

intra-mart FormatCreator Version6.1

Microsoft Word - Android_SQLite講座_画面800×1280

ADempiere (3.5)

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

CodeGear Developer Camp

検証報告書

DumpCollection IT Exam Training online / Bootcamp PDF and Testing Engine, study and practice

10th Developer Camp - G2

WCF と IIS を使用して OData プロデューサーを作成する

intra-mart Accel Platform — TableMaintenance ユーザ操作ガイド   第7版   None

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

VB.NET解説

FileMaker ODBC and JDBC Guide

iNFUSE インフューズ

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

20th Embarcadero Developer Camp

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

Oracle Database 12c

目次 はじめに 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

1. 検証概要 目的及びテスト方法 1.1 検証概要 PostgreSQL はカルフォニア大学バークレー校で開発された POSTGRES, Version 4.2 をベースにしたオープンソースのリレーショナルデータベース管理システムです PostgreSQL はオープンソースでありながら 商用リレー

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

HeartCoreインストールマニュアル

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

Oracle Database 11g Release 2 Application Development (.NET)

S2DaoでもN:Nできます

SOC Report

Oracle Database Clientリリース・ノート, 10gリリース1( ) for Microsoft Windows

25th Developer Camp

MySQL研修コース & 資格のご案内

現在 数多くの DBMS が存在しますが SQL の基本的なコマンドは標準化されており どの DBMS でもある程度同じものが利用可能です ただし それぞれの DBMS の機能の違いにより存在しないコマンドがあったり オプション指定が異なる場合があるため まったく同じとは言えません なお DBMS

目次 更新履歴... 1 はじめに... 3 レコードセット?... 3 準備... 5 SQL でデータを取得する... 6 データのループ処理... 7 列の値を取得する... 7 対象行を変更する (MoveFirst, MoveNext, MovePrevious, MoveLast)...

DB2 をバックエンドとした Delphi での Web サービスの構築 Marco Cantu ( 年 12 月 05 日 DB2 をバックエンドとした Delphi での Web サービスの構築 はじめに Borland TM 社の Delphi

スライド 1

Microsoft Word - SQLServer_fra_Linux_v1.1.docx

スライド 1

Transcription:

T3 Delphi C++ テクニカルセッション Delphi/C++Builder DB 総ざらい 株式会社日本情報システム筑木真志

アジェンダ Delphi / C++Builder からデータベースへ接続する際の手順についての概要をまとめて解説します Delphi / C++Builderデータベースプログラミングフレームワーク Firebird / InterBase MySQL PostgreSQL Oracle / SQL Server / DB2 C++Builderで埋め込みSQLを使用する (Oracle / DB2) 2

Delphi/C++Builder データベースプログラミングフレームワーク

データベースプログラミングフレームワーク Delphi/C++Builder は標準で以下のデータベースプログラミングフレームワークをサポートしています BDE(Borland Database Engine) InterBaseExpress dbgo(ado/oledb) dbexpress その他サードパーティ製品 オープンソース製品も多数 ZeosLib http://zeos.firmos.at/ FIBPlus IBObjects UniDAC http://www.devrace.com/en/fibplus/ http://www.ibobjects.com/ http://www.devart.com/dac.html 4

BDE(Borland Database Engine) BDE は Paradox をベースとしたフレームワーク 異種 DB 間でのクエリーのサポートなど 高度な機能もあるが すでに開発は中止 とはいえ 結構使われている TDataSource データアクセスコンポーネント TDatabase TTable RDBMS 5

InterBaseExpress InterBaseExpress は InterBase と接続するためのフレームワーク InterBaseAPI を直接利用するコンポーネントで構成されている ベースは 98 年に公開された FreeIBComponents TIBTransaction コンポーネントが分離しているのが特徴 複数のデータベースへの二相コミットに対応出来る TDataSource データアクセスコンポーネント TIBTransaction TIBDatabase TIBTable RDBMS 6

dbexpress dbexpress4 は Delphi6 から導入された dbexpress の最新版 Delphi2007 で version 4.0 になったが これまでのドライバも使うことは出来る 2009 の Professional 版は EULA によりリモート接続は不可 TDataSource データアクセスコンポーネント TDataSetProvider TDataSetProvider dbexpress Driver TSQLConnection TSQLTable RDBMS 7

dbgo dbgo は ADO(ActiveX Data Object) をベースとしたフレームワーク Delphi5 で ADOExpress として導入されて Delphi6 から dbgo という名前になった Professional 版でも Oracle や MSSQL などに接続できる Firebird / InterBase に接続するためには ibprovider が利用できる ibprovider http://www.ibprovider.com/eng/ Free Edition は Firebird2.0 InterBase6 まで 有償版では FB2.5 IB2009 まで対応 TDataSource データアクセスコンポーネント OLEDB Provider TADOConnection TADOTable RDBMS 8

ZeosLib ZeosLib は Delphi/C++Builder/Kylix/Lazarus に対応したオープンソースのライブラリ http://zeos.firmos.at/ 現在の最新版は 6.6.5 Delphi2007 まで対応 Delphi2009 対応は 今後出る予定の ver.7 までお預け 対応するデータベースが多いのが特徴 MySQL (normal and embedded) PostgreSQL Firebird (normal and embedded) Interbase SQLite MS SQL Server Oracle Sybase ADO Connections ver.7 での対応予定 Delphi7~Delphi2009 サポート FPC/Lazarus サポート MSEide/MSEgui サポート ADO MySQL 4.1~6 InterBase 5 / 6 Firebird 1.0~2.1 PostgreSQL 7~8 SQLite 2.8~3 Prepared ステートメントのサポート Firebird/InterBase 以外の DB でイベントサポート プロパティエディタの改良 9

各種ネイティブコンポーネント Delphi から各種データベースへの接続を行う際には 通常は各データベース毎のクライアントライブラリが必要だが 直接データベースと対話出来るプロトコルを実装したものをネイティブコンポーネント ( またはネイティブドライバ ) と呼ぶ IBX もその一例 Direct Oracle Access 最新版は4.1.2.0 Delphi2009 対応 Oracle11g 対応 http://www.allroundautomations.com/doa.html http://www.teppi.com/components/doa/ VCL Data Access Components (ODAC, MyDAC, PgDAC) Delphi2009 対応 Oracle11g / MySQL6.0 / PostgreSQL8.3 に対応 http://www.devart.com/dac.html 10

Firebird / InterBase

Firebird / InterBase Firebird / InterBase は 95 年に Delphi1 C/S に InterBase4.0C がバンドルされて以来 Delphi には必ず InterBase のローカル版や開発版がバンドルされてきた 2000 年に InterBase6 がオープンソース化された後 Firebird がオープンソースプロジェクトとしてフォーク 以降 InterBase は 6.5 / 7 / 7.1 / 7.5.1 / 2007 / 2009 とバージョンを重ねている Firebird も InterBase6 と互換性のある 1.0 から 1.5 / 2.0 / 2.1 とバージョンを重ね 両者の違いも大きくなってきているが 今のところ API レベルの互換性はほぼ保たれている Firebird のオープンソースライセンスは MPL ベースの IPL/IDPL 12

Firebird / InterBase Firebird / InterBase への接続方法は多種多様なので ここでは dbexpress を基本として説明します dbexpress 標準 INTERBASEドライバ (Firebirdはサポート外) 標準 Firebirdドライバ (Delphi/C++Builder 2010よりサポート ) Devart dbexpress driver for InterBase/Firebird Upscene InterXpress for Firebird dbexpress Driver for Firebird IBX FIBPlus ADO/ODBC 経由での接続 iboledb ZeosLib 13

Firebird / InterBase dbexpress で Firebird に接続する テスト条件 :Firebird 2.1.2 DBCharSet=UTF8 標準ドライバでパラメータクエリは注意が必要 Devart ドライバ 規定値では Unicode 対応が Disable になっているので TSQLConnection の Params に UseUnicode=True を追加する必要がある INTERBASE ドライバ Firebird の UTF8 データベースへの接続には ServerCharSet=UTF8 を指定 InterBase2009 の付属ドキュメントでは UTF-8 とあるが - は使えないのでこれは間違い UTF8 を指定して接続した場合 文字型のパラメータが ftwidestring になる この時に AsString で文字列を渡すとエラーになるので AsWideString を使う InterXpress ドライバ 現状では Unicode 対応が出来ていない その他にも動作に注意が必要 14

Firebird / InterBase dbexpress で InterBase に接続する テスト条件 :InterBase2009 DBCharSet=UTF8 Firebird と同様 標準ドライバでパラメータクエリで注意が必要 Devart ドライバ 規定値では Unicode 対応が Disable になっているので TSQLConnection の Params に UseUnicode=True を追加する必要がある INTERBASE ドライバ UTF8 データベースへの接続なので ServerCharSet=UTF8 を指定する UTF8 を指定して接続した場合 文字型のパラメータが ftwidestring になる この時に AsString で文字列を渡すとエラーになるので AsWideString を使う uses 節に DBXInterBase を追加すること これがないと メタデータを取得できないというエラーが発生する ( GetMetadata=False でも ) 15

Firebird / InterBase dbexpress のデータを DB 系コンポーネントで利用する ( 共通 ) 一番簡単なのは TSimpleDataSet を利用すること TSimpleDataSet は TSQLConnection+TSQLDataSet+TClientDataSet で一つのコンポーネントにしたようなもの Connection だけ別のコンポーネントを指定することも可能なので 複数の TSimpleDataSet で接続を共有することも可能 TSQLDataSet+TDataSetProvider+TClientDataSet と接続して使用した場合と比べると Provider の挙動を指定出来ないので細かいことには向かない dbexpress でデータベース系コンポーネントを使うなら これを使うと大変楽が出来る TSQLDataSet / TSQLQuery / TSQLTable 等を TDataSetProvider+TClientDataSet と接続して利用する Insert / Update / Delete は プロバイダが SQL を自動生成してくれる 既定値のままだと Where に全ての項目を指定した Update / Delete 動作になるのでこれは変更する 元になるデータセットのフィールドコンポーネントの ProviderFlags で キー項目 ( 普通は主キー ) の pfinkey を True にする TDataSetProvider の UpdateMode を upwherekeyonly にする Firebird/InterBase の場合 SQL を大文字で書くこと 16

Firebird / InterBase blob の扱い BLOB SUB_TYPE 1 (TEXT) の Blob は WideMemo 型のフィールドにマッピングされる TField.OnGetText イベントでそのまま展開可能 Text := Sender.AsString; その他の画像データなどの BLOB の INSERT パラメータに対して Assign(hoge) とすればよい 標準ドライバでは Firebird に Blob を Insert 出来ない InterBase2009 にはもちろん出来る 17

MySQL

MySQL MySQL は 世界でもっとも普及しているオープンソースデータベース で 開発元の MySQL 社がサンマイクロシステムズ社に買収され 今回 Oracle によって買収されました 最新安定版は最新安定版は 5.1.37(13/7/2009) で 6.0-Beta(6/4/2009) がリリースされて開発中だったが 5.4-Beta(17/6/2009) が突然リリースされています これは 5.1 のパフォーマンス改善版であるとのことだが 現状では 5.1 より遅くなるケースもあるとのこと MySQL はストレージエンジンを差し替えて動作することが出来るのが特徴だが 6.0 では InterBase の生みの親の JimStarkey になる Falcon ストレージエンジンが実装されている Falcon は MVCC による完全なトランザクション制御とメモリ上でのバージョンニングによる高速なロールバックを可能としている オープンソース版と有償版があり オープンソース版のライセンスは GPL 19

MySQL MySQL への接続方法は dbexpress ダイレクト接続 ADO/ODBC などなどがある dbexpress MySQLドライバ Devart dbexpress driver for MySQL Devart MyDAC --- direct / non direct access ADO/ODBC 経由での接続 ZeosLib 20

MySQL dbexpress で MySQL に接続する テスト条件 :MySQL 5.0.83 ServerCharSet=utf8 標準ドライバ uses 節に DBXMySQL を追加すること これがないと メタデータを取得できないというエラーが発生する ( GetMetadata=False でも ) 標準ドライバのサポートは 4.1 と 5.0 のみ MySQL6.0 からサロゲートペアがサポートされる予定だが 6.0 自体がキャンセルになってしまった その他は 特に問題無し Devart MySQL ドライバ 21

MySQL dbexpress からストアドプロシージャを使用する MySQL5.0 からストアドプロシージャがサポートされている TSQLStoredProc の SQLConnection を設定し 必要ならインプットパラメータ (Paramtype=ptInput) のパラメータを設定して ExecProc するだけ dbexpress Driver TSQLConnection TSQLStoredProc MySQL 22

PostgreSQL

PostgreSQL PostgreSQL は Ingres から派生したオープンソースの ORDBMS( 自称 ) です 日本では SRA OSS 社や富士通が担いでいます PostgreSQL は Firebird と同様 バージョニング アーキテクチャに基づく RDBMS です 最新安定版は 8.3.7(16/3/2009) です 8.3 では HOP(Heap Only Tuples) という新機能が追加され 更新処理が劇的に改善されています レプリケーションやクラスタへの対応等でも 対応製品が多く Oracle の対抗馬と位置付けられます 属性として幾何データを持たせられる PostGIS による拡張 PostgreSQL のライセンスは BSD ライセンス 24

PostgreSQL PostgreSQL への接続方法は dbexpress ダイレクト接続 ADO/ODBC などなどがある dbexpress Devart dbexpress driver for PostgreSQL --- DirectAccess http://www.devart.com/dbx/ PgExpress driver --- Needs client liblary http://www.vitavoom.com/products/pgedriver/ Devart PgDAC --- direct access ADO/ODBC 経由での接続 ZeosLib 25

PostgreSQL dbexpress で PostgreSQL に接続する テスト条件 :PostgreSQL 8.3.7 Encoding=UTF8 標準ドライバはないので Devart ドライバ又は pgexpress ドライバが必要だが pgexpress は Delphi2009 に正式対応していない上 Devart ドライバはクライアントライブラリ不要なので Devart がお勧め Devart ドライバ 規定値では Unicode 対応が Disable になっているので TSQLConnection の Params に UseUnicode=True を追加する必要がある 26

dbgo を使った商用データベースへの接続

dbgo を使った商用データベースへの接続 dbgo を使用すれば Professional 版ではサポートしていない RDB にも接続可能 Microsoft SQL Server 2000/2005/2008 Microsoft Access 2003 (Microsoft JET 3.x/4.x) Microsoft Access 2007 (Microsoft Office 12.0 Access Database Engine) Oracle 8i/9i/10g/11g IBM DB2 8.x/9.x など 基本的な使用方法は DBExpress と変わりない TSQLConnection TADOConnection TSQLTable TADOTable 28

OLE DB プロバイダの選択 Oracle の場合 Oracle Provider for OLE DB (Oracle 製 ) Microsoft OLE DB Provider for Oracle (Microsoft 製 ) SQL Server の場合 SQL Server 2008 Native Client Microsoft OLE DB Provider for SQL Server 29

接続出来ない場合の確認事項 標準のクライアントから普通に接続出来るか? SQL Plus / SQL Developer (Oracle) SQL Server Management Studio (SQL Server) コントロール センター (DB2) など TADOTable の TableName プロパティにスキーマ名を含める例 ) スキーマ名 :Foo テーブル名 :Bar TableName = "Bar"; TableName = "Foo.Bar"; TADOConnection の CursorLocation プロパティの値を変更する cluseserver( カーソルをサーバー側で持つ ) に変更する 30

C++Builder で埋め込み SQL を使用する

埋め込み SQL とは C/C++ のソースコードに直接 SQL 文を記述して実行する int main(int argc, char* argv[]) { EXEC SQL BEGIN DECLARE SECTION; VARCHAR filename[8]; VARCHAR mapname[128]; double frame_lu_b; EXEC SQL END DECLARE SECTION; EXEC SQL CONNECT :user IDENTIFIED BY :passwd USING :host; EXEC SQL DECLARE CURSOR1 CURSOR FOR SELECT FILENAME, MAPNAME, FRAME_LU_B FROM MAPTABLE ORDER BY FILENAME; EXEC SQL OPEN CURSOR1; EXEC SQL WHENEVER NOT FOUND DO BREAK; while (1) { EXEC SQL FETCH CURSOR1 INTO :filename, :mapname, :frame_lu_b; printf("filename = %s, MAPNAME = %s frane_lu_b = %.4f n", filename.arr, mapname.arr, frame_lu_b); } EXEC SQL CLOSE CURSOR1; } return 0; 32

DB コンポーネントとの違い 特徴 データベースとのやりとりはソースコードに直接記述する プリコンパイラでホスト言語 (C/C++) に変換してからコンパイルする データベースの API を直接呼び出すのでパフォーマンスがよい クエリ結果を配列にまとめてフェッチできる 欠点 デバッグが非常に面倒 データベースの実装に大きく依存するため汎用性が悪くなる 文字コードの変換等は自前で行う必要がある GUI とのやりとりも自前で行う必要がある 33

データベースとのやりとり ホスト変数 ホスト言語と埋め込み SQL との間でデータをやりとるする変数 C/C++ の基本型のみ可 (Oracle の場合 VARCHAR 型が用意 ) ホスト変数は BEGIN DECLARE SECTION と END DECLARE SECTION でくくる EXEC SQL BEGIN DECLARE SECTION; VARCHAR filename[8]; VARCHAR mapname[128]; double frame_lu_b; EXEC SQL END DECLARE SECTION; ホスト変数を SQL に組み込むには 変数の前にコロン (:) をつける EXEC SQL FETCH CURSOR1 INTO :filename, :mapname, :frame_lu_b; 実行結果 変数 sqlca.sqlcode で SQL の実行結果 ( エラーコード ) を参照する 34

Oracle の場合 coff2omf.exe を使って $(ORACLEHOME) precomp LIB orasql11.lib を C++Builder で使用できるようにする coff2omf orasql11.lib orasql11omf.lib プリコンパイラの実行 proc code=cpp cpp_suffix=cpp File1.pc 35

DB2 の場合 implib.exe を使って $(DB2PATH) bin db2app.dll の C++Builder 用のインポートライブラリを作る implib db2app.dll db2appomf.lib プリコンパイラの実行 DB2 のコマンド ウィンドウで以下を実行する db2 connect to db2 user scott using tiger db2 prep DB2Test.sqx OUTPUT DB2Test.cpp db2 connect reset インクルードパスの設定 $(DB2PATH) include を検索パスの最初にする 36

最後に ご静聴ありがとうございました!! Special thanks to: アナハイムテクノロジー株式会社はやしつとむ様 37