Dcount probleem en heb er reeds veel tijd aan verspild

Status
Niet open voor verdere reacties.

conehead

Gebruiker
Lid geworden
25 feb 2015
Berichten
22
Hallo,

Ik heb hier ook al even gezocht maar kom er maar niet uit.
Het lijkt me echter eenvoudig.

Kijken of na het inlezen van een identiteitskaart de naam van de persoon reeds bestaat in de tabel.

Heb al allerlei dingen geprobeerd maar ik doe wellicht iets mis met '") ofzo

Mijn code

Code:
Private Sub cmdBewaar_Click()
If IsNull(DLookup([Chauffeur], "Chauffeurs", "[Chauffeur]='" & Me.TxtNaam_voornaam & '")
MsgBox ("Deze kaart is reeds ingelezen")
Else
MsgBox ("Deze kaart is nog niet ingelezen")
End If
End Sub

Ik heb dus een tabel Chauffeurs met daarin een veldnaam Chauffeur. In mijn formulier heb ik een textvak TxtNaam_voornaam
Ik wens dus te controleren of er reeds een record bestaat in de tabel Chauffeurs met de naam die momenteel in de textbox TxtNaam_voornaam staat maar ik kom er maar niet uit.

Volgens mij zit de fout bij het plaatsen van & ' " ) of zoiets ??

Indien ik het formulier laat lopen zonder te controleren op de waarde in de textbox werkt het wel maar is dus niet de bedoeling

hopelijk komt er iemand met een oplossing
 
Je geeft nota bene zelf al aan waar de fout zit :).
Code:
If DLookup("Chauffeur", "Chauffeurs", "Chauffeur='" & Me.TxtNaam_voornaam & [B]"[/B]'") = ""
 
Hallo,

Het lukt nog altijd niet hoor, en het ging eigenlijk over dcount en niet over dlookup maar ik vermoed dat de syntax hetzelfde is.

Ik vind het trouwens raar dat er op internet altijd voorbeelden zijn zoals jij hier vermeld met "", terwijl ik het veld dat ik moet opzoeken tussen grote haken [ ] dien te zetten om het te doen werken.
Had mijn code ook aangepast naar uw voorbeeld maar dit werkte dus ook niet
Hieronder mijn huidige ook niet werkende versie
Code:
Private Sub cmdBewaar_Click()
If IsNull Dcount([Chauffeur], Chauffeurs", [Chauffeur] = " & Me.TxtNaam_voornaam & "'") Then
MsgBox ("Deze kaart is reeds ingelezen")
Else
MsgBox ("Deze kaart is nog niet ingelezen")
End If
End Sub
ik weet het ook niet meer :-(
 
Je hebt de quootjes weggehaald; die staan er niet voor niets!
Code:
Dcount("Chauffeur", "Chauffeurs", "Chauffeur = '" & Me.TxtNaam_voornaam & "'")
D(atabase) functies zoals DLookup en DCount hebben parameters nodig. Om die te benoemen zet je ze tussen "". Zonder die quootjes doet de functie het dus absoluut nooit. Rechte haken mogen om een veldnaam staan, maar zijn alleen verplicht (noodzakelijk) als in de veldnaam een of meer spaties zitten. Dus Dcount("Naam Chauffeur", "Chauffeurs", "Naam Chauffeur = '" & Me.TxtNaam_voornaam & "'") is fout, en Dcount("[Naam Chauffeur]", "Chauffeurs", "[Naam Chauffeur] = '" & Me.TxtNaam_voornaam & "'") is goed.
Kortom: de formule zoals ik 'm hierboven heb gezet, moet gewoon werken.
 
Nog een paar aanvullende opmerkingen:
1. Als ik een tabel met de naam "Chauffeurs" zie, dan verwacht ik daar de gegevens van alle chauffeurs in te vinden. En wel 1 x. Want elke chauffeur zou uniek moeten zijn in die tabel. DCount op basis van naam levert dus altijd de waarde 1 op. Daar heb je geen functie voor nodig lijkt mij.
2. Tellen in een tabel doe je bij voorkeur op een veld dat nooit leeg is. Dus liefst het sleutelveld, want dat mag nooit leeg zijn. Dus tel ik bij voorkeur op [ChauffeurID] en niet op een naamveld. Het hoeft natuurlijk niet fout te gaan, maar tellen op een veld als [Tussenvoegsel] levert geheid foute resultaten op.
 
Hallo Octafish,

Dcount op basis van naam neemt toch niet altijd de waarde 1 op tenzij ik de functie verkeerd begrijp. Mijn bedoeling is te testen of de naam in het tekstvak reeds voorkomt in de tabel. Wanneer hij nog niet voorkomt zou hij toch niet de waarde 1 moeten retourneren maar de waarde 0.

Ik zal het nog eens testen en desnoods hier eens een voorbeeldje online zetten want ik ben nu al uren aan dit gedeelte bezig (maar men leert wel bij )

alvast heel bedankt
 
Man man man,

Ik heb het probleem gevonden en het is erg ...

Ik had in mijn code gezegd dat na klikken op bewaren de data naar een andere tabel diende gekopieerd te worden ... Ik was de functie aan het maken met de naam van de tabel en de naam van het veld waarnaar ik de data ging kopiëren ipv de tabel waar zich de huidige records bevonden ....

En dat zie ik nu pas ....

Alvast bedankt voor de hulp
 
Mijn bedoeling is te testen of de naam in het tekstvak reeds voorkomt in de tabel.
Ik snap nog steeds niet helemaal wat je aan het maken bent (hoeft ook niet natuurlijk) maar als je in een formulier een keuzelijst gebruikt om de chauffeur te kiezen (en dat kan natuurlijk alleen als de chauffeur bestaat) dan kun je met de gebeurtenis <Bij niet in lijst> precies doen wat je wilt: de nieuwe chauffeur toevoegen. Kortom: kwestie van de juiste techniek gebruiken :).
 
Hallo,

Ik vertrek niet van een keuzelijst hoor. Ik lees identiteitskaarten in via een kaarlezer ( van chauffeurs ) en indien ze al in de database bestaan moet er een melding komen dat ze reeds bestaan zodat ze uniek blijven

Ik controleer dus de naam van de chauffeur of het rijksregisternummer ...

groetjes
 
Dan zou ik dat toch doen via een keuzelijst. De gekozen waarde (chauffeur) wordt dan gelijk getoond als hij in de keuzelijst staat, en dan kun je dus gelijk de gegevens controleren. En als hij niet gevonden wordt, weet je exact hoe laat het is :).
 
