2006.2 ACCESS 2000 SP-3 + PostgreSQL 8.0.6
実行されるSQL文の制御が難しいリンクテーブルではなく、自分が書いたSQL文がPostgreSQLでそのまま実行される「ODBC Direct」と「パススルークエリ」を使ってアプリケーションを作ることを考えます。
CREATE TABLE t_m商品(
商品cd text PRIMARY KEY,
商品名 text NOT NULL,
売単価 decimal(19,4) NOT NULL DEFAULT 0);
CREATE TABLE t_m得意先(
得意先cd text PRIMARY KEY,
得意先名 text NOT NULL);
CREATE TABLE t_売上(
売上no serial PRIMARY KEY,
日付 date NOT NULL,
得意先cd text NOT NULL,
入力日時 timestamp(0) NOT NULL DEFAULT LOCALTIMESTAMP(0));
CREATE TABLE t_売上明細(
売上no integer DEFAULT 0 REFERENCES t_売上 (売上no) ON DELETE CASCADE ON UPDATE
CASCADE,
売上明細no smallint DEFAULT 0,
商品cd text NOT NULL REFERENCES t_m商品,
数量 integer NOT NULL DEFAULT 0,
売単価 decimal(19,4) NOT NULL DEFAULT 0,
PRIMARY KEY (売上no,売上明細no));

サーバー側のt_売上およびt_売上明細と同じ構造のテーブルをローカルMDB側に持ち、入力フォームはこのローカルテーブルに連結しています。
入力フォーム(F_売上)の連結先はローカルテーブルを使うクエリであり、コンボボックスのデータソースもパススルークエリなので、フォームの作りとしてはPostgreSQLを利用せずACCESSだけで作る場合と変わりません。
心臓部は、F_売上フォームモジュールのDenpyoSave()とDenpyoCall()で、ODBC Directを使いローカルテーブルのデータをサーバーへ保存する処理と、サーバーからローカルテーブルにデータを取り出す処理を行っています。サンプルではODBC Directで保存・読み出しを行っていますが、リンクテーブルを利用した追加クエリとしても問題ありません。
以下、気が向いたときに製作
TOPに戻る MS ACCESSからPostgreSQLへ移行するに戻る