QueryデータをDBGridから編集


KK  2008-07-15 21:13:14  No: 31280  IP: 192.*.*.*

毎度のことですが、ご教授願います。
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がおかしいのだとは思うのですが、どのように修正したらよいでしょうか。

どなたかご教授願います。

編集 削除
HOta  2008-07-16 08:37:09  No: 31281  IP: 192.*.*.*

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
とセットします。

編集 削除
KK  2008-07-16 14:14:06  No: 31282  IP: 192.*.*.*

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つ選択するようになっています)

恐れ入りますが、再度ご教授願います。

編集 削除
HOta  2008-07-17 09:34:29  No: 31283  IP: 192.*.*.*

「ご教授」などはできません。

すみません。勘違いしていました。
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文を設定してください。

編集 削除