[VB / Access] Eerst beschikbare autonummering ophalen

Pagina: 1
Acties:

  • nenne
  • Registratie: Juni 2004
  • Laatst online: 06-06-2024
Hoi Tweakers,

In mijn VB6-applicatie doe ik het volgende: ik heb een formulier waarin gegevens ingevoerd kunnen worden, waarna ze opgeslagen worden in een MS Access-tabel.

Tijdens de invoer wil ik graag vermelden welk autonummer aan de nieuwe gegevens wordt toegekend. Het laatste autonummer haal ik op met de volgende code:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Public Function ophalenBeschikbaarDetectorID() As Long

  Dim sSql As String
  Dim rRst As New ADODB.Recordset
      
  'SQL-statement:
  sSql = "select Max(DetectorID) as MaxDetectorID" & _
          " from Detectoren"
                
  'SQL-statement uitvoeren:
  rRst.Open sSql, modDatabaseConnectie.gConn, adOpenStatic, adLockOptimistic

  'Het eerste beschikbare detectornummer is gelijk aan laatste detectornummer + 1:
  If rRst.RecordCount > -1 Then
    ophalenBeschikbaarDetectorID = rRst("MaxDetectorID") + 1
  Else
    'De tabel Detectoren bevat nog geen gegevens:
    ophalenBeschikbaarDetectorID = 1
  End If

  'Sluiten:
  rRst.Close
  'Opruimen:
  Set rRst = Nothing

End Function


De tabel Detectoren bevat op dit moment nog geen gegevens, toch is het statement "If rRst.RecordCount > -1 Then..." altijd waar, aangezien MS Access standaard het autonummer 1 toekent aan het eerste record, ook al is het leeg.

Op welke manier zou ik anders kunnen controleren of de tabel leeg is?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20:27

gorgi_19

Kruimeltjes zijn weer op :9

Als de waarde System.DBNull.Value is, dan is de tabel leeg, anders is deze gevuld.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • nenne
  • Registratie: Juni 2004
  • Laatst online: 06-06-2024
gorgi_19 schreef op 14 juli 2004 @ 10:15:
Als de waarde System.DBNull.Value is, dan is de tabel leeg, anders is deze gevuld.
Bedankt, ik zal het proberen!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Je begrijpt dat dit met een multi-user (netwerk-)applicatie compleet de mist in gaat?
Je kunt beter dat record vast "nemen" (vullen met dummy data) en dat autonummer dan gebruiken als je het toch per se zo wil doen. Annulleert de gebruiker dan de bewerking, dan moet je dat record dus wel weer vrijgeven enzo... Niet echt fijn hoor Stel dat je app onderuit gaat nadat het record is "bezet" met dummy data :Y)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • nenne
  • Registratie: Juni 2004
  • Laatst online: 06-06-2024
RobIII schreef op 14 juli 2004 @ 10:18:
Je begrijpt dat dit met een multi-user (netwerk-)applicatie compleet de mist in gaat?
Dat besefte ik niet, maar gelukkig is de applicatie single-user :)

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
nenne schreef op 14 juli 2004 @ 10:21:
[...]


Dat besefte ik niet, maar gelukkig is de applicatie single-user :)
nog wel ja, maar dat is geheid de volgende vraag bij oplevering :P

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • nenne
  • Registratie: Juni 2004
  • Laatst online: 06-06-2024
RobIII schreef op 14 juli 2004 @ 10:42:
[...]

nog wel ja, maar dat is geheid de volgende vraag bij oplevering :P
>:)

Verwijderd

En daar komt nog eens bij dat wanneer je een recordset opent deze helemaal nog niet weet hoeveel records er in je recordset zitten. Dus daar kan je niet van uit gaan.

Gebruik maar:
code:
1
2
3
4
5
6
7
with rRST
    If not .EOF then
        ophalenBeschikbaarDetectorID = rRst("MaxDetectorID") + 1
    Else
        ophalenBeschikbaarDetectorID = 1
    End If
End With

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20:27

gorgi_19

Kruimeltjes zijn weer op :9

Voor zo ver ik weet returned hij wel een record, maar de waarde is Null :)

Meest eenvoudige oplossing zou trouwens zijn om je SQL Statement te wijzigen;
SQL:
1
select IsNull(Max(DetectorID),1) as MaxDetectorID from Detectoren

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

gorgi_19 schreef op 14 juli 2004 @ 11:23:
Meest eenvoudige oplossing zou trouwens zijn om je SQL Statement te wijzigen;
SQL:
1
select IsNull(Max(DetectorID),1) as MaxDetectorID from Detectoren
Weet je heel zeker dat dit werkt in Access? Misschien kan je beter :

code:
1
select IIF(IsNull(Max(DetectorID)),1,Max(DetectorID)+1) as MaxDetectorID from Detectoren


doen...

Verwijderd

Waarom moet je het nummer van te voren weten? Besluit hij als hij nummer 13 krijgt om toch maar niet toe te voegen? Je kan het uitgereikte nummer na toevoegen ophalen en tonen!
Pagina: 1