次の方法で共有

ACCESS リンクテーブル 主キーが変わってしまう

Anonymous
2024-05-28T07:11:32+00:00

システム環境:

クライアントOS:Windows 11 Pro バージョン 23H2 OS ビルド 22631.3593

ACCESS:Microsoft Access for Microsoft 365 MSO (バージョン 2404 ビルド 16.0.17531.20152) 32 ビット

サーバーOS:Windows Server 2019 Standard (10.0)

データベース:Microsoft SQL Server Standard (64-bit)  バージョン:15.0.4236.7

マージレプリケーション

上記の環境にて、一つのテーブルのみ、リンクテーブル作成時に主キーがDBで設定されているものから変わってしまいます。

テーブルの定義は以下のようになっており

TABLE [dbo].[KOUJYO](

[工場] [tinyint] NOT NULL, 

[工場名] [varchar](16) NULL, 

[fg] [varchar](3) NULL,

[rowguid] [uniqueidentifier] ROWGUIDCOL  NOT NULL, 

CONSTRAINT [PK_KOUJYO] PRIMARY KEY NONCLUSTERED

(

[工場] ASC 

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

SQL Server Managemant Sudio上では[工場]がキーになっており

本来、リンクテーブルでも主キーが[工場]になるはずですが

何故かAccessにリンクした後のデザインビューで[工場]の主キーのマークが外れ、[rowguid]が主キーになります。

当該データベースのバックアップから復元してレプリケーションしないテストDBのテーブル(rouwguidを含まない)の更新時には主キーの変更は発生しません。

このDBはレプリケーションされており、他のレプリケーションされているテーブルにも[rowguid]が含まれますが

このテーブルだけがリンクテーブル更新時に主キーが変わってしまいます。

(※「更新プログラムによる不具合」箇所は「追記(2024/5/29)」に移動)

追記(2024/06/05):

ACCESS上は主キーが外れているように見えますが

主キーに登録済みの数値を入力するとしっかり制約が働いている事が分かりました

腑に落ちませんが、ACCESSのデザイン上は主キーが変わっているように見えて

SQL Server上の定義と同じなのかもしれません

過去同じような現象が起きている方はいるでしょうか?

追記(2024/5/29):


※更新プログラムによる不具合

  • 今年3~4月くらいから発生している別の問題(VBAでTableDef.Connectを変更した後、TableDef.RefreshLinkした際に「主キーが既に存在します」エラーが発生する)の調査で今月になって発見しました
  • ACCESSバージョンを最新にしてみましたが解決せず、ここから何を調べれば原因の解決に繋がるか分からない状態でフォーラムに投稿した次第です。 →ACCESSバージョンをロールバックするとRefreshLinkのエラーはなくなった。主キーが変わる問題は解決せず。

Microsoft 365 と Office | アクセス | ビジネス向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

2 件の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2024-05-29T00:10:47+00:00

    回答ありがとうございます。

    試しにバージョンを戻し、リンクテーブルを作り直してみましたが

    RefreshLinkでのエラー(3283)は出ないものの、主キーがデータベースの設定と変わってしまうところは同じでした。

    作成時のaccdbの問題も考えられる為、accessバージョンを戻した今の状態で

    新たにaccdbを作成してオブジェクトコピーしてみることを試してみます。

    【追記】:

    ACCDBを作り直してもダメでした。KOUJYOUテーブルはほとんど変更のないテーブルなので

    もしかすると、主キーが変わっている現象については、もっと以前から起きていたのかもしれません……

    ・SQL Server上で見た目上、主キーが設定されているのに主キーとして認識できない事があるのか

    ・Access側リンクテーブルはSQL Serverデータベースの何を以って主キーとして判断しているのか

    RefreshLinkの主キーとは違う問題のようです

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Makapu 92,110 評価のポイント ボランティア モデレーター
    2024-05-28T22:09:44+00:00

    fs_t.wさん、こんにちは。

    今年の一月位から更新プログラムによる不具合が発生している様ですね。

    【Access】RefreshLinkを実行すると「主キーは既に存在しています」とエラーになるようになった - Microsoft コミュニティ

    上記スレッドにバージョンを戻すことが有効とありますので、確認してみて下さいね。

    バージョンを戻したら更新プログラムを無効にする必要があります。

    戻し方については、以下の記事も参考になさって下さい。

    Office 365(2016)をロールバックする - Microsoft コミュニティ

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません