Laden...

Datenbank Abfragen nach Datum

Erstellt von mpeter vor 8 Jahren Letzter Beitrag vor 8 Jahren 2.947 Views
M
mpeter Themenstarter:in
27 Beiträge seit 2015
vor 8 Jahren
Datenbank Abfragen nach Datum

verwendetes Datenbanksystem: Access 2010

Hallo an alle ich habe ein Problem wenn ich meine Access DB nach einem Datum abfragen möchte:

als 1. habe ich mit:

DateTime dt = DateTime.Today.AddDays(-1);

eine variable angelegt die mir immer das Datum von gestern liefert, die Ausgabe in einer Textbox liefert mich auch das korrekte Datum zurück.

als 2. habe ich eine commandText erstellt:

cmd.CommandText = ("SELECT gewicht.st_Datum, gewicht.ge_gewicht, gewicht.differen FROM gewicht WHERE (((gewicht.st_Datum)= '" + dt + "'))");

als 3. habe ich zur Überprüfung eine

MessageBox.Show(cmd.CommandText);

ertellt um zu sehen ob alle Daten korrekt angegeben sind. Es wird mir auch alles korrekt angezeigt.

auch eine in Access erstellte SQL Querrie bringt keinen erfolg:

SELECT gewicht.st_Datum, gewicht.ge_gewicht, gewicht.differenz
FROM gewicht
WHERE (((gewicht.st_Datum)=Date()-2));

es wird mir jedesmal folgende Meldung zurück geliefert:

Fehlermeldung:
Ein Ausnahmefehler des Typs "System.Data.OleDb.OleDbException" ist in System.Data.dll aufgetreten.
Zusätzliche Informationen: Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben.

Wo ist meine Fehler? Bitte um eure Hilfe

Michael

1.696 Beiträge seit 2006
vor 8 Jahren

Wenn du schon MS Access nützt dann schau doch in die Doku, dort wirst du

  • Now() // gibt dir das aktuelle Datum und Uhrzeit
  • Date () // gibt dir aktuelles Datum
  • DateAdd(interval, number, date) // addiert Werte zum date

finden, somit sollte

WHERE ... = DateAdd("d", -2, Date())

wahrscheinlich dein Wunschergebnis liefern.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

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

leider liefert er mir auch dann den Fehler:

Ein Ausnahmefehler des Typs "System.Data.OleDb.OleDbException" ist in System.Data.dll aufgetreten.
Zusätzliche Informationen: Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben.

ich habe es ja auch schon mit der original SQL Abfrage aus Access versucht die in Access einwandfrei durchläuft und das erforderliche Ergebnis bringt.

1.696 Beiträge seit 2006
vor 8 Jahren

Ein Ausnahmefehler des Typs "System.Data.OleDb.OleDbException" ist in System.Data.dll aufgetreten.
Zusätzliche Informationen: Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben.

Da steht was fehlt. Wie sieht denn dein Code aus? Bitte den Part von der Implementierung der Abfrage bis zum Absetzen an die DB posten.

BTW: Schaue dir diesen Artikel aml an [Artikelserie] SQL: Parameter von Befehlen

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

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

Inatialisieren:



OleDbConnection con = new OleDbConnection();
OleDbCommand cmd = new OleDbCommand();

Form Load:

con.ConnectionString =
                           "Provider=Microsoft.ACE.OLEDB.12.0;" +
                           "Data Source=H:\\datenbanken\\fitness.accdb";
cmd.Connection = con;

dann:


 public void zum()
        {
            
            con.Open();
            DateTime dt = DateTime.Today.AddDays(-1);
            cmd.CommandText = ("SELECT gewicht.st_Datum, gewicht.ge_gewicht, gewicht.differen FROM gewicht (((gewicht.st_Datum)=Date()-2));");
            
            MessageBox.Show(cmd.CommandText);

            {
                OleDbDataReader de= cmd.ExecuteReader();
                while (de.Read())
                {
                   
                    textBox3.Text = Convert.ToString(de["differenz"]);
                    textBox8.Text = Convert.ToString(de["ge_gewicht"]);
                    textBox9.Text = Convert.ToString(de["st_Datum"]);
                  

                }
                de.Close();

            }

aufgerufen wird alles mit:


private void button2_Click(object sender, EventArgs e)
        {
            zum();
        }

1.696 Beiträge seit 2006
vor 8 Jahren
  1. Bitte Code-Tag verwenden [Hinweis] Wie poste ich richtig? Punkt 6.

  2. Du hast mein Vorschlag gar nicht eingebaut!

  3. und warum so viele Klammer um die Bedingung in WHERE? Das stört beim Lesen der Abfrage.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

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

sorry hatte ich einfach vergessen mache ich beim nächsten mal

1.696 Beiträge seit 2006
vor 8 Jahren

Und wer hindert dich daran, dein Posting zu editieren und Code-Tags um den Code zu setzen?

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

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

habe ich gerade gemacht

5.657 Beiträge seit 2006
vor 8 Jahren
"SELECT gewicht.st_Datum, gewicht.ge_gewicht, gewicht.differen FROM gewicht (((gewicht.st_Datum)=Date()-2));  

Da fehlt ein "z" und ein "WHERE", von daher glaube ich nicht, daß die Abfrage "in Access einwandfrei durchläuft und das erforderliche Ergebnis bringt".

Das Forum ist nicht dazu da, deine Rechtschreibfehler zu überprüfen.

Christian

Weeks of programming can save you hours of planning

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

hier meine Original SQL Anweisung aus Access:


SELECT gewicht.ge_id, gewicht.st_id, gewicht.st_Datum, gewicht.ge_gewicht, gewicht.differenz
FROM gewicht
WHERE (((gewicht.st_Datum)=Date()-1));

die Liefert das selbe Ergbnis aks Fehler

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

ich habe nach langen Ausprobieren und Graue Haare bekommen endlich die Lösung gefunden.
Warum auch immer ich konnte in der SQL Abfrage mache was ich wolte in Access selber lief alles sauber duch nur nicht in C#.

Ich habe jetzt die Entsprechende Tabelle komplett aus Access gelöscht und neu angelegt mit dem Demodaten jetzt läuft die Abfrage:


public void zum()
        {

            con.Open();
            DateTime dt = DateTime.Today.AddDays(-1);
            cmd.CommandText = ("SELECT gewicht.ge_id, gewicht.st_id, gewicht.st_Datum, gewicht.ge_gewicht, gewicht.differenz FROM gewicht WHERE (((gewicht.st_Datum)=Date()-2))");

            MessageBox.Show(cmd.CommandText);

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

                    textBox3.Text = Convert.ToString(de["differenz"]);
                    textBox8.Text = Convert.ToString(de["ge_gewicht"]);
                    textBox9.Text = Convert.ToString(de["st_Datum"]);


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

            }

        }

einwandfrei durch und liefert die geforderten ergebnisse