ACCESSのデータが0件の時に、VBからデータを作成するとインデックスが0から始まる件について


VS2005のVBACCESSを使ってるときに、
データを初期化してVB経由でACCESSにデータを追加すると
2件登録した時点で、同時実行違反とやらでエラーがでます。


で、何でこんなことが起こるのかと見ていったのですが、
VB側からDataGridViewやBindingSourceを使って、
ACCESSにデータを追加し、DataGridViewで新規に追加したデータを見ると
インデックスが0になってます。


でも、登録されたデータをACCESSを使って見てみると
インデックスが1から始まっている。


なので、
2件目をVB側から登録しようとすると
2件目のインデックスは1になるので、
ACCESS側に登録されているデータとインデックスの重複が起こり
同時実行違反となるんじゃないかと思います。



やや、図示すると


    インデックス      インデックス
      VB側         Access
1件目    0    登録→     1
2件目    1    登録→     2


こんな感じ
というわけで、
VB側での2件目とACCESS側での1件目のデータの主キーがぶつかるわけです。



というわけで、
VB側で、最初にデータを入力するときに
インデックスを1から開始すればよいと言うことが分かりました。


で、どうするかというと。


DataSetデザイナーを開き、
問題のDataTableのインデックスのキーのプロパティで
「AutoIncrementSeed」ってのがあるので
それを0から1に設定すればOK。



VSでのデータアクセスってかなりお手軽なんだけど、
抽象化しすぎててよく分からなくなるなぁ。。。



こことか見ると、VS2005でのデータベースの仕組みが理解できるかも。
http://itpro.nikkeibp.co.jp/article/COLUMN/20070320/265659/