Laden...

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

Erstellt von mpeter vor 8 Jahren Letzter Beitrag vor 8 Jahren 3.352 Views
M
mpeter Themenstarter:in
27 Beiträge seit 2015
vor 8 Jahren
[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.

16.806 Beiträge seit 2008
vor 8 Jahren

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. 🙂

M
mpeter Themenstarter:in
27 Beiträge seit 2015
vor 8 Jahren

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.

M
mpeter Themenstarter:in
27 Beiträge seit 2015
vor 8 Jahren

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?

M
mpeter Themenstarter:in
27 Beiträge seit 2015
vor 8 Jahren

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

T
111 Beiträge seit 2005
vor 8 Jahren

Hallo

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

Thomas