../../image/benilogo.gifDelphi7 について


Windows 環境 Delphi 7 から PostgreSQL の データー更新について。

 単純に TDBNavigatir でのデーター修正が出来るのか? では、timestamp がことなるので更新出来なかった。
今度は、 UpdateSQL を使って更新してみる。
いずれにせよ timestamp型のデーターが入っているレコードはTDBNavigatorでは変更できない と言うこと。
ただし、直接SQLで UPDATE すれば問題なく更新出来ます

と、前回こんな結論に達したけれど、どうもこれは正確に表してはいない。
検索項目に timestamp = datetime ではダメです。 って言い方のほうが 近いかも知れない。


まずは簡単な TimeStamp 項目を持った テーブルを作成する。
テーブル構造
beniya=# create table a_test4 ( a1 char(10) Primary Key , a2 char(10),
beniya(# a3 timestamp NOT NULL, a4 timestamp NOT NULL);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index 'a_test4_pkey' for table 'a_test4'
CREATE
beniya=# select \d a_test4;
                Table "a_test4"
 Column |           Type           | Modifiers
--------+--------------------------+-----------
 a1     | character(10)            | not null
 a2     | character(10)            |
 a3     | timestamp with time zone | not null
 a4     | timestamp with time zone | not null
Primary key: a_test4_pkey
コンポーネント接続イメージ 設計画面
image/UpdateSQL_expr01.gif image/test_update03.gif
UpdateSQL をダブルクリックすると SQLデザイナーが表示されるので ここで UPDate用 SQL を作る。
image/UpdateSQL_expr02.gif

  ここで UpDate するための キー項目や 更新する項目
 を選択する。

 これで前回問題になった。更新時に前項目を検索するため
 timeStamp の内容が異なるため更新出来ないという問題は
 回避することが出来る。


 cachedUpdates := True; にしておくのと
 何処かの時点で
 Database1.ApplyUpdates([Table1]);
 を行ってデーターベースを更新する必要があります。
image/UpdateSQL_expr03.gif
  • 更新用SQL
    update a_test4
    set
    a1 = :a1,
    a2 = :a2,
    a3 = :a3
    where
    a1 = :OLD_a1
  • 追加用SQL
    insert into a_test4
    (a1, a2, a3, a4)
    values
    (:a1, :a2, :a3, :a4)
  • 削除用SQL
    delete from a_test4
    where
    a1 = :OLD_a1

実行画面
  • DBNavigator のボタンでコントロール
  • 追加・修正・削除 出来る。






結論
 





















目次に戻る

2005/01/18 start ********* Last Update 2006/06/03 15:28 JST

(C) Y.Kondou,2005,2006 All Rights, Reserved.
その他、お気づきの点がありましたら連絡先はこちらから