Avatar billede hostgirl Nybegynder
19. maj 2005 - 14:15 Der er 18 kommentarer og
1 løsning

Fejl ved indtastning af årstal

Hej alle

Jeg har denne linje:

strYear = txtYear.Text 'Indholder årstal

If (IsNumeric(strYear) And strYear <> "" And Len(strYear) = 4 And strYear > 1900) Then
  strYear = strYear
Else
  strYear = "1999"
End If

Men hvis jeg nu indtaster * eller andre mærkelig symboler får jeg en error. Hvordan kan jeg tjek at alle årstal er 4 cifre og er tal.
Avatar billede nielle Nybegynder
19. maj 2005 - 14:34 #1
Dim StringMuligtÅrstal As String = "1990"
Dim Int32MuligtÅrstal As Int32
Dim KorrektÅrstalFormat As Boolean = True

Try
    Int32MuligtÅrstal = Int32.Parse(StringMuligtÅrstal)

    If Int32MuligtÅrstal < 1980 Or 2005 < Int32MuligtÅrstal Then  ' Du bestemmer selv grænserne
        KorrektÅrstalFormat = False
    End If
Catch ex As System.FormatException
    KorrektÅrstalFormat = False
End Try

If Not KorrektÅrstalFormat Then
    Console.WriteLine("Om igen!")
Else
    Console.WriteLine("Yes!!!")
End If
Avatar billede flashit Nybegynder
19. maj 2005 - 14:40 #2
Avatar billede hostgirl Nybegynder
19. maj 2005 - 14:42 #3
int32, hvad vil det sige... ved godt int er integer, men hvad gør det at det er 32 ?
Avatar billede hostgirl Nybegynder
19. maj 2005 - 14:53 #4
flashit, kig på min kode... Bruger: If (IsNumeric(strYear)
Avatar billede flashit Nybegynder
19. maj 2005 - 14:58 #5
Ups Sorry..
Avatar billede nielle Nybegynder
19. maj 2005 - 15:12 #6
Int32 er en af de indbyggede taltyper i .NET - det er bare en 32-bit integer. Udover den er der Int16 og Int64. Variablel-typen Integer er blot et alternativt navn for Int32.
Avatar billede hostgirl Nybegynder
19. maj 2005 - 15:32 #7
Jeg får nu fejl, fordi jeg har brug On Error. Jeg har brugt On Error omkring database forbindelsen, så hvis den ikke kan connect giver den besked uden at programmet fejler. Skal det også laves med Try?
Avatar billede nielle Nybegynder
19. maj 2005 - 15:39 #8
Try-Catch-Finally er jo en universiel mekanisme til at håndtere fejl på en graciøs møde, og din DB connect-fejl burde også kunne hånderes på den måde.
Avatar billede hostgirl Nybegynder
20. maj 2005 - 13:34 #9
Øhm, hvordan skal det så se ud. sådan her:

Try
            'On Error Resume Next
            'Open the database connection...
            objConnection.Open()
        Catch NoDataBaseConnectionErr As SystemException
            ' Fill the DataSet object with data...

        Finally
            objDataAdapter.Fill(objDataSet, "tbl_logjobdata")

            ' Close the database connection...
            objConnection.Close()

            MessageBox.Show("Fejl: Der kunne ikke oprettes forbindelse til Databasen." & ControlChars.CrLf & ControlChars.CrLf & "Kontakt systemadministratoren.", "Fejl meddelse!", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
Avatar billede nielle Nybegynder
20. maj 2005 - 13:45 #10
Try

    ' Her prøver du at udføre dit programflow som om at alt går godt.

    ''''' On Error Resume Next - ikke bruge mere

    ' Open the database connection...
    objConnection.Open()

    ' Hvis Open() fejler bliver eksekveringen straks sendt til Catch-delen.

    ' Fill the DataSet object with data...
    objDataAdapter.Fill(objDataSet, "tbl_logjobdata")

Catch NoDataBaseConnectionErr As SystemException

    ' Her havner du straks at der er noget som ikke gik godt.

    ' Jeg er i øvrigt ikke helt sikker på at det er en "SystemException".
    ' Det burde du selv kunne se hvsi du fremprovokere fejl-tilstanden.

    ' Det er altså her du placere din fejlhåndterende kode.

    MessageBox.Show("Fejl: Der kunne ikke oprettes forbindelse til Databasen." & ControlChars.CrLf & ControlChars.CrLf & "Kontakt systemadministratoren.", "Fejl meddelse!", MessageBoxButtons.OK, MessageBoxIcon.Error)

Finally

    ' Her placere du kode som *skal* udføres uandet om der var en fejl eller ej.
    ' Det er altså her du "rydder op".

    ' Close the database connection...
    objConnection.Close()
   
End Try
Avatar billede hostgirl Nybegynder
20. maj 2005 - 13:47 #11
Mange tak, du får point. Jeg sætter point lidt op for det ekstra svar. Tak for hjælpen :)
Avatar billede nielle Nybegynder
20. maj 2005 - 13:47 #12
Nu er vi imidlertid ved at bevæge os væk fra det oprindelige spørgsmål. Har du fået det løst? For ellers er der da også mindst to andre måder at gøre det på.
Avatar billede nielle Nybegynder
20. maj 2005 - 13:48 #13
Svar :^)
Avatar billede hostgirl Nybegynder
20. maj 2005 - 13:48 #14
smid lige et svar :)
Avatar billede nielle Nybegynder
20. maj 2005 - 14:01 #15
Yderlige versioner (1 af 2):

Dim StringMuligtÅrstal As String = "1990"
Dim Int32MuligtÅrstal As Int32
Dim KorrektÅrstalFormat As Boolean = True

If IsNumeric(StringMuligtÅrstal) Then
    Int32MuligtÅrstal = Int32.Parse(StringMuligtÅrstal)

    If (Int32MuligtÅrstal < 1000) Or (9999 < Int32MuligtÅrstal) Then
        KorrektÅrstalFormat = False
    End If
Else
    KorrektÅrstalFormat = False
End If

If Not KorrektÅrstalFormat Then
    Console.WriteLine("Om igen!")
Else
    Console.WriteLine("Yes!!!")
End If
Avatar billede nielle Nybegynder
20. maj 2005 - 14:02 #16
Yderlige versioner (2 af 2):

Kræver en Imports System.Text.RegularExpressions i toppen:

Dim Pattern = "^\d{4}$"
Dim RE As Regex = New Regex(Pattern)

Dim StringMuligtÅrstal As String = "1980"
Dim KorrektÅrstalFormat As Boolean

KorrektÅrstalFormat = RE.IsMatch(StringMuligtÅrstal)

If Not KorrektÅrstalFormat Then
    Console.WriteLine("Om igen!")
Else
    Console.WriteLine("Yes!!!")
End If
Avatar billede nielle Nybegynder
20. maj 2005 - 14:02 #17
Takker for points.
Avatar billede nielle Nybegynder
20. maj 2005 - 16:34 #18
Den sidste version skal nok lige justeres hvis man ikke ønsker at tillade '0' på den første plads:

Dim Pattern As String = "^[1-9]\d{3}$"
Avatar billede hostgirl Nybegynder
21. maj 2005 - 10:12 #19
Jeg takker mange gange. Mange forskellige måder ting kan laves på :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB