問題を (少なくとも部分的に) 再現することができますが、Access ユーザー インターフェイス、Access データベース エンジン、および PostgreSQL ODBC ドライバーの間の奇妙な相互作用であることは間違いないようです。PostgreSQL テーブルにリンクされている [public_table1] という名前の Access リンク テーブルがあります。
CREATE TABLE table1
(
id serial NOT NULL,
customer character varying(255),
balance money,
CONSTRAINT pk_table1 PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE table1
OWNER TO postgres;
GRANT ALL ON TABLE table1 TO postgres;
GRANT ALL ON TABLE table1 TO public;
リンクされたテーブルをデータシート ビューで開くことができ、[残高] の値は表示されますが、編集できません (あなたと同じエラー)。Access クエリ ビルダーを使用して、このような更新クエリを作成すると...
UPDATE public_table1 SET public_table1.balance = 2.22
WHERE (((public_table1.[id])=4));
...エラーも発生します。ただし、次の VBA ステートメントは正常に機能します。
Sub pgTest()
CurrentDb.Execute "UPDATE public_table1 SET balance=6.78 WHERE id=4", dbFailOnError
End Sub
したがって、少なくとも私の場合、データシートとバインドされたフォームを使用して PostgreSQL データを表示できましたが、変更はできなかったようです。残念ながら、この制限により、Access をフロントエンドとして使用するメリットが大幅に減少する可能性があります (実行する操作の種類によって異なります)。