Record niet gevonden, dan variabelen vullen met 99.

Status
Niet open voor verdere reacties.

mulderm

Gebruiker
Lid geworden
2 jul 2004
Berichten
167
Hallo,

Ik heb een vraag over de volgende code:

Dim db As Database
Dim rs As Recordset
Set db = DBEngine.Workspaces(0).OpenDatabase("C:\test.mdb")
Set rs = db.OpenRecordset("Tabel1")

invoer=Inputbox("Geef Uw invoer in")
rs.MoveFirst
Do Until rs.EOF
If rs("veld1").Value = invoer Then
data1 = rs.Fields("veld2")
data2 = rs.Fields("veld3")
data3 = rs.Fields("veld4")
End If
rs.MoveNext
Loop

rs.Close
db.Close
Set rs = Nothing
Set db = Nothing

Probleem: Als de invoer niet een waarde heeft die veld1 heeft.
worden data1, data2, en data3 gevuld met '0'.
En dat wil ik niet, ik wil dat deze waarden '99' wordt.
Hoe moet ik dit doen?

mulderm
 
Waren alle problemen maar zo eenvoudig.....

Dim db As Database
Dim rs As Recordset
Set db = DBEngine.Workspaces(0).OpenDatabase("C:\test.mdb")
Set rs = db.OpenRecordset("Tabel1")

invoer=Inputbox("Geef Uw invoer in")
rs.MoveFirst
Do Until rs.EOF
If rs("veld1").Value = invoer Then
data1 = rs.Fields("veld2")
data2 = rs.Fields("veld3")
data3 = rs.Fields("veld4")
Else
data1 = 99
data2 = 99
data3 = 99
End If
rs.MoveNext
Loop

rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
 
Helaas,dit werkt niet.

De waarden van data1, data2 en data3 blijven
op 99 staan, omdat alle records worden
doorlopen.
Dat is hem nou juist.

mulderm
 
Dan snap ik even niet wat je nu wel wilt.
Kun je dat misschien op een andere manier uitleggen?
 
Sorry, misschien was ik niet duidelijk genoeg.
Ik probeer wat duidelijker uit te leggen:

Via dit stukje code moet de record gevonden worden als de invoer gelijk is aan veld1.
Als de waarde van de invoer niet in alle records voorkomt moet de waarden van de variabelen data1, data2, en data3 '99' zijn ten teken dat de record niet gevonden is.
Belangrijk punt: veld2, veld3 en veld4 hebben een waarde '0' in de eerste record, hier moet rekening mee worden gehouden.

Iets duidelijker?

mulderm
 
Dan kun je het beter op een andere manier doen.
Voorbeeldje voor data1:

data1 = iif(dfirst("tabel1","veld1","veld1 = '" & cstr(invoer) & "'") IS NULL, 99, dfirst("tabel1","veld1","veld1 = '" & cstr(invoer) & "'") )


Ik ben er niet helemaal zeker van of de functie dFirst NULL teruggeeft als ie niets kan vinden. Het kan ook een lege string zijn.
 
Bartuls,

Dat is een ingewikkelde regel maar ik ga het toch proberen.
Ik heb verder in de help gekeken van Access maar is
de instructie FindFirst niet geschikt voor mijn probleem?
Aangezien hij maar 1 record hoeft op te zoeken en dus
eigenlijk niet alle records.
Heeft hij de record gevonden dan hoeft hij niet meer verder
te zoeken.
Heeft hij de record niet gevonden dan worden de variabelen
99.
Dus een Do Loop lus die ik bedacht hebt is eigenlijk
overbodig.

mulderm
 
De functie dFirst() geeft ook maar één record terug, die doet in dit geval dus hetzelfde als FindFirst(). dFirst is alleen sneller als FindFirst omdat dFirst een snellere zoekmethode gebruikt. Daarom is in de meeste gevallen dFirst te preveren boven FindFirst.
Ik gebruik de IIF() functie om meteen de waarde 99 toe te kennen als dFirst niets vindt.
 
Eindelijk, ik ben eruit na veel oefenen en surfen.
Bartuls, de regel die je voor data1 voor mij gemaakt
hebt werkt bij mij op de een of andere manier niet.
Toch bedankt!
Hier volgt de code:

Dim db As Database
Dim rs As Recordset
Set db= DBEngine.Workspaces(0).OpenDatabase("C:\test.mdb") Set rs = db.OpenRecordset("Tabel1", dbOpenDynaset)
invoer = InputBox("Geef Uw invoer in: ")
rs.FindFirst "[veld1]= '" & invoer & "'"
If rs.NoMatch = False Then
data1 = rs.Fields("veld2")
data2 = rs.Fields("veld3")
data3 = rs.Fields("veld4")
Else
data1 = 99
data2 = 99
data3 = 99
End If
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan