• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

doorlopen rs.EOF And rs.BOF bij geen gevonden waarde

Status
Niet open voor verdere reacties.

vaneijk

Gebruiker
Lid geworden
31 mrt 2017
Berichten
152
Geachte helpers van het forum,

Ik heb een access database waaruit ik gegevens importeer naar mijn excel document. In het access bestand staan het jaar en Volg_nr als nummeriek aangegeven. Ik wil automatisch een nieuw offertenummer laten bepalen. Hierop laat ik eerst in de database zoeken dmv onderstaande Sql

Code:
 Sql = "SELECT MAX(Volg_nr) FROM Off_Menu WHERE Jaar Like '" & Jaartal & "';"

Nu heb ik daaronder staan.
Code:
If rs.EOF And rs.BOF Then

Als het jaartal is gevonden in de database dan lukt het mij om een nieuw nummer te genereren, als het jaartal niet gevonden wordt loopt het momenteel fout.

Normaal als ik 'MAX(Volg_nr)' zou vervangen door een '*' en het 'Jaartal' is niet gevonden dan vangt de rs.EOF And rs.BOF dit op. Nu met bovenstaande Sql vangt de 'rem' hem niet op als er geen vergelijkbaar jaartal is b.v. 2021. Dan alsnog loopt het script verder.

Kan iemand mij vertellen wat ik hierin fout doe, wat ik hiervan niet begrijp en wat ik hieraan zou moeten aanpassen?

mvg,

E.
 
Hierbij de hele code welke ik heb staan

Code:
Sub Import_Offerte_Data(Jaartal As String, Other_String As Boolean, Optional New_string As String)
UserForm.TextBox0.Clear
Set cnn = New ADODB.Connection
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & OffDB
If Other_String = True Then
    Sql = New_string
Else
    Sql = "SELECT MAX(Volg_nr) FROM Off_Menu WHERE Jaar Like '" & CLng(Jaartal) & "';"
End If
Set rs = New ADODB.Recordset
rs.Open Sql, cnn
If rs.EOF And rs.BOF Then
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing

''Define_new_OffNumber   '' < ====  is een losstaand script om een nieuw nummer te genereren.

Exit Sub
End If


UserForm.TextBox0.Column = rs.GetRows

''Herschrijf_Waardes_Tb0   '' < ====  is een losstaand script om de nummering aan te passen en een nieuw nummer aan te geven.

On Error GoTo 0
Exit Sub
ErrHandler:
Set rs = Nothing
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure importeren van offertenrs"
End Sub

Als ik dus het jaartal 2020 kies of een eerder jaar wat in de database voorkomt, ondervind ik geen problemen met bovenstaande, nu is dus het geval, moment dat ik het jaartal 2021 kies (wat niet in de database voorkomt) het script doorloopt en dus problemen geeft. De bedoeling is dat hij wordt opgevangen bij de 'rem' ==> If rs.EOF And rs.BOF
Ik snap echt alleen niet waarom het geheel doorloopt.

Als ik bovenstaand script gebruik, een jaartal kies wat niet voorkomt in de database, de Sql vervang door b.v Sql = "SELECT * FROM Off_Menu WHERE Jaar Like '" & CLng(Jaartal) & "';"
dan stopt het script wel bij de 'rem' ==> If rs.EOF And rs.BOF.
 
Volgens mij is het zo dat als er geen match wordt gevonden je bij deze code als resultaat null krijgt:
Code:
rs.MoveFirst
Debug.print rs.Fields(0).Value
terwijl er anders het hoogste volgnr in komt te staan. Misschien helpt dat?
 
@jkpieterse,

Bedankt voor uw reactie, en inderdaad ik krijg een null als resultaat met dit script. Maar dat houd dus in dat is de rs.EOF And rs.BOF in dit voorbeeld met deze Sql dus niet nodig heb.
Maar dan snap ik niet waarom als er een null resultaat is deze voorbij loopt aan de rs.EOf And rs.BOF. Dat zou deze toch moeten stoppen?
 
maar inderdaad, even niet aan gedacht aan de retourwaarde Null ( ik zat me blind te staren waarom hij doorliep bij de 'rem').
Ik ga gewoon dan 'If IsNull(rs.Fields(0).Value)' Then gebruiken.

Nogmaals bedankt voor uw tip en dus uw reactie.

mvg,

E.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan