TOracleDataSetは、DelphiのTDataSet型を継承したクラスであり、TOracleDataSetを利用して、各種のデータベース対応コンポーネントが使えるようになります。

Delphiを使ってデータベース・クライアント・アプリケーションを作成するにあたり、データベース対応コンポーネントが利用できることは大きなメリットなので、上手に活用したいものです。

実際にTOracleDataSetを利用したくなる場面を以下のように分類してみました。

  1. SELECT文を実行して、結果をグリッド表示する
  2. SELECT文で取得したデータを、グリッドで更新する
  3. SELECT文でレコードを取得し、各フィールドにデータベース対応コントロールを関連付けた編集画面によって、データを更新する
  4. SELECT文でカラム型を取得し、そのデータセットに対してデータの挿入を行う

上記でだいたいの場合を尽くしているでしょうか…。あくまでもTOracleDataSetでは最初にSELECT文を実行してデータセットを開くのが基本であると考えます。(一応、ExecSQLメソッドもありますが、TOracleDataSetにはRowsProcessedプロパティがないので、初めから
INSERT/
UPDATE/
DELETEを実行するにはTOracleQueryを使用することを強くお勧めします)

TOracleDataSetの基本的な利用法

TOracleDataSetを利用するにあたり、最も基本的なメンバは以下の通りです。

TOracleQueryのメンバで、SELECTクエリの実行時によく使われると思われるものは以下のとおりです。

  • TOracleDataSet : SQLを実行するために必要なメンバ

    • property
      Session : 有効なTOracleSessionをセットします
    • property
      SQL : 実行するSQL文、またはPL/SQLブロックを文字列でセットします
    • procedure
      Open : SELECT文を実行します
    • procedure
      ExecSQL :
      SELECT以外のクエリ(レコードを返さないもの)を実行します。(使用は避けた方が無難です)
    • property
      Active :
      Active:=Trueは、Openと同じです。設計時にデータセットを開くときにはこちらを使います
    • proceure
      Close : カーソルを閉じてリソースを解放します。Active:=Falseでも同じです
  • TOracleDataSet : SQLにパラメータを与えるためのメンバ

    • property
      Variables :
      SQL文中の「:」で始まるパラメータを見つけ出して列挙し、かつそれぞれのパラメータのデータ型などの入力を支援するプロパティエディタを起動します。(設計時のみ利用可)
    • procedure
      SetVariable: input
      variable(入力パラメータ)に値をセットします。SQL実行前に使います。
    • function
      GetVariable: output
      variable(出力パラメータ)の値を参照します。SQL実行後に使います。

BDEのTQueryにおける
Parametersプロパティに相当するものは、DOAでは
Variablesプロパティ、
SetVariable/
GetVariableメソッドになっています。本マニュアルの、
TOracleQueryのパラメータの使用に関するセクション
を参考にしてください。なお、BDEと同様、TOracleDataSetのパラメータは input variable
としてのみ使用できます。(output variableになりません)

取得したデータには、TDataSet互換のメンバを通じてアクセスします。詳しくは、Delphi付属のTDataSetのリファレンスや、「データベースアプリケーションの開発」に関するDelphiのヘルプを参照してください。最も基本的なTOracleDataSetの使用例は、
こちら→のチュートリアル をご覧ください

  • TOracleDataSet : 取得したレコードにアクセスするためのメンバ =
    TDataSet互換メンバ

    • property
      Eof:
      データセットを順に読み出していって最後に達したか、データセットが空のときにTRUE(Bofはその逆)
    • procedure
      First: 先頭レコードに移動。(
      Lastはその逆)
    • procedure
      Next: 次のレコードに移動。(
      Priorはその逆)
    • procedure
      Locate :
      与えられたキーをもとにレコードを検索し、見つかったレコードに移動
    • property
      RecordCount: 取得されたレコード数。この値は、
      QueryAllRecordsプロパティに依存します(重要)
    • property
      Fields
      [Index] : TField : フィールドの値にアクセスします
    • function
      FieldByName
      [FieldName] : TField : フィールドの値に名前でアクセスします

以下のプロパティはDOAならではのプロパティです。RecordCountとの関係で知っておいた方がよいでしょう。

  • property
    QueryAllRecords : Boolean;
    このプロパティがTRUEだと、データセットのオープン時に全レコードをサーバから取得(Fetch)します。ゆえにRecordCountの値がSELECT文のヒット件数に一致します。QueryAllRecordsをFalseにした場合、TOracleDataSetはデータベース対応コンポーネントからのデータアクセス要求に応じて、その都度必要レコードを取得し、RecordCountプロパティは取得済みレコード数を表わします。多数のレコードがヒットするとわかっている場合や、Long型のカラムが含まれる場合などは、このプロパティを
    FALSEに設定した方がよいでしょう(デフォルトはTRUE)。
  • function
    CountQueryHits:
    Integer;SQLプロパティに設定されたSELECT文のFrom句、Where句をそのまま利用してSELECT COUNT(*)
    を実行し、ヒット件数を返します。データセットをOpensする前に予め件数を確認できます。