/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
CPRnr tjeck...
Fra : Thorbjørn Jørgensen


Dato : 22-09-02 10:37

Hej
Jeg har et tekstfelt hvor det er meningen at man skal skrive CPRnr ind, og
der skal så laves noget validering på om CPRnr er rigtigt og om det findes i
databasen... Den første ting jeg gerne vil gøre er at tjekke et stringen kun
indeholder 10 tal, og ikke bogstaver... Jeg troede at jeg havde en god
løsning med val(cprnr) også konveretere det til en string for at tjekke
længden at stringen, men så bliver alle CPRnr der starter med 0 for korte...
Er der nogle der har en god ide...

Mvh
Thorbjørn



 
 
Jens Vestergaard (22-09-2002)
Kommentar
Fra : Jens Vestergaard


Dato : 22-09-02 11:21

"Thorbjørn Jørgensen" <thorbjorn-jorgensen@person.dk> skrev i en meddelelse
news:amk2tn$hl2$1@sunsite.dk...
> Hej
> Jeg har et tekstfelt hvor det er meningen at man skal skrive CPRnr ind, og
> der skal så laves noget validering på om CPRnr er rigtigt og om det findes
i
> databasen... Den første ting jeg gerne vil gøre er at tjekke et stringen
kun
> indeholder 10 tal, og ikke bogstaver... Jeg troede at jeg havde en god
> løsning med val(cprnr) også konveretere det til en string for at tjekke
> længden at stringen, men så bliver alle CPRnr der starter med 0 for
korte...
> Er der nogle der har en god ide...

Hvis du ikke vil bruge en rigtig CPR-validering, så kig på IsNumeric() i
stedte for Val()...


--
mvh
Jens Vestergaard
www.railsoft.dk
--------
Indsæt v før snablen



Thorbjørn Jørgensen (22-09-2002)
Kommentar
Fra : Thorbjørn Jørgensen


Dato : 22-09-02 11:35

Hej igen...

>
> Hvis du ikke vil bruge en rigtig CPR-validering, så kig på IsNumeric() i
> stedte for Val()...
>
Der ligger en "rigtig" CPR-valiedering lige efter jeg har tjekket at det har
den rigtige længde...
Men det var lige præcis IsNumeric jeg skulle bruge...

Takker for de hurtige svar...

Mvh
Thorbjørn



preben nielsen (23-09-2002)
Kommentar
Fra : preben nielsen


Dato : 23-09-02 16:10


"Thorbjørn Jørgensen" <thorbjorn-jorgensen@person.dk> skrev i en
meddelelse news:amk6a8$2cg$1@sunsite.dk...
> Hej igen...
>
> >
> > Hvis du ikke vil bruge en rigtig CPR-validering, så kig på
IsNumeric() i
> > stedte for Val()...
> >
> Der ligger en "rigtig" CPR-valiedering lige efter jeg har
tjekket at det har
> den rigtige længde...
> Men det var lige præcis IsNumeric jeg skulle bruge...

Vær opmærksom på at IsNumeric() tillader andet end tal !

Undersøg selv nærmere....


--
/\ preben nielsen
\/\ prel@post.tele.dk



preben nielsen (22-09-2002)
Kommentar
Fra : preben nielsen


Dato : 22-09-02 11:20


"Thorbjørn Jørgensen" <thorbjorn-jorgensen@person.dk> skrev i en
meddelelse news:amk2tn$hl2$1@sunsite.dk...
> Hej
> Jeg har et tekstfelt hvor det er meningen at man skal skrive
CPRnr ind, og
> der skal så laves noget validering på om CPRnr er rigtigt og om
det findes i
> databasen... Den første ting jeg gerne vil gøre er at tjekke et
stringen kun
> indeholder 10 tal, og ikke bogstaver... Jeg troede at jeg havde
en god
> løsning med val(cprnr) også konveretere det til en string for at
tjekke
> længden at stringen, men så bliver alle CPRnr der starter med 0
for korte...
> Er der nogle der har en god ide...

