Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[gelöst] mit if eine Abfrage von Ja/Nein Feld in einer Access Datenbank
mpeter
myCSharp.de - Member



Dabei seit:
Beiträge: 27

Themenstarter:

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

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15967

beantworten | zitieren | melden

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. :-)
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
mpeter
myCSharp.de - Member



Dabei seit:
Beiträge: 27

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
mpeter
myCSharp.de - Member



Dabei seit:
Beiträge: 27

Themenstarter:

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
mpeter
myCSharp.de - Member



Dabei seit:
Beiträge: 27

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
thomas.at
myCSharp.de - Member



Dabei seit:
Beiträge: 102
Herkunft: Österreich / Wien

beantworten | zitieren | melden

Hallo

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

Thomas
private Nachricht | Beiträge des Benutzers