2011-06-27 68 views
4

テーブルのプライマリキーとして機能するインクリメンタルに設定されたオートナンバー型フィールドを持つMicrosoft Access/JETのテーブルがあります。プライマリキーの値が次に挿入されるレコードの値であるかどうかを知る必要がありますが、レコードが挿入される前にの値を知る必要があります。SELECT MAX([ID]) + 1 FROM [TableName];を使用すると、レコードはテーブルの末尾から定期的に削除されるため、機能しません。Accessテーブルの次のオートナンバーを取得します

は、SHOW TABLE STATUSコマンドを使用して簡単に実行されたことがわかりました。 ADO、DAO、VB6、または他の利用可能なツールを使用して、Access/JETと全く同じことをさせてくれるものはありますか?

+2

あなたはあらかじめ番号を知る必要はないと思います。なぜあなたはあなたがそうすると思いますか? –

+3

質問に答えるだけではなく、何かが必要な理由を聞く方が好きな人は、面白いと思います。 – HK1

+2

なぜ誰も無意味な質問に答える時間を無駄にするだろうか?つまり、なぜ誰も最初にやるべきことがなければならないことをどうやって説明するのですか?サロゲートPK値には意味を与えてはいけません。次の値が何であるかは決して気にしないでください。気にしているのであれば、データベースエンジンに依存するのではなく、フィールドの値を自分で管理する必要があります。そして、もちろん、種の価値を見つける方法の答えは、私がコメントを投稿した時点で既に掲載されていたので、私は答えを投稿する理由は全くありませんでした! –

答えて

6

ADN(Microsoft ADO Extensions for DDL and Security)を使用して、オートナンバーフィールドの現在の"シード"の値を判断することができます。

Public Function NextAutonumber(ByVal pTable As String, _ 
     ByVal pAutonumField As String) As Long 

    Dim cat As Object 
    Set cat = CreateObject("ADOX.Catalog") 
    Set cat.ActiveConnection = CurrentProject.Connection 
    NextAutonumber = cat.Tables(pTable).Columns(pAutonumField).Properties("Seed") 
    Set cat = Nothing 
End Function 

(注)このアプローチは、マルチユーザーの状況で間違った結果を与えることができる...他のユーザーがあなたが次のオートナンバー型を取得し、あなたが実際にあなたのINSERTを行うまでの間にINSERT中をこっそりすることができます。それが重要な場合は、INSERTの後にSELECT @@Identityにチェックして、期待どおりの価値があるかどうかを検証できます。

+0

** CurrentProject.Connection **とは何ですか? –

1

AccessのAutonumber機能は、SQL ServerのID列またはMySQLのAUTO_INCREMENT列と比べて非常に制限されています。 不正確なSQLを使用することの次の利用可能な番号を検索する方法はありません。あなたが述べたように、最後から削除されたレコードは、先頭の番号と次の番号が一致しないようにします。(下記の編集を参照してください)

長い番号フィールド(オートナンバーではない)を使用して、新しいレコードを挿入するときに使用する独自の自動インクリメント機能を作成する方がよいと思います。

編集:私はHansUpは実際にあなたが求めていたものを行うための方法を発見したことがわかり
。彼の解決策を見てください。

+0

それは私がやったことです。 –

1

私は当初HK1のソリューションに同意しましたが、Hansはより良いソリューションを見つけました。

私は、ロールバックを伴うトランザクションでレコードを挿入することによってIDを見つけることを提案するつもりでした。問題は、次の番号(例:62)が表示されますが、実際に新しいレコードを追加すると、それ以降のIDが取得されます(63)。修復すると、次の使用可能な数値に値がリセットされます。

ちょうど不思議なことに、なぜこの番号を知る必要がありますか?この値が必要な記録(紙またはその他)がある場合は、実際に記録を入力した後で、そのシステム/書類に記録する必要があります。

関連する問題