Mn formulier snapt combinatie text / nummers niet.

Status
Niet open voor verdere reacties.

JeroenMioch

Gebruiker
Lid geworden
1 dec 2007
Berichten
215
Hallo allemaal,

Er zit een behoorlijke bug in mijn applicatie.
Ik merkte dit vandaag pas doordat ik iets ging testen met mijn externe personeelsnummer.
Dit personeelsnummer heeft een letter in zich.

Voorbeeld : X150234

Ik gebruik voor het personeelsnummer altijd het format TEXT in de tabellen. Omdat ik weet dat die X nummers bestaan.
Omdat ik mijn externe nummer toegepast heb op een verld waar normaal altijd een 6 cijferig nummer komt te staan kwam ik de bug tegen dus.

Code:
If DLookup("Pnummer", "tblVergunningBuitenLijst", "Pnummer = '" & Forms!parkeerbeheer!Pnummer & "'") Then

Dat stukje krijg ik een error 13 type mismatch in.

Weet iemand waarom dit niet word geaccepteerd ?
Ik heb uiteraard al verschillende methodes geprobeerd om het anders te doen, maar het wil niet...

Groeten,

Jeroen
 
Je voorbeeld heeft 7 karakters; je hebt neem ik aan de veldlengte van je veld wel groter staan? Als Pnummer een tekstveld is, zou de DLookup gewoon moeten werken; een getal wordt als tekstwaarde gezocht, maar een tekst uiteraard ook. Vervang de Dlookup anders door een recordset, en kijk wat daar uit komt.
 
Ja Pnummer is een zes cijferig veld. Mijn voorbeeld klopte niet.

Ik begrijp er weinig van want ik gebruik die Dlookup vaker en dat werkt altijd.
Ook in een zoekveld in mijn formulier kan ik gewoon een X nummer invullen en dat leverd geen probleem op.
De enige incosistentie die ik kan ontdekken in de tabellen die ik Dlokkup is dat er één record tussen zit van iemand die geen personeelsnummer heeft, Maar dat kan geen probleem opleveren toch ?

Zou je een voorbeeld kunnen geven van een recordset dan want ik ben daar erg slecht in.

Thanks voor je input !
 
In dummycode:

Code:
strSQL = "SELECT DISTINCT Pnummer FROM tblVergunningBuitenLijst " _
    & "WHERE Pnummer = '" & Me.Pnummer & "'"
With CurrentDb.OpenRecordset(strSQL)
    If .RecordCount > 0 Then
        jouw code
    End If
End With
 
De enige incosistentie die ik kan ontdekken in de tabellen die ik Dlokkup is dat er één record tussen zit van iemand die geen personeelsnummer heeft, Maar dat kan geen probleem opleveren toch ?

Daar zit inderdaad de oorzaak van de runtime error 13 type mismatch.
Een Dlookup fiets namelijk een gehele tabel of query door.
Op het moment dat je gaat zoeken naar een waarde en in je tabel/query komt een record voor waarbij die waarde niet is ingevuld, dan valt de Dlookup omver.
Dlookup retourneert namelijk een variabele van het gegevenstype String, en dit gegevenstype mag geen NULL waarden ophalen.
Vandaar de error 13 melding.

Oplossing is inderdaad of een recordset gebruiken of je coderegel aanpassen, en wel als volgt:

Code:
If Not IsNull(DLookup("Pnummer", "tblVergunningBuitenLijst", "Pnummer = '" & Forms!parkeerbeheer!Pnummer & "'")) Then

Tardis
 
Hoi Tardis, bedankt voor je input.

Ik heb dit even gechekt uiteraard en een personeelsnummer ingevuld bij de meneer zonder nummer.
Vervolgens een nep record aangemaakt met een X nummer en ik krijg dezelfde error.
Sowiezo zou het een groot probleem zijn als NULL waarden niet worden geaccpteerd door de Dlookup want het pnummer veld is niet verplicht. (vergunninghouders zonder personeelspas en of sleutelkaart).

Ik ga even Michel zijn recordsetje proberen, hopelijk bied dat soelaas.
 
Het werkt uitstekend Michel.
Allen nu word het X nummer door een query waarmee ik personeelsnummers aanvul tot
Zes cijfers (voorloopnullen) vrranderd in 000000.
Dit heeft geen gevolg voor het .CSV bestand wat ik genereer
Maar wel voor het selectievakje op mn form wat aangeeft dat je tot een
Bepaald groep behoord (1e echelon medewerkers, vergunninghouders gemeentekaart, en kilometer reductie plan.
Ik zal zo even deze post editten met de code van de query die hiervoor zorgd.
Misschien kan je hier even naar kijken.

edit >>

Code:
UPDATE DISTINCTROW tblKRPdeelnemersTotaal SET tblKRPdeelnemersTotaal!Expr1 = Format(Val(tblKRPdeelnemersTotaal!Expr1),"000000");

Greetz : jeroen
 
Laatst bewerkt:
De recordset heeft natuurlijk weinig te maken met de voorloopnullen die je wel of niet gebruikt. De SQL zoekt alleen maar een record op, en vindt 'm (of niet). Als je de string een vaste lengte wilt geven met voorloopnullen, kun je het beter zo doen:
Code:
UPDATE DISTINCT tblKRPdeelnemersTotaal SET Expr1 = Right("0000000" & Val(Expr1),7);
 
Ik heb dit even gechekt uiteraard en een personeelsnummer ingevuld bij de meneer zonder nummer.
Vervolgens een nep record aangemaakt met een X nummer en ik krijg dezelfde error.

Dat is vreemd, de verklaring die ik gaf is waterdicht en de oplossing werkt bij mij prima.
Maar je hebt een prima alternatief dat werkt en daar gaat het tenslotte om.

Tardis
 
Nee dat weet ik maar het is een bijkomend probleem.

Ik heb zeg maar een lijst met personeelsnummers die er zo uit zien :

234
8300
980001
876010

etc

die moeten aangevuld worden tot zes cijfers met voorloop nullen zodat ze er zo uit zien :

000234
008300
980001
876010

Maar... Nu zitten die X nummers er ook tussen, dus om een voorbeeld te geven krijg je dan dit :

000234
008300
980001
876010
X15082

Echter na die query die ik opgaf is dit de output :

000234
008300
980001
876010
000000

Mijn X nummer word dus omgezet in zes nullen.
 
En dat is logisch, want in je update query zet je de waarde van [Expr1] om naar een getal. En een getal met tekst? Bestaat niet, en is dus null. En daar zet je dan een zooitje voorloopnullen voor.
Code:
UPDATE DISTINCT tblKRPdeelnemersTotaal SET Expr1 = Right("0000000" & Expr1,7);
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan