Einträge vergleichen

dumbaz28

Mitglied
Hallo!

Ich habe eine Datenbank, in die ich Kundendaten einschreibe. Jetzt soll geprüft werden, ob der Kunde schon vorhanden ist. Mit dem ersten Eintrag klappts, aber sobald ich nach den zweiten Eintrag versuche zu wiederholen, schreibt es ihn einfach rein ):

Code:
        private void btnAnlegen_Click_1(object sender, EventArgs e)
        {
            datenbank datenbank = new datenbank();

            string vorname = txtVorname.Text;
            string nachname = txtNachname.Text;
            string titel = txtTitel.Text;

            string wVorname = datenbank.auslesen("kunden", "Vorname");
            string[] aVorname = wVorname.Split(',');        //Array 

            int anzahl = aVorname.Length;

            bool kontrolle = false;

            if (vorname != "" && nachname != "" && anrede != "")
            {
                for (int i = 0; i <= anzahl - 1; i++)
                {
                    if (aVorname[i] == vorname)
                    {
                        kontrolle = false;
                        MessageBox.Show("Kunde vorhanden");
                        break;
                    }
                    if (aVorname[i] != vorname)
                    {
                        MessageBox.Show("Kunde: " + aVorname[i] + " " + vorname);   //zur Kontrolle, die Namen werden richtig gefunden!!
                        kontrolle = true;
                    }
                }

                if (kontrolle == true)
                {
                        try
                        {
                            datenbank.füllen("kunden", id, vorname, nachname, titel);	//Daten anhängen
                            MessageBox.Show("Kunde wurde erfolgreich angelegt!");
                        }
                        catch
                        {
                            MessageBox.Show("Anlegen des Kunden fehlgeschlagen");
                        }

                }
            }
            else
            {
                MessageBox.Show("Alle Felder mit einem * müssen gefüllt sein");
            }

        }


Ich verzweifel langsam. An der for-schleife muss irgendwas falsch sein, mit dem ersten Eintrag klappts, ab dem zweiten nicht mehr. Es zeigt mir die Namen an, erkennt sie aber nicht als gleich ):

(Ich hoffe ich habe alle unnötigen Klammern rausgelöscht, unwichtige abfragen hab ich der Übersicht halber rausgelöscht)

Vielen Dank :)
 
Hallo,

du legst ja bei jedem Button_Click ein neues (leeres) Objekt "Datenbank" an.
Somit vergleicht er immer mit einer leeren Datenbank.
Wäre die Frage genau im Konstruktor bei "new Datenbank()" passiert.

Könnte es daran liegen?


Edit:

probiers mal so:

C++:
bool gefunden = false;

if (vorname != "" && nachname != "" && anrede != "")
{
  for (int i = 0; i <= anzahl - 1; i++)
    {
       if (aVorname[i] == vorname)
       {
           gefunden = true;
           MessageBox.Show("Kunde vorhanden");
           break;
        }
     }

   if (gefunden == false)
   { // dann einfügen
    .....
 
Zuletzt bearbeitet:
Ne an dem liegts nicht, "Datenbank" wird instanziert, der Zugriff auf die Datenbank (und anlegen etc) ist in einer extra Klasse.

Sobald ich auf anlegen klicke (und die Einträge stimmen) hängt es alles problemlos an.

Wenn der Vorname gleich ist, sollte die Meldung "vorhanden" kommen. Kommt aber nur beim ersten Eintrag. Nehme ich den zweiten Vornamen aus der Datenbank, zeigt es mir in einer Messagebox den Vornamen aus der Datenbank (aVorname) und den Vorname (txtVorname --> Eingabe) an. Und da stimmen ja die Einträge, es erkennt sie nur nicht mehr als gleich. d.h. es überspringt die if-abfrage, bei der eigentlich "==" ist ):
 
Sehr seltsam....
Sind evtl. noch "nicht druckbare" Sonderzeichen( \n etc.) in den strings drin? damit würde der vergleich schief gehen...
Dafür kannst du mal vorname.Trim(); verwenden...

Oder dann gänge noch die Hauklotzmethode... aber nicht zu empfehlen...
C++:
if (vorname != "" && nachname != "" && anrede != "")
{
  for (int i = 0; i <= anzahl - 1; i++)
  {
     if (aVorname[i] == vorname)
     {
         MessageBox.Show("Kunde vorhanden");
         MessageBox.Show("Anlegen des Kunden fehlgeschlagen");
         return; // diesmal gehen wir direkt aus der Funktion raus
      }
   }

    // dann einfügen
    .....

Eigentlich müsste dir der Debugger ja weiterhelfen,
Breakpoint setzen und mal Schritt für Schritt durchgehen.
 
juhuuuuu :D

du hast mich mit trim auf eine idee gebracht. Ich hab alles nochmal in einer Tabelle auslesen lassen und gesehen, dass VOR dem namen ein Leerzeichen steht, und wenn man dass mit eintragen will, erkennt es den Eintrag :D

Jetzt muss ich nur mehr rausfinden, warum da ein Leerzeichen steht, aber dass sollte ein kleineres Problem sein, hoffe ich mal



ok zu früh gefreut... ich hab die ganze tabelle geleert und die einträge von neuem gefüllt, es hängt aus unerklärlichen Gründen immer ein Leerzeichen in die neue Zeile, schon im vorhinein. In meiner Tabelle wird immer eine Leerzeile angezeigt unter den Einträgen, und in der ist das Leerzeichen auch schon drin. ):
 
Zuletzt bearbeitet:
Gute Frage, ich hab keine Ahnung wo das Leerzeichen herkommt. Ich zeig alles unter dem Formular in einem DataGridView an, dort zeigt es mir schon eine leere Zeile, in der ein Leerzeichen ist, und an das hängts vermutlich an. Aber keine Ahnung an welcher Stelle. Das hier ist der gesamte Code, bei dem ich den Fehler vermute.

Also der Code zum anlegen in die Datenbank ist der von oben (in der Datenbank wird die leere Zeile übrigens nicht angezeigt, sprich da steht sie wohl nicht drin!!). Das ist der Code mit dem ich in die Datenbank eintrage (in datenbank.cs)

Code:
        public void füllen(string tabelle, string id, string vorname, string nachname, string titel)
        {
            MySqlConnection connection = new MySqlConnection(myConnectionString);
            string abfrage = "INSERT INTO " + tabelle + "(KundenNr, Vorname, Nachname, Titel) " +
                "VALUES ('" + id + "','" + vorname + "','" + nachname + "','" + titel +  "')";

            MySqlCommand command = new MySqlCommand(abfrage);
            command.Connection = connection;
            connection.Open();
            command.ExecuteNonQuery();
            command.Connection.Close();
        }

Und hier die Codes, die mit dem DataGridView zusammenhängen:
Code:
        private void btnSuchen_Click(object sender, EventArgs e)
        {
            datenbank datenbank = new datenbank();

            datenbank.suchen("Kunden", "Vorname", "Vorname", txtVorname.Text, "Nachname", txtNachname.Text);

            string wKundenNr = datenbank.suchen("kunden", "KundenNr", "Vorname", txtVorname.Text, "Nachname", txtNachname.Text);
            string wTitel = datenbank.suchen("kunden", "Titel", "Vorname", txtVorname.Text, "Nachname", txtNachname.Text);
            string wAnrede = datenbank.suchen("kunden", "Anrede", "Vorname", txtVorname.Text, "Nachname", txtNachname.Text);
            string wVorname = datenbank.suchen("kunden", "Vorname", "Vorname", txtVorname.Text, "Nachname", txtNachname.Text);      //Wert vom Auslesen in EINEM string
            string wNachname = datenbank.suchen("kunden", "Nachname", "Vorname", txtVorname.Text, "Nachname", txtNachname.Text);

            string[] aKundenNr = wKundenNr.Split(',');
            string[] aTitel = wTitel.Split(',');
            string[] aAnrede = wAnrede.Split(',');
            string[] aVorname = wVorname.Split(',');        //Array 
            string[] aNachname = wNachname.Split(',');

            int anzahl = aVorname.Length;

            DataTable dt = new DataTable("Daten");
            dt.Columns.Add(new DataColumn("KundenNr"));
            dt.Columns.Add(new DataColumn("Titel"));
            dt.Columns.Add(new DataColumn("Anrede"));
            dt.Columns.Add(new DataColumn("Vorname"));
            dt.Columns.Add(new DataColumn("Nachname"));

            //-1 --> Leerzeile wird angezeigt
            for (int i = 0; i <= anzahl - 2; i++)
            {
                AddNewRow(dt, aKundenNr[i], aTitel[i], aAnrede[i], aVorname[i], aNachname[i]);
            }
            dgv.DataSource = dt;
}

        private void AddNewRow(DataTable dt, string kundenNr, string titel, string anrede, string vorname, string nachname)
        {
            DataRow dr = dt.NewRow();
            dr[0] = kundenNr;
            dr[1] = titel;
            dr[2] = anrede;
            dr[3] = vorname;
            dr[4] = nachname;
            dt.Rows.Add(dr);
        }



Die Datenbank umfasst mehr Spalten, aber dass wär nur unübersichtlich.

Vielleicht findest du ja den Fehler. Im Grid wird eine Leerzeile erzeugt/angezeigt, in der das Leerzeichen ist.


Edit:

FEHLER GEFUNDEN
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück