毎度のことですが、ご教授願います。
WindowsXP + Delphi7
現在、複数のテーブルをQueryを使用し結合させDBGridに表示させています。
SELECT
"SHOHIN.DB".SHOHINNO, "SHOHIN.DB".NAME,
"BARCODE.DB".CODE
FROM
"SHOHIN.DB", "BARCODE.DB"
WHERE
"SHOHIN.DB".SHOHINNO = "BARCODE.DB".SHOHINNO
このデータをDBGridから編集を行おうとしたところ編集できなかったため、
いろいろ調べたところ、UpdateSQLを使用するところまでは分かりました。
UpdateSQLの設定を行うと、ModifySQLのところに
update "SHOHINNO.DB"
set
SHOHINNO = :SHOHINNO,
NAME = :NAME,
CODE = :CODE
where
SHOHINNO = :OLD_SHOHINNO
が作成されました。
実際に、DBGridを編集し、ボタンに割り当てた「Query1.ApplyUpdates」を行うと
「項目(フィールド名)が無効です「CODE」」となってしまいます。
ModifySQがおかしいのだとは思うのですが、どのように修正したらよいでしょうか。
どなたかご教授願います。
2つのテーブルにPostしましから、TUpdateSQLも2つ用意します。
//UpdateSQL1
update "SHOHINNO.DB"
set
SHOHINNO = :SHOHINNO,
NAME = :NAME
where
SHOHINNO = :OLD_SHOHINNO
//UpdateSQL2
update "BARCODE.DB"
set
CODE = :CODE
where
SHOHINNO = :OLD_SHOHINNO
を用意して、TQueryのUpdateSQLのプロパティに
UpdateSQL1;UpdateSQL2
とセットします。
HOtaさん早急なレスをありがとうございます。
>2つのテーブルにPostしましから、TUpdateSQLも2つ用意します。
はい、Formに2つ置きました。
>//UpdateSQL1
>update "SHOHINNO.DB"
>set
> SHOHINNO = :SHOHINNO,
> NAME = :NAME
>where
> SHOHINNO = :OLD_SHOHINNO
>//UpdateSQL2
>update "BARCODE.DB"
>set
> CODE = :CODE
>where
> SHOHINNO = :OLD_SHOHINNO
これは、UpdateSQL1,UpdateSQL2のModifySQLプロパティに
それぞれ書き込むということでしょうか。
>を用意して、TQueryのUpdateSQLのプロパティに
>UpdateSQL1;UpdateSQL2
>とセットします。
Query1のUpdateObjectプロパティのことでしょうか。
UpdateObjectプロパティは1つしかセットできないようです。
(ドロップダウンから1つ選択するようになっています)
恐れ入りますが、再度ご教授願います。
「ご教授」などはできません。
すみません。勘違いしていました。
UpdateObjectプロパティは1つしかセットできません。
TQueryのUpdateObjectプロパティに複数のテーブルを設定するのは、FormのOnCreate等で
UpdateSQL1.DataSet=Query1;
UpdateSQL2.DataSet=Query1;
とします。
TUpdateSQLの扱う対象のテーブルは一つです。
同時に複数のテーブルを扱うことはできません。
ですから、TUpdateSQL上でマウスの右クリックをすると出てくるサブメニューのUpdateSQLの設定を選ぶと、SQLの設定ダイアログが出てきます。
この中で、オプションのテーブル名を選びます。
テーブル項目の取得で、テーブルの項目が表示されます。
主インデックスを選択で、キー項目が選択されます。
更新する項目を反転させて、SQL文を生成ボタンを押します。
項目名に"が必要な場合は、チェックを入れます。
SQL文タブで各SQL文が問題ないかチェックします。
OKボタンで、TUpdateSQLのDeleteSQL,InsertSQL,ModifySQL,RefreshSQLにSQL文がセットされます。
それぞれのテーブル毎にTQueryのUpdateObjectに一つずつセットしてSQL文を設定してください。