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?
Annonceindlæg fra Thales
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
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
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.
26. oktober 2005 - 13:18
#4
tror vi skal se noget kode...
26. oktober 2005 - 13:19
#5
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.
26. oktober 2005 - 13:22
#7
det er vel bare basal input validering der er tale om...
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
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.
26. oktober 2005 - 13:27
#10
spif2001 kan du give mig 1 eksempel jeg er ikke så god til programmering
26. oktober 2005 - 13:27
#11
Som spif siger: if ( !validateFields() ) // MessageBox else // DB update Hvor validateFields så er en funktion der validerer felterne.
26. oktober 2005 - 13:29
#12
prøv at vise koden til din button-Click metode.
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
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(); } }
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(); } }
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....
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...
26. oktober 2005 - 13:37
#18
Arr jeg troede sgu det var noget, der var svært. Hehe Smid et svar begge 2:)
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
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 ;-)
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(); }
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
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.