Hvad med nedenstående kode (lavet direkte og ikke testet) ?

Funktionen løber alle tegn i din string igennem og checker om de
er tal. Returnerer falsk hvis ikke....

Function KunTal(str as string) as boolean
Dim i as Long
For i = 1 to Len(str)
If Instr("0123456789", Mid(str,i,1)) = 0 Then
KunTal = False
Exit function
End if
Next
KunTal = True
End Function


> Thorbjørn

--
/\ preben nielsen
\/\ prel@post.tele.dk



Michael Salomonsen (22-09-2002)
Kommentar
Fra : Michael Salomonsen


Dato : 22-09-02 16:10

"Thorbjørn Jørgensen" <thorbjorn-jorgensen@person.dk> wrote in message
news:amk2tn$hl2$1@sunsite.dk...
> Hej
> Jeg har et tekstfelt hvor det er meningen at man skal skrive CPRnr ind, og
> der skal så laves noget validering på om CPRnr er rigtigt og om det findes
i
> databasen... Den første ting jeg gerne vil gøre er at tjekke et stringen
kun
> indeholder 10 tal, og ikke bogstaver... Jeg troede at jeg havde en god
> løsning med val(cprnr) også konveretere det til en string for at tjekke
> længden at stringen, men så bliver alle CPRnr der starter med 0 for
korte...
> Er der nogle der har en god ide...

Brug KeyPress eventen på din textbox:

