ACCESSのオートナンバー型をSQLSERVERで実現可能?


DB・SQLSERVER初心者ですので、表現に整合性が無い場合が有りますことを
ご考慮ください。

WindowsXP Pro SP3
ACCESS 2003

WindowsServer2003 R2
SQLSERVER 2005

ACCESS VBAでリンクしたACCESSのDBのテーブルでオートナンバー型を指定した
フィールドが有ります。[番号](int型)

以下の構文で、新規の番号がセットされ、レコードを作るようになっています。

DoCmd.GoToRecord , , acNewRec

今回、リンク先テーブルをSQLSERVERにODBC接続テーブルに変更し、
同じような機能と使用法を探していますがよく分かりません。

色々調べて見た結果、
SQL Server Manegement Studioの設定、テーブルデザインにて[番号]の列のプロパティ
「INDENTITYの指定」に糸口がありそうだとたどり着き、ここを「はい」とし、
「INDENTITY インクリメント」=1 と設定してみました。
この時「INDENTITY シード」も勝手に1と設定されました。(意味不明)

ここから先が分かりません。

DoCmd.GoToRecord , , acNewRec

で[番号]はNULLとなってしまいます。

VBAを最小限の変更としたいのですが、ご経験の方いらっしゃいましたら、
設定法・コーディングを教えていただけましたら幸いです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2008/11/15 13:21:57
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:freemann No.1

回答回数335ベストアンサー獲得回数55

ポイント60pt

こんにちは。

わかるところだけお答えします。

AccessのオートナンバーをSQL Serverで対応させるとするとIdentityを「はい」でよいです。

インクリメントは、レコードが一件増えるたびにどれぐらい数を増やすかです。

シードは種という意味ですが、初期値を表します。

例えば、インクリメントを10として、シードを0とすると、

0>10>20>30となります。

ですので、Accessと同じにするなら、インクリメントが1でシードも1でよいかと思います。

で、この値がいつ確定するかというと、新たに挿入されたレコードが確定された時です。

確定していない状態、例えば、ここは推測ですが、VBAなどでADOで新規レコードに値を設定中ですと、

Identityの値は「まだ発行されていません」。

Accessでは、自動でレコードが確定しますが、そのタイミングはほかの行へ移動したりなどあると思いますが、

SQL ServerなどのDBではコミットしないと確定しません。

commitとrollbackのあたりを調べてみるとよいのではないでしょうか。

http://www.google.com

ダミー

id:Sweet

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

ご指摘のように、Accessはタイミングが決め手の作りになっています。

アプリ側番号が振られた後のMDB側レコード番号確定の順番に苦慮しています。

複数アプリ同時アクセスの欠番対策方法を考え直さねばなりません。

別テーブルを用意して何らかの方法で対処しようと思っています。

2008/11/15 13:21:42

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません