Avatar billede alex_sleiborg Nybegynder
26. oktober 2005 - 13:00 Der er 21 kommentarer og
2 løsninger

Fejl Validering

Jeg er ved og lave et lille program, hvor man skal indtaste nogle bruger oplysninger. Jeg vil gerne lave sådan en fejl validering, altså hvis man f.eks. ikke indtaster noget i sit input felt, så kommer der en msgbox. Jeg kan sagtens få den til og komme med en msgbox, hvis man ikke indtaster noget navn. Men problemet er den forsætter med og eksekvere koden. Hvordan får jeg den til og stoppe, så den ikke lukker hele formen?
Avatar billede spif2001 Nybegynder
26. oktober 2005 - 13:04 #1
DialogResult result = MessageBox.Show("Vil du det?",MessageBoxButtons.YesNo,MessageBoxIcon.Exclamation);                if(result != DialogResult.No)
  //gør noget
else
  //gør noget andet
Avatar billede alex_sleiborg Nybegynder
26. oktober 2005 - 13:09 #2
Den skal jo skrive "Indtast venligst et gyldigt bruger navn"
og så skal man trykke på ok, og få mulighed for og indtaste et nyt brugernavn. I stedet for den bare forsætter med at køre koden
Avatar billede driis Nybegynder
26. oktober 2005 - 13:14 #3
Det kommer jo så an på hvordan du har arrangeret din kode. Du skal jo ikke have standset koden, du skal springe ud af din eventhandler, så brugeren får en chance for at rette fejlen.
Avatar billede spif2001 Nybegynder
26. oktober 2005 - 13:18 #4
tror vi skal se noget kode...
Avatar billede ladyhawke Novice
26. oktober 2005 - 13:19 #5
Avatar billede alex_sleiborg Nybegynder
26. oktober 2005 - 13:20 #6
Jeg har nogle tekst felter hvor en bruger skal have indtastet nogle data. Bla Navn, adr, by. Og så når der bliver trykket på knappen bliver det sendt til en MySQL db. Men hvis nu at der ikke står noget i felterne. Så skal den komme med en fejl meddelse og ikke sende det til databasen.
Avatar billede ladyhawke Novice
26. oktober 2005 - 13:22 #7
det er vel bare basal input validering der er tale om...
Avatar billede alex_sleiborg Nybegynder
26. oktober 2005 - 13:22 #8
MySql.Data.MySqlClient.MySqlConnection Connect;
            MySql.Data.MySqlClient.MySqlCommand Command;

            Connect            = new MySql.Data.MySqlClient.MySqlConnection();
            Command            = new MySql.Data.MySqlClient.MySqlCommand();

            Connect.ConnectionString = MyConnection;
           
           
            Connect.Open();//Åbner forbindelse til databasen
            Command.Connection = Connect;

            Command.CommandText = "INSERT INTO bruger" +
                        "(First_Name, Last_Name, Adresse, Postnr, City, Birth, Stilling) VALUES" +
                        "(?fornavn, ?efternavn, ?adresse, ?postnr, ?by, ?fødselsdato, ?stilling)";
            Command.Prepare();

            Command.Parameters.Add("?fornavn", "" + this.txtBox_Fornavn.Text + "");
            Command.Parameters.Add("?efternavn", "" + this.txtBox_Efternavn.Text + "");
            Command.Parameters.Add("?adresse", "" + this.txtBox_Adresse.Text + "");
            Command.Parameters.Add("?postnr", "" + this.txtBox_Postnr.Text + "");
            Command.Parameters.Add("?by", "" + this.txtBox_By.Text + "");
            Command.Parameters.Add("?fødselsdato", "" + this.txtBox_Fødselsdag.Text + "");
            Command.Parameters.Add("?stilling", "" + this.txtBox_Stilling.Text + "");

            Command.ExecuteNonQuery();//Sender nye bruger data til databasen
            Connect.Close();//Lukker forbindelsen til databasen

            Close();

Her er koden. Ideen er at inden der bliver sendt noget til databasen, så skal programmet validere at de oplysninger der bliver sendt er korrekte
Avatar billede spif2001 Nybegynder
26. oktober 2005 - 13:22 #9
Så skal eventhandleren jo bare check textfelterne og hvis én af dem ikke opfører sig ordentligt, lade være med at kalde db updateren, men i stedet give en MessageBox.
Avatar billede alex_sleiborg Nybegynder
26. oktober 2005 - 13:27 #10
spif2001 kan du give mig 1 eksempel jeg er ikke så god til programmering
Avatar billede driis Nybegynder
26. oktober 2005 - 13:27 #11
Som spif siger:

if ( !validateFields() )
  // MessageBox
else
  // DB update

Hvor validateFields så er en funktion der validerer felterne.
Avatar billede spif2001 Nybegynder
26. oktober 2005 - 13:29 #12
prøv at vise koden til din button-Click metode.
Avatar billede alex_sleiborg Nybegynder
26. oktober 2005 - 13:32 #13
private void btn_OpretBruger_Click(object sender, System.EventArgs e)
        {
            if(this.txtBox_Fornavn != null)
                {
                    MessageBox.Show("Du skal skrive et fornavn");
                }
               
            //Laver Forbindelse til databasen
            MySql.Data.MySqlClient.MySqlConnection Connect;
            MySql.Data.MySqlClient.MySqlCommand Command;

            Connect            = new MySql.Data.MySqlClient.MySqlConnection();
            Command            = new MySql.Data.MySqlClient.MySqlCommand();

            Connect.ConnectionString = MyConnection;
           
           
            Connect.Open();//Åbner forbindelse til databasen
            Command.Connection = Connect;

            Command.CommandText = "INSERT INTO bruger" +
                        "(First_Name, Last_Name, Adresse, Postnr, City, Birth, Stilling) VALUES" +
                        "(?fornavn, ?efternavn, ?adresse, ?postnr, ?by, ?fødselsdato, ?stilling)";
            Command.Prepare();

            Command.Parameters.Add("?fornavn", "" + this.txtBox_Fornavn.Text + "");
            Command.Parameters.Add("?efternavn", "" + this.txtBox_Efternavn.Text + "");
            Command.Parameters.Add("?adresse", "" + this.txtBox_Adresse.Text + "");
            Command.Parameters.Add("?postnr", "" + this.txtBox_Postnr.Text + "");
            Command.Parameters.Add("?by", "" + this.txtBox_By.Text + "");
            Command.Parameters.Add("?fødselsdato", "" + this.txtBox_Fødselsdag.Text + "");
            Command.Parameters.Add("?stilling", "" + this.txtBox_Stilling.Text + "");

            Command.ExecuteNonQuery();//Sender nye bruger data til databasen
            Connect.Close();//Lukker forbindelsen til databasen

            Close();
        }
Her er den med meget lidt validering. Men jeg kan sagtens selv lave valideringen
Avatar billede spif2001 Nybegynder
26. oktober 2005 - 13:34 #14
private void btn_OpretBruger_Click(object sender, System.EventArgs e)
        {
            if(this.txtBox_Fornavn.Text != "")
                {
                    MessageBox.Show("Du skal skrive et fornavn");
                }
else
{
             
            //Laver Forbindelse til databasen
            MySql.Data.MySqlClient.MySqlConnection Connect;
            MySql.Data.MySqlClient.MySqlCommand Command;

            Connect            = new MySql.Data.MySqlClient.MySqlConnection();
            Command            = new MySql.Data.MySqlClient.MySqlCommand();

            Connect.ConnectionString = MyConnection;
         
         
            Connect.Open();//Åbner forbindelse til databasen
            Command.Connection = Connect;

            Command.CommandText = "INSERT INTO bruger" +
                        "(First_Name, Last_Name, Adresse, Postnr, City, Birth, Stilling) VALUES" +
                        "(?fornavn, ?efternavn, ?adresse, ?postnr, ?by, ?fødselsdato, ?stilling)";
            Command.Prepare();

            Command.Parameters.Add("?fornavn", "" + this.txtBox_Fornavn.Text + "");
            Command.Parameters.Add("?efternavn", "" + this.txtBox_Efternavn.Text + "");
            Command.Parameters.Add("?adresse", "" + this.txtBox_Adresse.Text + "");
            Command.Parameters.Add("?postnr", "" + this.txtBox_Postnr.Text + "");
            Command.Parameters.Add("?by", "" + this.txtBox_By.Text + "");
            Command.Parameters.Add("?fødselsdato", "" + this.txtBox_Fødselsdag.Text + "");
            Command.Parameters.Add("?stilling", "" + this.txtBox_Stilling.Text + "");

            Command.ExecuteNonQuery();//Sender nye bruger data til databasen
            Connect.Close();//Lukker forbindelsen til databasen

            Close();
}
        }
Avatar billede driis Nybegynder
26. oktober 2005 - 13:34 #15
if(this.txtBox_Fornavn != null)
                {
                  MessageBox.Show("Du skal skrive et fornavn");

                }
