1

Jet (MS Access)データベースで自動インクリメント フィールド (別名 COUNTER、または Access UI の "AutoNumber") のシードとインクリメントを取得する方法を知っている人はいますか?

対応する DAO.Field オブジェクト、ADO.Field オブジェクト、および ADOX.Column オブジェクトのすべてのプロパティを列挙しましたが、何も特定できませんでした。MSys* テーブルの奇抜なハックやネイティブ メソッド呼び出しなど、どのような方法でもかまいません。

バックグラウンド:

Jet SQL では、次のように、カスタム シードを使用して自動インクリメント列を作成し、DDL データ型句COUNTER(seed, increment)でインクリメントできます。

CREATE TABLE ODD_INCREMENTER (
    ID_COL   COUNTER(-52098, 42)
  , TEXT_COL VARCHAR(50)
)

これにより、次のテーブルが作成されます (デモ用にいくつかのデータが追加されています)。

ここに画像の説明を入力

4

2 に答える 2

3

ADOXが使える

Dim cat As New ADOX.Catalog 
Dim tbl As ADOX.Table       
Dim col As ADOX.Column      

Set cat.ActiveConnection = CurrentProject.Connection
Set tbl = cat.Tables("Table1")
Set col = tbl.Columns("AKey")
'Next autonumber
lngSeed = col.Properties("Seed")

Allen Browne にはかなり詳細なリファレンスがあります: http://allenbrowne.com/ser-40.html

于 2012-10-24T20:54:11.903 に答える
2

参照を追加する代わりに、遅延バインディングを使用することを検討してください。

プロパティを調べることで、シードに加えて増分を取得できます。

Public Sub SeedAndIncrement(ByVal pTable As String, _
        ByVal pAutonumField As String)

    Dim cat As Object
    Dim objColumn As Object
    Set cat = CreateObject("ADOX.Catalog")
    Set cat.ActiveConnection = CurrentProject.Connection
    Set objColumn = cat.Tables(pTable).Columns(pAutonumField)
    Debug.Print "Seed: " & objColumn.Properties("Seed")
    Debug.Print "Increment: " & objColumn.Properties("Increment")
    Set objColumn = Nothing
    Set cat = Nothing
End Sub
于 2012-10-24T21:02:43.130 に答える