Laden...

[gelöst] mit if eine Abfrage von Ja/Nein Feld in einer Access Datenbank

Letzter Beitrag vor 9 Jahren 6 Posts 3.613 Views
[gelöst] mit if eine Abfrage von Ja/Nein Feld in einer Access Datenbank

Hallo an alle,

ich habe folgendes Problem, ich frage per Sql eine Access Tabelle nach eine Ja nein Feld ab. Ich hab insgesamt 4 Messageboxen eingebaut um die jeweiligen Resultate anzuzeigen.
Die Anzeigen der Messageboxen liefern auch das richtige Resultat zurück. Allerdings egal welchen zustand die Access Tabelle annimmt er nimmt diesen Wert nicht an.


 string connetionString = null;
            OleDbConnection connection;
            OleDbDataAdapter oledbAdapter = new OleDbDataAdapter();
            DataSet ds = new DataSet();
            int i = 0;
            connetionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=H:\\datenbanken\\fitness.accdb";
            connection = new OleDbConnection(connetionString);
            try
            {
                connection.Open();
                oledbAdapter.SelectCommand = new OleDbCommand("SELECT schlafen FROM einstellungen Where schlafen = true;", connection);
                oledbAdapter.Fill(ds);
                oledbAdapter.Dispose();
                connection.Close();

                

                if (ds.Tables[0].Rows.Count == 0)
                {    
                    MessageBox.Show(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                    MessageBox.Show("testen");
                    

                }
                if (ds.Tables[0].Rows.Count == 1)
                {
                    MessageBox.Show(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                    MessageBox.Show("kein Testen");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

Wenn der zustand = True ist läuft er immer in

 if (ds.Tables[0].Rows.Count == 1)

wenn der zustand False ist läuft er ebenfalls in

 if (ds.Tables[0].Rows.Count == 1)

rein.

Wo mache ich den Fehler?

besten Dank im voraus.

Ich bezweifle, dass er in beide Abfragen (==0 und ==1) läuft.

Bin mir aber auch nicht ganz klar, was genau nun der Thread-Titel mit der Frage zutun hat 🤔

Und geb Dir nochmal den Tipp und gut gemeinten Rat, egal wie groß das Programm ist, Datenzugriff, Logik und UI zu trennen.
[Artikel] Drei-Schichten-Architektur

Übrigens ist Access keine Datenbank, sondern ein Geschwür.
Access verdient den Namen Datenbank nicht. 🙂

ich habe jetzt anstelle der Messagebox 2 Textboxen erstellt die mir die Werte ausgeben.

aber egal welchen wert ich in Access einstelle er bringt mir das richtige resultat allerding springt er nie in die abfrage:



if (ds.Tables[0].Rows.Count == 0)
                {    
                    MessageBox.Show(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                    MessageBox.Show("testen");
                    textBox1.Text = ds.Tables[0].Rows[i].ItemArray[0].ToString();


                }

diese wird komplett ignoriert.

Ich habe zum Testen auch mal die SQL Abfrage so geändert:


oledbAdapter.SelectCommand = new OleDbCommand("SELECT schlafen FROM einstellungen;", connection);

wie schon geschrieben bekomme ich den richtigen Zustand immer angezeigt.

ich habe meine Abfrage mal so gemacht das ich die Zustände der DB in einer Textbox anzeigen lasse und diese dann per if abfrage auswerten:,


con.Open();

            cmd.CommandText = ("SELECT schlafen FROM einstellungen");

            MessageBox.Show(cmd.CommandText);

            {
                OleDbDataReader de = cmd.ExecuteReader();
                while (de.Read())
                {


                    textBox1.Text = Convert.ToString(de["schlafen"]);


                    if (textBox1.Text == "True")
                    {
                       
                        MessageBox.Show("testen");
                    }
                    if (textBox1.Text == "False")

                    {
                        MessageBox.Show("kein testen");

                    }


                }
                de.Close();
                con.Close();

            }

das klappt einwandfrei im Gegensatz zu meiner eigentlichen Abfrage.

Wo ist nur mein Fehler?

ich habe es jetzt selber hinbekommen, ich frage jetzt den Zustand direkt in der if abfrage ab und nicht mehr über den SQL String.



string connetionString = null;
            OleDbConnection connection;
            OleDbDataAdapter oledbAdapter = new OleDbDataAdapter();
            DataSet ds = new DataSet();
            int i = 0;
            connetionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=H:\\datenbanken\\fitness.accdb";
            connection = new OleDbConnection(connetionString);
            try
            {
                connection.Open();
                oledbAdapter.SelectCommand = new OleDbCommand("SELECT schlafen FROM einstellungen ;", connection);
                oledbAdapter.Fill(ds);
                oledbAdapter.Dispose();
                connection.Close();

                

                if (ds.Tables[0].Rows[0]["schlafen"].ToString() == "True")
                {    
                    MessageBox.Show(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                    MessageBox.Show("testen");
                    textBox1.Text = ds.Tables[0].Rows[0]["schlafen"].ToString();

                }
                if (ds.Tables[0].Rows[0]["schlafen"].ToString() == "False")
                {
                    MessageBox.Show(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                    MessageBox.Show("kein Testen");
                    textBox2.Text = ds.Tables[0].Rows[i].ItemArray[0].ToString();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }

mit besten Grüßen

Hallo

Dein Fehler liegt schon in der Abfrage (Where schlafen = "true"). Sie Dir mal den Artikel über SQL-Parameter an.

Thomas