3

私の Access データベースには、「Demande」というテーブルがあります。「Numero de Commande」列のすべてのレコードを読み取り、その列の最大の数値を読み取って、その数値を次の新しいレコードに使用できるようにしたいと考えています。

だからここに私のテーブルがあります:

テーブル画像

キー インデックスは Numero de Commande 用です。

ここに私のコードがあります:

 Dim highestInt as Integer
 Dim newNumeroCommande as Integer

 Set currentDatabase = CurrentDb
 Set rstDemande = currentDatabase.OpenRecordset("Demande")

 ' Find the highest integer in the column "Numero de Commande"

 newNumeroCommande = highestInt + 1
 rstDemande.AddNew
 rstDemande("Numero de Commande").Value = newNumeroCommande 
 rstDemande.Update

助けてくれてありがとう。

4

2 に答える 2

4

列にアルファのない数値のみが含まれている限り、次を使用できます。

NewNumeroCommande = Dmax("[Numero de Commande]", "Demande") + 1

注: これは私の推奨する方法ではありませんが、Access の組み込みオプションにすぎません。可能であれば、自動番号付けを使用して手間を省くことができます。または、最高のレコード番号を記録する別の「カウンター」テーブルを作成することもできます。別のテーブルを作成したい場合は、このテーブルをロックし、値を 1 つ増やして (そしてこれを使用して)、ロックを解放することができます。これは、マルチユーザー環境でより効果的です。

于 2012-08-14T09:47:34.980 に答える
4

シーケンス番号の取得に関する注意事項。これには、Microsoft ActiveX Data Objects xx ライブラリへの参照が必要です。

連番

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strSQL As String
Dim lngResult As Long
Dim strCon As String

    lngResult = 0  'assume fail

    strCon = "Provider=" ''Connection to back-end
    cn.Open strCon

    rs.CursorType = adOpenKeyset
    rs.LockType = adLockPessimistic
    rs.CursorLocation = adUseServer

    ''Where BEInfo is a single line table
    strSQL = "SELECT ASeqNumber FROM BEInfo"

    rs.Open strSQL, cn, , , adCmdText

    'Note this is ADO, so no rs.Edit
    rs!ASeqNumber = rs!ASeqNumber + 1
    rs.Update

    lngResult = rs!ASeqNumber

    ''This should not happen, but just to be sure
    If DCount("ASeqNumber", "Table", "ASeqNumber=" & lngResult) > 0 Then
        lngResult = 0
    End If
于 2012-08-14T10:46:05.107 に答える