gegevenstypen komen niet overeen

Status
Niet open voor verdere reacties.

plenarts

Gebruiker
Lid geworden
4 apr 2005
Berichten
18
Goedemorgen,

Hier onder staat een stukje code om het aantal records in de tabel tblStadiaGate te tonen. Nu krijg ik de melding dat de gegevens typen niet overeen komen, maar ik weet even niet hoe wat en waarom. Iemand een oplossing.
Ik werk met Access2000

Function aantal_records()
Dim db As Database, r As Recordset
Set db = CurrentDb
Set r = db.OpenRecordset("tblStadiaGate", dbOpenTable)
Debug.Print r.RecordCount
r.Close
db.Close
End Function

groet paul
 
Je code ziet er goed uit zo op het eerste gezicht.

Kan je de database zippen en attachen?
Ik kan er niet eerder dan vanavond naar kijken.

Weest gegroet,
Guus
 
Guus,

het is al opgelost. Het is een DAO-code die ik wil gebruiken in Access2000 en dat werkt niet he. Ik heb hem aangepast naar ADO.

Groet Paul
 
Nou het is dus toch niet opgelost.

Ik heb nu de onderstaande code tijdelijk in gebruik

Function Gates()
Dim db As Database
Dim rst As Recordset
Dim Gate1 As Integer

Set db = CurrentDb()
Set rst = db.OpenRecordset("StadiaGate")
If Not (rst.BOF And rst.EOF) Then
rst.MoveFirst

Do Until rst.EOF
Gate1 = rst("Gate")
Debug.Print Gate1
rst.MoveNext
Loop
End If
rst.Close
Set db = Nothing
End Function

Als ik nu op de knop klik die de functie aanstuurt zie ik niets gebeuren. hoe kan ik de data zichtbaar maken en een volgende vraag is:

Wat moet er gebeuren als er meer velden uit de tabel aangesproken moeten worden.

Het gedeelte van de code die nu Debug.Print Gate1 aangeeft, is nu een stukje voor mij om te zien of code werkt. Later dient hier code komen te staan voor het updaten van een formulier. Hierin wordt gebruik gemaakt van 'vinkjes' aan/uit die een bepaald stadia in proces aanduid

Iemand enig idee

Bedankt Paul
 
De volgende code is een beetje vreemd.
Code:
 If Not (rst.BOF And rst.EOF) Then
Beter is
Code:
If rst.recordcount > 0 then
Deze laat duidelijker zien wat je wilt. Want als BOF én EOF waar zijn, dan is de recordset leeg.

Verder lijkt de code goed te zijn. Weet je zeker dat je database gevuld is en dat je de juiste tabel selecteert?

Weet je zeker dat het type van Gate1 (integer) juist is?
Als rst("Gate") een string teruggeeft dan wordt deze zonder foutmelding geconverteerd naar een integer. Die wordt dan altijd 0.
Je kan dat controleren door de functie IsNumeric() te gebruiken.

Succes,
Weest gegroet,
Guus
 
Guus,

het stukje code: If Not (rst.BOF And rst.EOF) Then

klopt wel want het zegt als BOF en EOF niet leeg zijn dan vervolgt hij met rest van code. Het is een beetje de omgekeerde wereld, maar ik heb zulke beetje verwarrende codes wel vaker gezien.

De database is gevuld en de juiste tabel wordt aangeroepen. De rst("Gate") is de betreffende kolom in mijn tabel "StadiaGate". De waarde van "Gate" is Integer. IK kan het morgen proberen met IsNummeric().

Met Debug.Print dienen dan toch het aantal records zichtbaar te worden.
Nog enig idee wat moet er gebeuren als er meer velden uit de tabel aangesproken moeten worden om daarvan de waarde te zien? Kan ik dan een tweede kolom van tabel aanroepen en daar weer loop mee maken.

groet, Paul
 
Typisch de "Wet van de volgende dag".
Probleem opgelost?

Je zal wel hetzelfde bedoelen maar de debug.print print voor ieder record de waarde van het "Gate" veld. Ikzelf geef voorkeur aan de iets leesbare notatie rst.fields("Gate") of de snellere code: rst.fields(0) als ik zeker weet dat het het eerste veld is in de tabel. Hier hoef je natuurlijk niets mee te doen maar neem het maar voor kennisgeving aan:D

Weest gegroet,
Guus
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan