16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"TUpdateSQLの使い方"
この発言に対し以下のコメントが寄せられています
#00887 おみゃー さん RE:TUpdateSQLの使い方
2つ以上のTableをJoinした結果セットを更新するサンプルです。
TTableやTQueryだけでは単一のTableからの結果セットに対する更新しか
できませんがUpdateSQLを使えば結合した結果セットからの更新が可能に
なります。
TQuery と TUpdateSQL を使用します(TDataBaseもあったほうがいいです)
(0)TDataBaseの設定(必須ではない)
・AliasName := 例:DBDEMOS
・DataBaseName := 例:DBNM1
・Name := 例:DB1
(1)TQueryの設定
・Name := Query1
・CachedUpdates := True;
・RequestLive := False;
・UpdateObject := UpdateSQL1(用意したTUpdateSQL)
・SQL := たとえばDBDEMOSのTableを使うとしたら
select a.*, b.*
from ORDERS.DB as a, CUSTOMER.DB as b
where a.CustNo = b.CustNo
このときデフォルトでは、Fromの最初に記述されているTableが
更新対象となります。
・DataBaseName(TDataBaseを使う場合) := DBNM1
TDataBaseを使わない場合はここにAliasName(例:DBDEMOS)を指定する。
(2)TUpdateSQLの設定(TQueryの設定が済んでいること)
・UpdateSQLをダブルクリックするか右クリックのコンテキストメニューから
UpdateSQLの設定を選択する。
・オプションタブの「テーブル名」に更新したいテーブルを指定します。
・オプションタブの「主インデックスを選択」を押すと
キー項目としてプライマリキーが選択されます。
・オプションタブの「テーブル項目の取得」を押すと
「更新する項目」にそのテーブルのフィールドが表示されます。
・オプションタブの「SQL文を生成」を押すと更新用SQLが作成されます。
・OKボタンを押して準備完了
(3)CachedUpdatesの使用方法
上記の場合CachedUpdatesを使っているので、TQueryに対する
Insert, Update, DeleteをしてもDataBaseには直接更新が反映されません。
反映するためにはTQueryのApplyUpdatesを実行する必要があります。
ApplyUpdatesはTQueryやTTableのようなDataSetに記述する方法と
TDataBaseに記述する方法があります。私はTDataBaseを使うことが多いので
その例を書きます。
with Query1 do
begin
{Query1への更新処理 単にOpenしてDBGridに表示するのでも可}
end;
ボタンのクリックイベント等で
DB1.ApplyUpdates([Query1]); //これだけです。
おみゃー@名古屋
Original document by おみゃー 氏 ID:(PXB01563)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|