2012-03-02 10 views
1

mdbアクセスデータベースに新しい行を挿入した後に、Auto_Incrementプライマリキー(id)を取得する必要があります。 mdbファイルも古いAccess 97バージョンにあるため、サポートされていないため「SELECT @@ Identity;」を使用できません。古いmdbデータベースで自動インクリメントの主キーを取得する方法は?

さらに、マルチユーザー環境では、私はMax(ID)を使用する考えが嫌いです。

実際に私が持っている唯一の解決策は、それがとしてDAOを使用することです:

Dim db As Database   'Test Database 
Dim rs As Recordset   'Test Table 
... 
rs.AddNew 
id = rs!id 

が、私はフルマネージド.NETを持っていると思いながら、私は、DAO COM DLLへの参照を追加する必要がありますコード。

DAOまたはMax(ID)を使用せずに(新しい行を挿入した後に)Auto_Incrementプライマリキーを取得する方法はありますか?

Using oConn As New OleDbConnection(m_ConnString) 
     oConn.Open() 
     Using cmd As New OleDbCommand(sqlInsert, oConn) 
      cmd.ExecuteNonQuery() 
     End Using 
    End Using 

ありがとう:

ここに私のコードは、新しい行を追加します。

+0

挿入を行い、トランザクション内で選択すると、Maxを使用できます。それは私が知っているビットクラップですが、それはAccess97 ... –

+0

申し訳ありませんが、私はあなたが後でアクセス形式にMDBを更新することができない限り、DAOの参照を使用する必要があると思います。トニーのコメントは正しい - 私は本当にアクセストランザクションを信頼するかどうかはわかりませんが、それを行えます。 –

+0

@トニー:取引では大丈夫ですが、Maxは私が避けたいオーバーヘッドを作り出しています。 – gingo

答えて

0

このテーブルに一意のインデックスを持つその他の必須フィールドがある場合は、挿入後にその値をDFirst("ID", "tablename", "myfield = givenvalue")などと照会することができます。トランザクションで実行している場合は、DFirstの代わりにレコードセットを使用します(おそらく挿入の場合と同じです)。

関連する問題