Ik laat in mijn functie ook controleren of er al een chipnummer is ingevuld (dwz dat de chauffeur in kwestie al vroeger 's zijn ID heeft afgegeven om te scannen; ieder ID heeft nml een eigen uniek chipnummer), dat is zeker uniek, namen niet; je kunt makkelijk 2 mensen hebben met zelfde naam en voornaam en checken op RR nummer is niet afdoende; mensen kunnen makkelijk een nieuw ID hebben met nieuw adres. Is dat chipnummer ingevuld én hetzelfde dan geef ik een berichtje voor OK en als het chipnummer al bestaat maar anders is dan het nieuwe vraag ik om te overschrijven of niet. En als er geen nummer is ingevuld dan gewoon laten invullen
 
Hallo, zo doe ik het eigenlijk ook. Die naam was maar om te testen. Ik heb wel alle velden unboud gemaakt .. anders heeft access blijkbaar de neiging alles toch te bewaren bij sluiten formulier. Zelfs bij cancel = true
 
.. anders heeft access blijkbaar de neiging alles toch te bewaren bij sluiten formulier. Zelfs bij cancel = true
Je snapt het concept van formulieren geloof ik nog niet helemaal :). Een formulier baseer je in beginsel op een gegevensbron zoals een tabel of een query. Het formulier werkt dan alleen maar als een laag die op de gegevens ligt; je werkt echter gewoon direct op de gegevensbron. Dus als je iets muteert in je formulier, dan muteer je gewoon de onderliggende tabel. En gegevens worden in Access altijd gelijk bewaard. Daar is niks vreemds aan.
Wil je dat niet, dan maak je het formulier niet-afhankelijk. En dan gebeurt er niks met de gegevens, tenzij je zelf iets maakt waardoor de gegevens alsnog worden bewaard. Cancel=True werkt dus alleen op basis van wat je onder je formulier doet.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan