• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Access2000 VBA(ADO)を使用して主キーの空きを探す処理)

Access2000 VBA(ADO)を使用して主キーの空きを探す方法

このQ&Aのポイント
  • Access2000 VBA(ADO)を使用して、主キーの空きを探す処理を作成しましたが、うまくいきません。
  • テーブルの主キーには「KEY-0」から「KEY-10」までの値が入力されており、空きの主キーを探したいです。
  • 処理を実行すると、「KEY-10」で処理が抜けてしまいますが、期待するのは「KEY-11」の空きです。ご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#182251
noname#182251
回答No.2

失礼なことを伺うようで恐縮ですが(^^; ご提示のような方法で空きキーを探すのに特別な理由があるのでしょうか? データベースを使うメリットが全くないように思われます。折角の主キーなのにデータ多数でも最初から1件ずつ比較して探して行く気の遠くなるような処理です。 単に重複しないキーということであれば「オートナンバー型」が一番簡単です。 データ入力が取り消された時、番号が飛んでしまうことを嫌うのであれば SELECT Max(xx.ID) AS IDの最大 FROM xx; みたいなSQL文で求めた最大値に+1するとか 上記例ですとどちらも数値型ですが、主キーが文字型であることにも理由があるのでしょうか? 必ず「KEY-」が付いているのも冗長に感じられます。 それぞれに理由があると思いますが、それを明示されれば、より適切なレスが付くと考えます。

jone
質問者

お礼

早速、ご教授くださいまして有難うございます。 また、お返事遅くなり申し訳ございませんでした。 fuuten_no_neko様のご指摘が、とても的確なご回答だと感じました。 >データベースを使うメリットが全くない 「あぁ、そうか。やっぱり甘いなぁ、自分は・・・」と思わず溜息をついてしましました。。。 おっしゃるとおりですね。 根本的にDBやSQLの勉強不足と痛感いたしました。 >主キーが文字型であることにも理由があるのでしょうか? 文字型である理由は特にありませんでした。 プログラムベースで主キーを割り当てようと考えた時、「折角なら、それからどんな番号、コードなのか分かった方が良いのかな?」なんて考えたものですから。 当初、主キーはオートナンバー型で考えていました。 ただ、参考書やWeb等で調べてみたところ、いくつかオートナンバー型の使用に注意・否定的な意見が見受けられましたので使用すべきではないのかと思い・・・ 「プログラムで制御」→「主キーを文字型」→「主キーの空きを探す処理(プログラム)」の様に考えが移行していってしまった訳です。。。 でも、オートナンバー型や文字型にせよ、要は使いどころなんでしょうか。 fuuten_no_neko様のご教授いただいたとおり、主キーを数値型にして、SQLまたはオートナンバー型で考え直したいと思います。 >失礼なことを伺うようで恐縮ですが とんでもございません!! まだ、この様な場での質問に不慣れなものでして。 スミマセン。 >それを明示されれば、より適切なレスが付くと考えます。 おしゃるとおりですね。 今後、出来る限り簡潔・的確にお伝えする様努めます。 また、煮詰まってしまった場合こちらで、教えを請う事が多々あるかと思いますが、宜しくお願いいたします。 本当に有難うございました。

その他の回答 (1)

回答No.1

ADOのFINDメソッドは、パラメータ省略時カレント行より後ろをサーチしますが... そのロジックで、KEY-1 KEY-2 KEY-3 ・・・ KEY-10 の順で行が存在することが、 保証されていますか? ということを考えて見てください。 というか、最も合理的な処理は、”空き番”自体を問い合わせるSQLを使うことだと思います。 それにより、VBAでの無駄なロジックを消化できるかと思います。

jone
質問者

お礼

早速、ご教授くださいまして有難うございます。 また、お返事遅くなり申し訳ございませんでした。 >ADOのFINDメソッドは、パラメータ省略時カレント行より後ろをサーチしますが... >KEY-1 KEY-2 KEY-3 ・・・ KEY-10 の順で行が存在することが、保証されていますか? いや、全く保証されていませんでした。 ADOのDB操作に関してもう少し調べたいと思います。 同時にfuuten_no_neko様に述べた内容と重なってしまいますが、DBやSQLの勉強をもっとしようと思います。 今回は、SQLまたはオートナンバー型で考え直したいと思います。 また、煮詰まってしまった場合こちらで、教えを請う事が多々あるかと思いますが、宜しくお願いします。 本当に有難うございました。

関連するQ&A