12th Developer Camp



Similar documents
Embarcadero Developer Camp

チャレンジ!dbExpress接続

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

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

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

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

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

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

25th Developer Camp

モデリング操作ガイド (データベースモデリング編)

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

20th Embarcadero Developer Camp

5th CodeGear Developer Camp [A3]

10th Developer Camp - B5

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

データアダプタ概要

Firebirdの歴史と概要

VB.NET解説

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

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

問題 1 次の文章は Access データベース およびデータベースの概要について述べたものである にあてはまる適切なものを解答群 { } より選び その記号で答えよ 設問 1. Microsoft Access 2007 データベースのテーブルでは 表す としてデータを { ア. レコードを列 フ

Dolteng Scaffoldに対する機能追加とマスタ-ディテールScaffoldの紹介

CodeGear Developer Camp

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

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

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

ゲートウェイのファイル形式

INFRAGISTICS WPF 18.1 サービスリリースノート 2019 年 4 月 Infragistics WPF で実現する高度な BI ときれいなデスクトップ UI Infragistics WPF コントロールは 広範な機能を提供し 最小限の開発工数でアプリケーションの作成を可能にしま

Microsoft Word - tutorial3-dbreverse.docx

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

電話機のファイル形式

a2

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

Delphi/400開発ノウハウお教えします~現場で培った開発手法一挙公開~

開発者が知りたい実践プログラミングテクニック! ~明日から使えるテクニック集~

Microsoft Word - JDBC検証 docx

PowerPoint Presentation

25th Developer Camp

mySQLの利用

オープンオフィス 3 入門ガイド - Calc: データを整理する このドキュメントは クリエイティブ コモンズに表示される帰属 日本のライセンスのもと提供しています このドキュメントの Web 版を OpenOffice.org 日本ユーザー会のドキュメントで公開しています http:

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

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

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

マルチデバイスに対応した IBMi業務システム開発のポイント

ユーザ デバイス プロファイルの ファイル形式

22nd Embarcadero Developer Camp G6

APEX Spreadsheet ATP HOL JA - Read-Only

Delphi/400 テクニック公開 Delphi/400開発 ~ パフォーマンス向上テクニック ~

KeyWeb Creator 概要 What s KeyWeb Creator? 動的なホームページを作成するためのツール!! 従来の Web ページ DB を利用した Web ページ <HTML> <HEAD> <TITLE>show_book</TITLE> </HEAD> <BODY> <DI

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

TALON Tips < カレンダー ( 月別 ) の画面を表示する > 株式会社 HOIPOI 第 1.1 版 p. 1

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

前ページからの続き // テキストボックス02 id 属性で取得 // id 属性で取得する場合は一意に決まるので 何番目かの指定は不要 var textbox02elem = document.getelementbyid("text_box02_id"); if ("001" == statee

intra-mart Accel Platform

HULFT-DataMagic Ver2.2.0 製品対応OS

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

Calendar Plus JavaScript API リファレンス ラジカルブリッジ Ver

17th Embarcadero Developer Camp

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

PowerPoint プレゼンテーション

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

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

sinfI2005_VBA.doc

PowerPoint Presentation

Android Layout SDK プログラミング マニュアル

Microsoft Word - JDBC-ODBCu691cu8a3c docx

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

住所録を整理しましょう

Transcription:

A3 Delphi テクニカルセッション DBGrid の罠 アナハイムテクノロジー株式会社 代表取締役はやしつとむ アジェンダ Delphi データベースプログラミング DBGrid の Tips 集 DBGrid で複合インデックスを実現する 参考図書 Delphi が他の開発環境と一線を画して来たのは そのデータベースとの親和性の高さからだと思います BDE から IBX ADOExpress dbgo dbexpress と付属のフレームワークも充実してきました DBGrid は MS 製品ですらろくな Grid の無い時期に画期的なコンポーネントでした とはいえ 帯に短したすきに長しというところが 2

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

BDE(Borland Database Engine) BDE は Paradox をベースとしたフレームワーク 異種 DB 間でのクエリーのサポートなど 高度な機能もあるが すでに開発は中止 とはいえ 結構使われている TDataSource TDBGrid TDatabase TTable RDBMS 5 InterBaseExpress InterBaseExpress は InterBase と接続するためのフレームワーク InterBaseAPI を直接利用するコンポーネントで構成されている TIBTransactionコンポーネントが分離しているのが特徴 複数のデータベースへの二相コミットに対応出来る TDataSource TDBGrid TIBTransaction TIBDatabase TIBTable RDBMS 6

dbgo dbgo は ADO(ActiveX Data Object) をベースとしたフレームワーク Delphi5 で ADOExpress として導入されて Delphi6 から dbgo という名前になった InterBaseに接続するためには ibprovider が利用できる ibprovider http://www.ibprovider.com/eng/ Free Edition は InterBase6まで 有償版では IB2009まで対応 TDataSource TDBGrid OLEDB Provider TADOConnection TADOTable RDBMS 7 dbexpress4 dbexpress4 は Delphi6 から導入された dbexpress の最新版 Delphi2007 で version 4.0 になったが これまでのドライバも使うことは出来る TDataSource TDBGrid TDataSetProvider TDataSetProvider dbexpress Driver TSQLConnection TSQLTable RDBMS 8

ZeosLib ZeosLib は Delphi/C++Builder/Kylix/Lazarus に対応したオープンソースのライブラリ http://zeos.firmos.at/ 現在の最新版は 6.6.4で Delphi2007まで対応 Delphi2009 対応は 今後出る予定のver.7までお預け 対応するデータベースが多いのが特徴 MySQL (normal and embedded) PostgreSQL Firebird (normal and embedded) Interbase SQLite MS SQL Server Oracle Sybase ADO Connections 9 DBGrid の Tips 集

DBGrid を使う データベースへ接続して DBGrid を使うにために以下のように接続します サンプルとして InterBase2009 に dbexpress で接続してみます dbexpress は 単方向データセットなので DBGrid に接続する場合には TClientDataset を利用します InterXpress は 現状では Delphi2007 までの対応 http://www.upscene.com/products.dbx.dbx_fb.php 接続は可能だが クエリーかけるとこける pgexpress も同様 http://www.vitavoom.com/products/pgedriver/ 11 ClientDataset ClientDataset は TDataSet を継承したある種のオンメモリデータベースです ソート フィルタ グループ化 集合体 (Aggregates) などを利用することが出来る 12

DBGrid 頻出メソッド / プロパティ / イベント (1) OnKeyDown イベント Ctrl+Delete キーでレコードが削除されるが これを無効にしたい FocusControl メソッド 特定のフィールドにフォーカスを移動したい SelectedField プロパティ 特定の列を飛ばしてフォーカスを移動したい FieldCount プロパティ 表示列数を取得する CurrentRowSelected プロパティ Grid 上のすべての行を選択状態にする 13 DBGrid 頻出メソッド / プロパティ / イベント (2) LeftCol プロパティ 特定の列を一番左側に表示する Columns.ReadOnly プロパティ 特定のフィールドだけ入力したい OnDrawColumnCell イベント 特定のセルに色を付けたい InplaceEditor 編集状態で文字列を選択状態にしたい ドロップダウンリストを自動的にドロップダウンさせたい 14

DBGrid に色を付ける 各レコードのデータに従って DBGrid の行に色を付ける キーになるフィールド ( 状態 ) などによって レコード全体を色付する DBGrid1.DataSource.DataSet.FindField( hogehoge ); と辿る 15 DBGrid にチェックボックスを表示する Boolean 型のデータで 値を選ぶためにチェックボックスを表示する TDBCheckBox をコントロールして DBGrid の上に描画する 非選択状態の時は TImageList から画像を描画する 16

DBGrid でグループ化を行う ClientDataSet を利用して グループ化された表示を行う IndexDefs プロパティに TIndexDef を追加する Aggregates プロパティに TAggregate を追加する AggregatesActive プロパティを True にする GetText で TClientDataSet.GetGroupState を使って判断する 17 DBGrid のカラムの状態を保存 / 復元する DBGrid のカラムはユーザーが幅や位置を変更出来る その操作状態を保存 復元出来るようにする TDBGridColumns のメソッドを利用する TDBGrid.Columns.SaveToStream() TDBGrid.Columns.LoadFromStream() TDBGrid.Columns.RestoreDefaults はうまく動いてない? 18

DBGrid で複合インデックスを実現する DBGrid の指定カラムでソートする ClientDataSet を利用すると オンメモリでのソートが可能 DBGrid のカラムをクリックして ソートさせてみる 20

DBGrid の指定カラムでソートする ClientDataSet には IndexDefs というインデックスのコレクションがあるが これには動的にインデックスを追加できない Help: AddIndexDef メソッドは,CreateTable または CreateDataSet メソッドを後で呼び出してテーブルのインデックス定義を作成する場合にのみ有効です 既存のテーブルにインデックスを追加する場合は使用できません TClientDataSet.IndexDefs.AddIndexDef と.Add は同じ処理 TClientDataSet TIndexDefs AddIndexDef function TIndexDefs.AddIndexDef: TIndexDef; begin Result := TIndexDef(inherited Add); end; Add 21 DBGrid の指定カラムでソートする ClientDataSet の AddIndex メソッドを利用しても IndexDefs には追加されない つまり この一本を使いまわすしかない AddIndex で追加したインデックスをオブジェクトとして取得したり 設定を動的に変更したりということは出来ないので 変更する時には DeleteIndex AddIndex が必要となる TClientDataSet AddIndex IndexName インデックス名 DeleteIndex 22

DBGrid の指定カラムでソートする procedure TCustomClientDataSet.AddIndex(const Name, Fields: string; Options: TIndexOptions; const DescFields, CaseInsFields: string; const GroupingLevel: Integer); var IndexDesc: DSIDXDesc; IndexDef: TIndexDef; begin CheckBrowseMode; FieldDefs.Update; EncodeIndexDesc(IndexDesc, Name, Fields, DescFields, CaseInsFields, Options); CursorPosChanged; Check(FDSBase.CreateIndex(IndexDesc)); if GroupingLevel > 0 then begin IndexDefs.Update; IndexDef := IndexDefs.Find(Name); if IndexDef <> nil then IndexDef.GroupingLevel := GroupingLevel; end else const IdxDesc : DSIDXDesc IndexDefs.Updated := False; ): DBResult; stdcall; end; function CreateIndex( { Create, and add an index } AddIndex の結果を IndexDef でもらえると嬉しいが ここから先は DLL の内部ルーチンになってしまう 23 DBGrid を複数カラムでソートする さらに 複合 Index 用のクラスを作成し 複数のカラムで複合的にソートするようにしてみる タイトル行を Ctrl+ クリックすると ORDER に追加される すでに追加されている列をクリックすると ORDER が切り替わる COL1 COL2 COL3 COL4 例えば ORDER BY COL1, COL2, COL3 DESC としたい COL1 COL2 COL3 COL4 24

DBGrid を複数カラムでソートする TSotrType: インデックスのオーダー ( 昇順 / 降順 ) を列挙型で定義 TIndexObject: 各カラムのインデックスを保持 TListIndexes: 複数の TIndexObject を保持 TIndexObject TIndexObject TListIndexes TClientDataSet TIndexObject 25 参考図書

参考図書 Delphi6 プログラミングバイブル Marco Cantu 著 / インプレス刊 Mastering Delphi2005 Marco Cnatu 著 /SYBEX 刊 Delphi2007 HANDBOOK Marco Cantu 著 / 自費出版? Delphi6プログラミングテクニック裏技 180 選金井利美男著 / エーアイ出版刊 InsideDelphi Ray Lischner 著 / アスキー出版局刊 InsideDELPHI2006 Ivan Hladni/Wordware 刊 Delphi2009HANDBOOK Marco Cantu 著日本語版が 3 月に刊行予定! 27 アナハイムテクノロジーについて アナハイムテクノロジー株式会社 157-0072 世田谷区祖師谷 1-22-26-S-208 TEL 03-5787-7791 FAX 03-5787-7792 http://www.anaheim-tech.com/ Delphi とオープンソースの技術支援を行っています InterBase/Firebird のご相談もぜひ当社へ! 28