• 締切済み

Access2003 オートナンバーの現在値取得方法

Access2003 オートナンバーの現在値取得方法 Access2003 VBAでDAO.DBEngineオブジェクトを使用して テーブル定義の取得を行っています。 オートナンバー型のシーケンスの現在値を取得する方法はないでしょうか? MAX関数で最大値を取得する方法は不可です。

みんなの回答

回答No.3

http://msdn.microsoft.com/ja-jp/library/dd148542.aspx 「DAO から ADO への移植9」 の 「ADO、ADOX、および JRO の新機能」 の説明文に 「DAO では使用できません」と注意が書かれたうえで、Increment/Seedの使用方法を説明しています。 DAOは進化していないけどADOは進化しています。 その進化した機能部分に該当しているようですので、DAOでは出来ないと思います。 以前に載せたサンプルは、ADOXを利用しているけど、ADOもADOXも参照設定しない方法でのコードで載せています。 それがダメなのであれば、MSDNを見る限り実現不可能だと思います。

参考URL:
http://msdn.microsoft.com/ja-jp/library/dd148542.aspx
回答No.2

DAOだけ利用した方法は正直わかりません。 ADOXを利用すると取得出来ます。 (※「Microsoft ADO Ext. 2.8 for DDL and Security」を参照すると便利です。) カラムのSeedとIncrementを参照します。 テーブルを開いていなければ、値の設定も行えます。 Sub 呼出()   Dim l_lngNum  As Long   Dim l_lngInc  As Long      If GetAutoNum("テーブル名", "フィールド名", l_lngNum, l_lngInc) Then     Call MsgBox("次の値は「" & l_lngNum & "」" & vbCrLf & "増減値は「" & l_lngInc & "」")   End If End Sub Function GetAutoNum(ByVal p_strTbl As String, ByVal p_strFld As String, Optional p_lngAutoNum As Long, Optional p_lngInc As Long) As Boolean   GetAutoNum = False   Dim l_adoxCat  As Object 'As ADOX.Catalog   Set l_adoxCat = CreateObject("ADOX.Catalog") 'New ADOX.Catalog   l_adoxCat.ActiveConnection = Application.CurrentProject.Connection      On Error Resume Next   Dim l_adoxTbl  As Object 'As ADOX.Table   Set l_adoxTbl = l_adoxCat.Tables(p_strTbl)   If (l_adoxTbl Is Nothing) Then     MsgBox "テーブル不明"     Exit Function   End If      Dim l_adoxFld  As Object 'As ADOX.Column   Set l_adoxFld = l_adoxTbl.Columns(p_strFld)   If (l_adoxFld Is Nothing) Then     MsgBox "フィールド不明"     Exit Function   End If   On Error GoTo 0      If Not CBool(l_adoxFld.Properties("AutoIncrement")) Then     MsgBox "オートナンバーちゃう"     Exit Function   End If      p_lngAutoNum = l_adoxFld.Properties("Seed")   p_lngInc = l_adoxFld.Properties("Increment")   GetAutoNum = True End Function

fasdfasdf
質問者

補足

ADOじゃだめなのよね~

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

回答ではありません。 そのようなこと(オートナンバの現在値=次の挿入で 割り当てられる数値)を知ってどうするのですか? 仮にそのような方法があったとして、レコードを挿入 しても、その値が使われる保証はありません。 参照から挿入までの間に他のプロセスにより挿入が 行われてしまう可能性があるからです。 「あてにならない」値を返してもらっても意味がある とは思えないのですが… 因みにPostgresには調べる方法はあります。また、 値を任意の数値に変更する手段もあります。もっとも あったからと言って、同じく用途は不明です。 Accessでリセットする方法は以下のURLにあります。 http://www.accessclub.jp/bbs/0066/beginers25257.html リセットは意味があると思います。

fasdfasdf
質問者

補足

>そのようなこと(オートナンバの現在値=次の挿入で >割り当てられる数値)を知ってどうするのですか? ACCESS→ORACLEに移行するときに使います リセットが目的ではありません