Private Sub CPRnr_KeyPress(KeyAscii As Integer)
If InStr("0123456789" & Chr(8), Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

Så kan man kun benytte tallene 0-9 og backspace i indtastningsfeltet, når
tallet så er tastet kan du lave et check v.hj.a. Len(CPRnr.text) = 10

-Michael



Ole Sørensen (22-09-2002)
Kommentar
Fra : Ole Sørensen


Dato : 22-09-02 16:16

On Sun, 22 Sep 2002 11:37:16 +0200, "Thorbjørn Jørgensen"
<thorbjorn-jorgensen@person.dk> wrote:

>Hej
>Jeg har et tekstfelt hvor det er meningen at man skal skrive CPRnr ind, og
>der skal så laves noget validering på om CPRnr er rigtigt og om det findes i
>databasen... Den første ting jeg gerne vil gøre er at tjekke et stringen kun
>indeholder 10 tal, og ikke bogstaver... Jeg troede at jeg havde en god
>løsning med val(cprnr) også konveretere det til en string for at tjekke
>længden at stringen, men så bliver alle CPRnr der starter med 0 for korte...
>Er der nogle der har en god ide...

Du kan også (har læst to andre forslag til løsninger) lave validering
ved input:

Private Sub txtInput_KeyPress(KeyAscii As Integer)
' Der kan kun indtastet tal i txtInput
Select Case KeyAscii
Case vbKeyBack         ' Slettetaste
Case 48 To 57         ' 0-9

Case vbKeyReturn      ' Enter / Return
KeyAscii = 0      ' Sletter det aktuelle tastetryk
SendKeys "{tab}"      ' Simulere et tryk på
tabuleringstasten
Case Else            ' Alle andre taster giver fejlmelding
KeyAscii = 0      ' Tegnet i tastatur bufferen slettes
MsgBox "Indtast kun tal!", vbCritical, "Fejl"
End Select
End Sub

Lidt lang måske, men det virker også
--
Med venlig hilsen
Ole Sørensen

Tomas Christiansen (22-09-2002)
Kommentar
Fra : Tomas Christiansen


Dato : 22-09-02 21:44

Thorbjørn Jørgensen skrev:
> Jeg har et tekstfelt hvor det er meningen at man skal skrive CPRnr
ind...
> ...Den første ting jeg gerne vil gøre er at tjekke et stringen kun
> indeholder 10 tal, og ikke bogstaver...

Jeg kan se at du har fået et masse gode forslag til hvordan man kan
begrænse hvad der kan tastes, og nogle mere eller mindre gode forslag
til at kontrollere indholdet af det indtastede.

Efter min mening er funktionen IsNumeric ubrugelig til dit formål (og
det er den iøvrigt også til langt de fleste andre formål), idet den
tillader *ALT* for meget.
Eksempler hvor IsNumeric returnerer true: "1.1" eller "1e2" eller
"&hf" eller "&O3" eller "-123" eller...

Det er vel egentlig også noget mærkeligt noget at betragte et
CPR-nummer som et tal. Det er vel ret 10 cifre fra 10-tals systemet,
som hver i sær har en numerisk betydning, men sammensat har cifrene
ingen betydning.

Den slags ville jeg nok teste med Like-operatoren. Den kan teste for
forekomster af diverse bogstaver, cifre og tegn.

Eksempel (hvis CPR-nummeret ligger i tekst-boksen txtCPRnr):

If txtCPR.Text Like "##########" Then
'Dette kan være et CPR-nummer
End If

Det er også let at teste på om brugeren skulle have indtastet en
bindestreg (kunne nogle måske finde på):

If txtCPR.Text Like "######-####" Then

Like kan bruges til mange ting, men understøtter desværre ikke
regulære udtryk (suk, Microsoft...)

-------
Tomas


Jens Vestergaard (22-09-2002)
Kommentar
Fra : Jens Vestergaard


Dato : 22-09-02 22:09

"Tomas Christiansen" <toc@blikroer.removethis.dk> skrev i en meddelelse
news:amla1d$1lql$1@news.cybercity.dk...

> Efter min mening er funktionen IsNumeric ubrugelig til dit formål (og
> det er den iøvrigt også til langt de fleste andre formål), idet den
> tillader *ALT* for meget.
> Eksempler hvor IsNumeric returnerer true: "1.1" eller "1e2" eller
> "&hf" eller "&O3" eller "-123" eller...

Min meninge var naturligvis, at IsNumeric() skal testes på hvert enkelt tegn
(undtagen bindestregen, som vi jo ved, hvor skal stå), hvorfor ovenstående
indvendinger (omend korrekte) ikke er relevante.

--
mvh
Jens Vestergaard
www.railsoft.dk
--------
Indsæt v før snablen




Thorbjørn Jørgensen (22-09-2002)
Kommentar
Fra : Thorbjørn Jørgensen


Dato : 22-09-02 22:27

Hej...
Ok, man lærer noget nyt hver dag, og når det har med vb at gøre lærer jeg
mange nye ting hver dag, men mon ikke det holder op på et eller andet
tidspunkt..
Jeg har prøvet at bruge Like og det virker rigtigt godt. Jeg får dog en
følgende fejlmelding
Additional information: Cast from string "##########" to type 'Long' is not
valid.
Hvis jeg prøver at gøre følgende.

ElseIf Cprnr Like Not "##########" Or Not "######-####" Then

Jeg har prøvet at bytte rundt på not og sætte paranteser ind osv, men har
ikke lige fundet kombinationen... Hvi jeg anvender dem hver for sig virker
det godt nok.
Lidt mere hjælp?
Mvh
Thorbjørn



"Tomas Christiansen" <toc@blikroer.removethis.dk> wrote in message
news:amla1d$1lql$1@news.cybercity.dk...
> Thorbjørn Jørgensen skrev:
> > Jeg har et tekstfelt hvor det er meningen at man skal skrive CPRnr
> ind...
> > ...Den første ting jeg gerne vil gøre er at tjekke et stringen kun
> > indeholder 10 tal, og ikke bogstaver...
>
> Jeg kan se at du har fået et masse gode forslag til hvordan man kan
> begrænse hvad der kan tastes, og nogle mere eller mindre gode forslag
> til at kontrollere indholdet af det indtastede.
>
> Efter min mening er funktionen IsNumeric ubrugelig til dit formål (og
> det er den iøvrigt også til langt de fleste andre formål), idet den
> tillader *ALT* for meget.
> Eksempler hvor IsNumeric returnerer true: "1.1" eller "1e2" eller
> "&hf" eller "&O3" eller "-123" eller...
>
> Det er vel egentlig også noget mærkeligt noget at betragte et
> CPR-nummer som et tal. Det er vel ret 10 cifre fra 10-tals systemet,
> som hver i sær har en numerisk betydning, men sammensat har cifrene
> ingen betydning.
>
> Den slags ville jeg nok teste med Like-operatoren. Den kan teste for
> forekomster af diverse bogstaver, cifre og tegn.
>
> Eksempel (hvis CPR-nummeret ligger i tekst-boksen txtCPRnr):
>
> If txtCPR.Text Like "##########" Then
> 'Dette kan være et CPR-nummer
> End If
>
> Det er også let at teste på om brugeren skulle have indtastet en
> bindestreg (kunne nogle måske finde på):
>
> If txtCPR.Text Like "######-####" Then
>
> Like kan bruges til mange ting, men understøtter desværre ikke
> regulære udtryk (suk, Microsoft...)
>
> -------
> Tomas
>



Tomas Christiansen (23-09-2002)
Kommentar
Fra : Tomas Christiansen


Dato : 23-09-02 12:57

Thorbjørn Jørgensen skrev:
> Additional information: Cast from string "##########" to type 'Long' is not
> valid.
> Hvis jeg prøver at gøre følgende.
>
> ElseIf Cprnr Like Not "##########" Or Not "######-####" Then

Din variabel Cprnr er vel forhåbentlig ikke af typen Long? Det vil være fatalt for dem som har fødselsdag efter den 21. i måneden!!!

Lad os dernæst se på din 'Else If':
1. Du forsøger to steder at få VB til at opfatte en streng ("##########" og "######-####") som en boolesk værdi, og benytter den
booleske operator Not på denne. Det giver ingen mening! "##########" er hverken sand eller falsk, og derfor giver Not "##########"
heller ingen mening.
2. Desuden lader du kun Cprnr indgå i på den ene side af din 'Or'. Du skal da teste op mod Cprnr begge steder!

Mon ikke dette ville være bedre - det kan skrives på _mange_ andre måder:

Else If Not(Cprnr Like "##########" Or Cprnr Like "######-####") Then

-------
Tomas


Thorbjørn Jørgensen (23-09-2002)
Kommentar
Fra : Thorbjørn Jørgensen


Dato : 23-09-02 16:13

Hej igen...
Det var da vist blevet lidt for sent...

> > ElseIf Cprnr Like Not "##########" Or Not "######-####" Then
>
> Din variabel Cprnr er vel forhåbentlig ikke af typen Long? Det vil være
fatalt for dem som har fødselsdag efter den 21. i måneden!!!
Nej, den skulle være defineret som string, det var også derfor jeg ikke helt
forsotd fejlmeldingen...

> Lad os dernæst se på din 'Else If':
> 1. Du forsøger to steder at få VB til at opfatte en streng ("##########"
og "######-####") som en boolesk værdi, og benytter den
> booleske operator Not på denne. Det giver ingen mening! "##########" er
hverken sand eller falsk, og derfor giver Not "##########"
> heller ingen mening.
> 2. Desuden lader du kun Cprnr indgå i på den ene side af din 'Or'. Du skal
da teste op mod Cprnr begge steder!
>
> Mon ikke dette ville være bedre - det kan skrives på _mange_ andre måder:
>
> Else If Not(Cprnr Like "##########" Or Cprnr Like "######-####") Then
Jeg prøvede også noget i den stil, men da jeg prøvede det fik jeg ikke noget
respons, men det var fordi cprnr blev sorteret fra i funktionen . Jeg har
lavet det på den måde nu at hvis man skriver CPR nummeret med en "-" blever
det konverteret til en uden og derefter evalueret....

Jeg takker for hjælpen...
Mvh
Thorbjørn



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408937
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste