Announcement

Collapse
No announcement yet.

Nach Monat auswählen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Nach Monat auswählen

    Hallo, mit der ersten Zeile erhalte ich alle Datensätze, die dem Monat 11 entsprechen. Nun möchte ich aber das ganze z.B. in einer ComboBox auswählen. Ich komme aber mit der Syntax nicht klar. Siehe unten. Kann mir jemand helfen. Vielen Dank. Gruss ph.

    Datamodule2.Query2.SQL.Add ('WHERE EXTRACT(MONTH FROM GebDat) = "11"'); //funktioniert

    Datamodule2.Query2.SQL.Add

    ('WHERE EXTRACT(MONTH FROM GebDat) LIKE = "peter"');

    Datamodule2.Query2.ParamByName('peter').AsDate :=

    StrToDate(ComboBox1.Text); //irgendwas stimmt nicht

  • #2
    Hallo Peter,

    <pre>
    Datamodule2.Query2.SQL.Add

    ('WHERE EXTRACT(MONTH FROM GebDat) LIKE = eter');
    Datamodule2.Query2.ParamByName('peter').AsDate := StrToDate(ComboBox1.Text);

    </pre>

    sollte funktionieren.

    Tschüß

    Torste

    Comment


    • #3
      Hallo Peter,

      so sollte es funktionieren:
      <pre>
      begin
      ...
      Datamodule2.Query2.SQL.Add('WHERE EXTRACT(MONTH FROM GebDat) LIKE = eter');
      Datamodule2.Query2.ParamByName('peter').AsInteger := strtoint(ComboBox1.Text);
      ...
      end;
      </pre>

      die Funktion strtoint kann natürlich nur verwendet werden, wenn der jeweilige Monat als nummerischer Wert vorliegt (also '11' statt 'November', ansonsten müßte es halt noch in einen nummerischen Wert umgewandelt werden).

      Tschüß

      Torste

      Comment


      • #4
        Hallo, so funktioniert es leider auch nicht. Hier einmal die gesamte Procedure:

        Datamodule2.Query2.SQL.Clear;

        Datamodule2.Query2.SQL.Add

        ('SELECT Vorname, Nachname, EXTRACT(DAY FROM GebDat) AS Tag,');

        Datamodule2.Query2.SQL.Add

        ('EXTRACT(MONTH FROM GebDat) AS Monat,');

        Datamodule2.Query2.SQL.Add

        ('EXTRACT(YEAR FROM GebDat) AS Jahr');

        Datamodule2.Query2.SQL.Add

        ('FROM Adressen');

        //Datamodule2.Query2.SQL.Add

        //('WHERE EXTRACT(MONTH FROM GebDat) = "11"'); das funktioniert

        Datamodule2.Query2.SQL.Add

        ('WHERE EXTRACT(MONTH FROM GebDat) LIKE = eter');

        Datamodule2.Query2.ParamByName('peter').AsInteger: =
        Strtoint(ComboBox1.Text);

        Datamodule2.Query2.Open;

        Die Einträge in der ComboBox lauten 1 2 3 bis 12. Danke

        Comment


        • #5
          Hallo Peter,

          mit Interbase funktioniert das so. Ich habe es gerade noch einmal mit Paradox probiert, da hat es so erst einmal nicht funktioniert. Nachdem ich dem Parameter den Typ ftWord zugewiesen habe (im Objektinspektor) hat es dann funktioniert.

          Tschüß

          Torste

          Comment


          • #6
            Hallo, also ich kann machen was ich will ich bekomme das im Moment so nicht hin. Wo im Objekt Inspektor? Mit Paradox Danke Gruss p

            Comment


            • #7
              Hallo Peter,

              vergiß das mit dem Objektinspektor. Das geht nur wenn man das SQL-Statement nicht dynamisch (zur Laufzeit) zuweist. Bei dynamischer Zuweisung (wie in Deinem Beispiel) fügst Du einfach die folgenden Zeilen ein.

              <pre>
              begin
              ...
              Datamodule2.Query2.SQL.Add('WHERE EXTRACT(MONTH FROM GebDat) LIKE = eter');
              Datamodule2.Query2.ParamByName('peter').DataType := ftword;
              Datamodule2.Query2.ParamByName('peter').AsInteger := strtoint(ComboBox1.Text);
              ...
              end;
              </pre>

              Als Datentyp kann natürlich auch ftByte oder ftInteger verwendet werden.

              Jetzt sollte es aber wirklich gehen!

              Tschüß

              Torste

              Comment


              • #8
                Hallo ihr beiden,

                warum muß es bei numerischen Werten unbedingt ein like sein. In dem Fall würde ein '=' das gleiche Ergebnis (keine Platzhalter - % verwendet) erzielen und ist obendrein noch schneller als like.

                Die richtige Syntax für like ist: where StringFeld like String (nicht like = !!!)

                Gruß Fal
                Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                Comment


                • #9
                  ('WHERE EXTRACT(MONTH FROM GebDat)=eter');

                  Datamodule2.Query2.ParamByName('peter').AsInteger

                  :=strtoint(ComboBox1.Text);

                  Hallo, vielen Dank für eure Mühe, so wie oben funktioniert es

                  Comment


                  • #10
                    Hallo Falk,

                    natürlich hast Du völlig recht. Da habe ich mich wohl ein wenig zu sehr auf das "Problem" mit dem Parameter konzentriert und im Laufe der Diskussion den Rest übersehen.

                    Tschüß

                    Torste

                    Comment


                    • #11
                      Hallo, um eine vernünftige Ausgabe zu erhalten, möchte ich nun die Spaltenbreite für Monat, Jahr, Tag ändern. Sowie den Wert zentriert darstellen. Oder Query2 mit dem Table1 DBGrid verbinden so das im Table1 DBGrid nur die abgefragten Ergebnisse angezeigt werden. Sicher könnt Ihr mir dazu etwas sagen. Gruss ph

                      Comment


                      • #12
                        Wenn Query2 mit einer DataSource2 und Table1 mit DataSource1 verbunden sind, dann kannst Du zur Laufzeit mit DBGrid1.DataSource := DataSource2 bzw. DBGrid1.DataSource := DataSource1 die Anzeige im DBGrid zwischen den beiden Ergebnismengen "umschalten".

                        Gruß Fal
                        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                        Comment


                        • #13
                          Hier mal ein Beispiel für alle, die im aktuellen Monat Geburtstag haben. Den String sd könnte man auch aus einer Combobox lesen.
                          Das komplette Beispielprogramm findest du unter www.delphi-download.de/s.php/sql_select1.zip

                          procedure TForm1.Button8Click(Sender: TObject);<br>
                          var<br>
                          s, sd : String;<br>
                          y,m,d: Word;<br>
                          begin<br>
                          DecodeDate(Date,y,m,d);<br>
                          sd := FormatDateTime('dd',Date);<br>
                          Query1.close;<br>
                          Query1.SQL.clear;<br>

                          s := 'SELECT name, gebdat FROM kunden.db '+<br>
                          ' WHERE SUBSTRING(CAST(CAST(gebdat AS DATE) AS CHAR(10)) FROM 1 FOR 2) = "'+<br>
                          sd+'" ORDER BY gebDat';<br>

                          Query1.SQL.Add(s);<br>
                          Query1.Active := true;<br>
                          end;<br>

                          mfg Klaus-Pete

                          Comment


                          • #14
                            Und hier als Nachschlag das Beispiel mit der ComboBox:

                            procedure TForm1.Button7Click(Sender: TObject);<br>
                            var<br>
                            s:string;<br>
                            begin<br>
                            Query1.close;<br>
                            Query1.SQL.clear;<br>
                            s := 'SELECT k.name, k.gebdat FROM kunden.db k WHERE (EXTRACT(MONTH FROM '+<br>
                            'gebdat) = ' + IntToStr(ComboBox1.ItemIndex+1)+') ORDER BY k.gebdat';<br>
                            Query1.SQL.Add(s);<br>
                            Query1.Active := true;<br>
                            end;<br>

                            mfg Klaus-Pete

                            Comment

                            Working...
                            X