関連するQ&A

  • ACCESS2000でオートナンバーを1から付けたいのですが

    ACCESS2000のテーブルで新規に作ったときはオートナンバーフィールドが1からになるんですが、何度かレコードの試験入力や削除を繰り返しているうちに、頭の番号が増えていきます。テーブルのデザインで、オートナンバーをテキスト型にして、新しいオートナンバー型行を挿入しても1からになりません。なにかよい方法はないでしょうか?

  • オートナンバー型を1から始める方法はありますか?

    アクセスのVBAで mySQL = "DELETE Tテーブル.* FROM Tテーブル;" DoCmd.RunSQL mySQL を実行して テーブルのデータをすべて削除してから、 データを追加するコードを実行しているのですが オートナンバー型のフィールドが前回の続きの値から始まります。 運用上問題ないのですが 途中の数字から始まってスッキリしません。 削除クエリを実行しても オートナンバー型を1から始める方法はありますか?

  • access2007のオートナンバーについて

    access2007のオートナンバーについて こんにちは、さっそくですが質問させていただきます。 accessの勉強を始めた者ですが、 オートナンバーを指定したフィールドと、その他の必要な項目の フィールドから成るテーブルを作成して、 オートナンバー1~3までのレコードを入力して、 オートナンバー3のレコードを削除した時、 そのあとで、レコードを追加すると、 オートナンバー4のレコードが作成されるのですが、 このレコードをオートナンバー3のレコードとして、 作成することはできるのでしょうか? そのような設定ができろのかどうか、もしできるのであれば、 その方法や、参考になるサイトなど、なにぶん初心者ですので 教えていただけないでしょうか。 よろしくお願いします。

  • アクセス2000 オートナンバーについて

    いつもお世話になります。 アクセス2000を使用しているのですが、Dsum関数を使用したいので、時系列を付けるためにオートナンバーを付けています。必要データが日々変わるためにこのテーブルは全データを削除し追加クエリーを使用して計算もとのテーブルをその都度必要なデータのみにしています。 現在テスト中で特に問題はないのですが、本稼動した場合、オートナンバーが一日に10000程になってしまいます。計算に使うレコード数は200程度なのですが、処理作業を1日に50回程度行いますので。 2年程度メンテナンスはする予定をしていないので、このままではオートナンバーが7000000程度になってしまいます。オートナンバーの数字が多くなることによるエラー等は発生しないのでしょうか。またオートナンバー以外に連番をふる方法はあるのでしょうか。 宜しくお願い致します。

  • INSERT文で発行したオートナンバーを取得したい

    いつも勉強させて頂いています。SQL文について困っています。 -環境- .NET FreamWork2.0 VB SQLSERVEREXPRESS -SQL- インサート時にオートナンバーを取得してデータを追加しているのですが、追加後にオートナンバーの値を戻す(取得する)ことは可能でしょうか?SQL文は下記です。 INSERT INTO マスタテーブル VALUES((SELECT MAX(オートナンバー) + 1 FROM マスタテーブル), 商品名・・・・ 上記で登録されたオートナンバーを別テーブルに格納したい為です、リアルタイムで処理しますので、発行したオートナンバーが即時に必要です。 テーブル更新時に  Dim Ret_Table As DataTable = AS_Cmd.ExecuteScalar() とするとテーブル内容がNothingになります。 他の方法も御座いましたら教えて頂けると幸いです。宜しくお願い致します。

  • Accessのオートナンバーについて

    いつもお世話になります。 Access2002を勉強中の初心者です。 オートナンバーのフィールドを持つテーブルを使用していますが、オートナンバーの最大値はいくつなんでしょうか? また、レコードがその最大値を超えた場合はどうなるのでしょうか? (1に戻るのでしょうか? それともエラーになるのでしょうか?) よろしくお願いします。

  • Accessのオートナンバー

    Accessのテーブルのオートナンバー型は、レコードの追加、削除を繰り返すと飛び番号になってしまいますが、再度ふり直すってできますか? よろしくお願いいたします。 Accessは、超初心者です。

  • アクセス オートナンバーを制御(変更)する方法

    教えてください(もし出来るなら)。 オートナンバーがキーのテーブルにて レコード数が増大した為、バックアップテーブルに 保管し、日々の運用を容易にしたいのですが、 アクセスで自動制御されているオートナンバーを 初期化したいと思って居ます、方法ありますでしょうか? C#.NETにて

  • Access2000 ナンバー自動取得・手動取得の切り替え方法

    こんにちは。 現在Access2000でファイル管理用のデータベースを作成中です。このデータベースは、ファイル登録時、項目によってナンバー取得できるようになっており、最初は自動取得のみだったのですが、手動でも取得できるよう修正することになりました。そして、手動でナンバーを入れた際、歯抜けになってしまった場合でも、自動取得に切り替えると、一番小さい番号の次の番号がつくように作成しなくてはなりません。(例:1,2,5,8,12でナンバー取得されている場合、自動取得で"3"がつくようにしたいのです。)また、この機能はVBAで作成しており、オートナンバーは使用していません。 何か良い意見がございましたら、連絡宜しくお願い致します。

  • アクセスでオートナンバーをリセットするには?

    Accessで連番をふるプロセスで質問です。 データをあるテーブルに追加した時に、連番をふりたいと考えています。 最も簡単なのはオートナンバーフィールドを設定する方法なのですが、この場合一つ欠点があります。 それはレコードを全削除した場合でもナンバーがリセットされないという事です。 追加クエリでテーブルにデータを追加する前に必ずテーブルのレコードを全削除するのですが、 この際にオートナンバーも一緒にリセットする方法は無いでしょうか? また、質問の題名とは変わってしまうかもしれませんが、 オートナンバーを使用せずにレコードに連番をふる方法があればご教授下さい。

専門家に質問してみよう