else
{

             
            //Laver Forbindelse til databasen
            MySql.Data.MySqlClient.MySqlConnection Connect;
            MySql.Data.MySqlClient.MySqlCommand Command;

            Connect            = new MySql.Data.MySqlClient.MySqlConnection();
            Command            = new MySql.Data.MySqlClient.MySqlCommand();

            Connect.ConnectionString = MyConnection;
         
         
            Connect.Open();//Åbner forbindelse til databasen
            Command.Connection = Connect;

            Command.CommandText = "INSERT INTO bruger" +
                        "(First_Name, Last_Name, Adresse, Postnr, City, Birth, Stilling) VALUES" +
                        "(?fornavn, ?efternavn, ?adresse, ?postnr, ?by, ?fødselsdato, ?stilling)";
            Command.Prepare();

            Command.Parameters.Add("?fornavn", "" + this.txtBox_Fornavn.Text + "");
            Command.Parameters.Add("?efternavn", "" + this.txtBox_Efternavn.Text + "");
            Command.Parameters.Add("?adresse", "" + this.txtBox_Adresse.Text + "");
            Command.Parameters.Add("?postnr", "" + this.txtBox_Postnr.Text + "");
            Command.Parameters.Add("?by", "" + this.txtBox_By.Text + "");
            Command.Parameters.Add("?fødselsdato", "" + this.txtBox_Fødselsdag.Text + "");
            Command.Parameters.Add("?stilling", "" + this.txtBox_Stilling.Text + "");

            Command.ExecuteNonQuery();//Sender nye bruger data til databasen
            Connect.Close();//Lukker forbindelsen til databasen

            Close();
        }
}
Avatar billede spif2001 Nybegynder
26. oktober 2005 - 13:35 #16
det ville være smart at dele validering og database ud på 2 metoder.

nu kan du lave en masse "else if" efter den første if....
Avatar billede ladyhawke Novice
26. oktober 2005 - 13:36 #17
if (validation == true)
{
  execute DB handling

}
else
{
  warn user + provide error information
}

Hvor execute DB handling er én metode som indeholder det kode du sendte først...
Avatar billede alex_sleiborg Nybegynder
26. oktober 2005 - 13:37 #18
Arr jeg troede sgu det var noget, der var svært. Hehe

Smid et svar begge 2:)
Avatar billede ladyhawke Novice
26. oktober 2005 - 13:38 #19
beklager mit forslag er sådan set givet før... men dit problem er bare at du ikke benytter if sætningen særlig praktisk og for din egen skyld skulle du pakke database koden ind i en metode for sig selv, som KUN kaldes når du har sikret dig et formen er i orden
Avatar billede driis Nybegynder
26. oktober 2005 - 13:39 #20
Jeg skal ingen points have, giv dem til spif, han har trods alt svaret rigtigt på spørgsmålet siden første kommentar ;-)
Avatar billede spif2001 Nybegynder
26. oktober 2005 - 13:40 #21
men brug to metoder a la:

private void btn_OpretBruger_Click(object sender, System.EventArgs e)
{
    if(this.validate())
    {           
        this.updateDB();
    }
}

private bool validate()
{
    if(this.txtBox_Fornavn.Text != "")
    {
        MessageBox.Show("Du skal skrive et fornavn");
        return false;
    }
    else if(this.txtBox_Efternavn.Text != "")
    {
        MessageBox.Show("Du skal skrive et efternavn");
        return false;
    }
    else
    {
        return true;
    }
}

private void updateDB()
{
    //Laver Forbindelse til databasen
    MySql.Data.MySqlClient.MySqlConnection Connect;
    MySql.Data.MySqlClient.MySqlCommand Command;

    Connect            = new MySql.Data.MySqlClient.MySqlConnection();
    Command            = new MySql.Data.MySqlClient.MySqlCommand();

    Connect.ConnectionString = MyConnection;
   
   
    Connect.Open();//Åbner forbindelse til databasen
    Command.Connection = Connect;

    Command.CommandText = "INSERT INTO bruger" +
        "(First_Name, Last_Name, Adresse, Postnr, City, Birth, Stilling) VALUES" +
        "(?fornavn, ?efternavn, ?adresse, ?postnr, ?by, ?fødselsdato, ?stilling)";
    Command.Prepare();

    Command.Parameters.Add("?fornavn", "" + this.txtBox_Fornavn.Text + "");
    Command.Parameters.Add("?efternavn", "" + this.txtBox_Efternavn.Text + "");
    Command.Parameters.Add("?adresse", "" + this.txtBox_Adresse.Text + "");
    Command.Parameters.Add("?postnr", "" + this.txtBox_Postnr.Text + "");
    Command.Parameters.Add("?by", "" + this.txtBox_By.Text + "");
    Command.Parameters.Add("?fødselsdato", "" + this.txtBox_Fødselsdag.Text + "");
    Command.Parameters.Add("?stilling", "" + this.txtBox_Stilling.Text + "");

    Command.ExecuteNonQuery();//Sender nye bruger data til databasen
    Connect.Close();//Lukker forbindelsen til databasen

    Close();
}
Avatar billede alex_sleiborg Nybegynder
26. oktober 2005 - 13:40 #22
Ladyhawke smid du også bare et svar. Havde nu også tænkt mig og smide det i en metode for sig selv
Avatar billede ladyhawke Novice
26. oktober 2005 - 13:42 #23
Ok, god fornøjelse med projektet... Overvej evt at benytte ErrorProviders... Der var et eksempel i det link jeg sendte, det er nemmere at styre fejlhåndteringen konsistent på den måde
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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