Re: Kombifeld Formular: Neuer Eintrag + Abgleich mit Quelltabelle
- From: "Henry Habermacher [MVP Access]" <DontSpamHenry@xxxxxxxxxxxxxx>
- Date: Wed, 18 Apr 2007 14:50:56 +0700
Hallo Karl
quoting Karl Donaubauer:
Set rswae = db.OpenRecordset(stsql)
If rswae.RecordCount = 0 Then
Sicherer ist für sowas:
If rswae.BOF Then
s.a. www.donkarl.com/?FAQ6.17
Was ist an rswae.BOF sicherer als den RecordCount auf 0 zu prüfen? Ich behaupte BOF liefert nicht in allen Sitationen das richtige Ergebnis, die Prüfung auf Recordcount = 0 hingegen schon. Da sitzt Du IMHO einer verbreiteten Irrmeinung auf.
Hier ein bisschen Code, der zeigt, das die Prüfung auf BOF=True durchaus nicht immer das erwartete liefert, RecordCount hingegen schon:
Public Function testBOF()
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb()
Dim maxID As Long
maxID = DMax("PersonID", "Personen")
Set rs = db.OpenRecordset("SELECT PersonID " & _
"FROM Personen WHERE PersonID=" & _
maxID, dbOpenDynaset)
Debug.Print "Nach OpenRecordset"
Debug.Print "BOF=" & rs.BOF & _
", EOF = " & rs.EOF & ", RecordCount = " & _
rs.RecordCount; ""
rs.MovePrevious
Debug.Print "Nach MovePrevious"
Debug.Print "BOF=" & rs.BOF & _
", EOF = " & rs.EOF & ", RecordCount = " & _
rs.RecordCount; ""
rs.MoveFirst
Debug.Print "Nach MoveFirst"
Debug.Print "BOF=" & rs.BOF & _
", EOF = " & rs.EOF & ", RecordCount = " & _
rs.RecordCount; ""
rs.Delete
Debug.Print "Nach Delete"
Debug.Print "BOF=" & rs.BOF & _
", EOF = " & rs.EOF & ", RecordCount = " & _
rs.RecordCount; ""
rs.MoveFirst
Debug.Print "Nach MoveFirst"
Debug.Print "BOF=" & rs.BOF & _
", EOF = " & rs.EOF & ", RecordCount = " & _
rs.RecordCount; ""
rs.Requery
Debug.Print "Nach Requery, wenn RS leer"
Debug.Print "BOF=" & rs.BOF & _
", EOF = " & rs.EOF & ", RecordCount = " & _
rs.RecordCount; ""
rs.Close
Set rs = Nothing
Set db = Nothing
End Function
call testBOF()
Nach OpenRecordset
BOF=False, EOF = False, RecordCount = 1
Nach MovePrevious
BOF=True, EOF = False, RecordCount = 1
==> BOF ist True, es existiert aber ein Record!
Nach MoveFirst
BOF=False, EOF = False, RecordCount = 1
Nach Delete
BOF=False, EOF = False, RecordCount = 0
==> BOF ist False, Recordset ist nun aber leer!
Nach MoveFirst
BOF=True, EOF = True, RecordCount = 0
Nach Requery, wenn RS leer
BOF=True, EOF = True, RecordCount = 0
Fazit:
Es ist *nicht* sicherer auf BOF als auf Recordcount zu prüfen. Wenn das Recordset soeben geöffnet wurde, stimmt zwar BOF auch, aber es gibt einige Fälle, wo die Recordcount = 0 das richtige Ergebnisse liefert, die Prüfung auf BOF das falsche.
Falls Du einen Fall kennst, wo rs.Recordcount = 0 das falsche Ergebnis liefert oder ein Bug bekannt wäre, bin ich froh um Hinweise.
Gruss
Henry
--
Keine E-Mails auf Postings in NGs. Danke.
KB: http://support.microsoft.com/default.aspx
FAQ: http://www.donkarl.com
OH: Online Hilfe (Taste F1)
Downloads: http://www.dbdev.org
.
- Follow-Ups:
- Re: Kombifeld Formular: Neuer Eintrag + Abgleich mit Quelltabelle
- From: Karl Donaubauer
- Re: Kombifeld Formular: Neuer Eintrag + Abgleich mit Quelltabelle
- References:
- Kombifeld Formular: Neuer Eintrag + Abgleich mit Quelltabelle
- From: Michael Rapoport
- Re: Kombifeld Formular: Neuer Eintrag + Abgleich mit Quelltabelle
- From: Karl Donaubauer
- Kombifeld Formular: Neuer Eintrag + Abgleich mit Quelltabelle
- Prev by Date: Re: Acc 07 Laufzeitfehler
- Next by Date: Re: Acc 07 Laufzeitfehler
- Previous by thread: Re: Kombifeld Formular: Neuer Eintrag + Abgleich mit Quelltabelle
- Next by thread: Re: Kombifeld Formular: Neuer Eintrag + Abgleich mit Quelltabelle
- Index(es):
Relevant Pages
|