![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: ibexpert
SQLQuery Datensätze mit Bedingung zählen
Hallo Zusammen,
ich bin noch Neuling und habe daher leider noch nicht so die Ahnung. Auch nach langem Suchen habe ich noch keine Lösung für mein Problem gefunden. Zum Problem: Ich habe eine Datenbank, welche unter anderem eine Spalte Datum enthält. Über ein SQLQuery möchte ich jetzt die Anzahl der Datensätze ermitteln, welche in einem bestimmten Zeitraum befinden. Dazu habe ich folgendes versucht, was mir jedoch immer die Fehlermeldung "Unknown Column xxxxxxxx at line xxxxxx" zurückgibt. Die Variablen "von" und "bis" werden durch ein DateTimePicker ermittelt und direkt in einen string umgewandelt.
Code:
Wäre super wenn mir jemand weiterhelfen könnte.
SQLQuery1.close;
SQLQuery1.SQL.Clear; SQLQuery1.SQL.ADD('SELECT COUNT (*) AS Z FROM AUSGABEN WHERE DATUM BETWEEN '+von+' and '+bis); SQLQuery1.EXECSQL; SQLQuery1.open; ausgaben := SQLQuery1.FieldByName ('Z').AsInteger; |
AW: SQLQuery Datensätze mit Bedingung zählen
Zitat:
Gruß K-H |
AW: SQLQuery Datensätze mit Bedingung zählen
Das Format der Spalte DATUM ist "Date"
|
AW: SQLQuery Datensätze mit Bedingung zählen
Wieso machst du erst ein ExecSQL und dann nochmal ein Open?
Ich kenne IBExpert zwar nicht, aber bei allen mir bekannten Query-Komponenten führt man Abfragen (SELECT) mit Open aus und Datenmanipulationen (INSERT, UPDATE) mit ExecSQL. Ersteres sollte in diesem Fall also reichen. |
AW: SQLQuery Datensätze mit Bedingung zählen
Liste der Anhänge anzeigen (Anzahl: 1)
habe ich gerade ausprobiert aber bringt leider immer noch nichts es kommt dauernd folgende Fehlermeldung, wie im Anhang zu sehen.
|
AW: SQLQuery Datensätze mit Bedingung zählen
Anführungszeichen um die Datumsangaben machen. Oder, noch VIEL besser: Parameter verwenden.
//edit:
Delphi-Quellcode:
Nur mal so, ungetestet.
SQLQuery.Close;
SQLQuery.SQL.Clear; SQLQuery.SQL.Add('SELECT COUNT (*) AS Z FROM Ausgaben WHERE Datum BETWEEN :von AND :bis'); SQLQuery.ParamByName('von').AsDate := Von; SQLQuery.ParamByName('bis').AsDate := Bis; SQLQuery.Open; |
AW: SQLQuery Datensätze mit Bedingung zählen
Delphi-Quellcode:
SELECT * FROM Orders WHERE Orderdate >= '2009-05-09' AND Orderdate <'2012-04-15'
Grüße in die Runde |
AW: SQLQuery Datensätze mit Bedingung zählen
BETWEEN muss eigentlich auch gehen, vermutlich waren von und bis nur nicht befüllt. Das würde zumindest die Fehlermeldung plausibel erklären.
|
AW: SQLQuery Datensätze mit Bedingung zählen
Zitat:
|
AW: SQLQuery Datensätze mit Bedingung zählen
Zitat:
aber es gibt SQL-Dialekte, die sich da etwas zickig anstellen. Gruß K-H |
AW: SQLQuery Datensätze mit Bedingung zählen
Vielleicht hilft ein QuotedStr, wenn man unbedingt auf die Parametrierung verzichten will.
|
AW: SQLQuery Datensätze mit Bedingung zählen
Super das war die Lösung.
Sieht jetzt wie folgt aus:
Code:
Vielen Dank für die Hilfen.
SQLQuery1.close;
SQLQuery1.SQL.Clear; SQLQuery1.SQL.Add('SELECT COUNT (*) AS Z FROM AUSGABEN WHERE DATUM BETWEEN ('+QuotedStr(von)+') AND ('+QuotedStr(bis)+')'); SQLQuery1.open; ausgaben := SQLQuery1.FieldByName('Z').AsInteger; |
AW: SQLQuery Datensätze mit Bedingung zählen
Parameter wären trotzdem besser. Irgendwie erscheint es mir unlogisch, ein Datenformat(TDate) in ein anderes (String) zu pressen, welches man dann auch noch aufbereiten (QuotedStr) muss.
|
AW: SQLQuery Datensätze mit Bedingung zählen
wie würde das denn aussehen?
ich habe eben versucht mit:
Code:
und dann sagt er mir dauernd "Parameter nicht gefunden"
SQLQuery.ParamByName('von').AsDate := von;
|
AW: SQLQuery Datensätze mit Bedingung zählen
Wie hast Du die Parameter denn definiert? So wie in #6 mit Doppelpunkten? Dann sollten sie eigentlich gefunden werden.
|
AW: SQLQuery Datensätze mit Bedingung zählen
Ja wenn ich wie in #6 die Parameter definiere, dann sagt Delphi mir, dass "Z" nicht gefunden wurde.
Wenn ich die Zeile SQLQuery.SQL.ADD(.....); unter die beiden Zeilen SQLQuery.parambyname.... setze dann kommt die Meldung, dass die Parameter nicht gefunden werden. |
AW: SQLQuery Datensätze mit Bedingung zählen
Zeig nochmal den kompletten Code, da ist bestimmt nur ein kleiner Fehler drin.
|
AW: SQLQuery Datensätze mit Bedingung zählen
Code:
SQLQuery1.Close;
SQLQuery1.SQL.Clear; SQLQuery1.SQL.Add('SELECT COUNT (*) AS Z FROM AUSGABEN WHERE DATUM BETWEEN :von AND :bis'); SQLQuery1.ParamByName('von').AsDate := Von; SQLQuery1.ParamByName('bis').AsDate := Bis; SQLQuery1.Open; |
AW: SQLQuery Datensätze mit Bedingung zählen
Das sieht eigentlich korrekt aus. Was geschieht, wenn Du mal testhalber den Feldalias Z weglässt?
|
AW: SQLQuery Datensätze mit Bedingung zählen
Zitat:
Zitat:
|
AW: SQLQuery Datensätze mit Bedingung zählen
So jetzt habe ich die Lösung.
Funktioniert mit dem Parametern viel besser. Wenn ich die Parameter als .value definiere, dann funktioniert auch alles. Hier der Quelltext:
Code:
Vielen Dank nochmal für die Hilfen
SQLQuery1.Close;
SQLQuery1.SQL.Clear; SQLQuery1.SQL.Add('SELECT COUNT (*) AS Z FROM AUSGABEN WHERE DATUM BETWEEN :von AND :bis'); SQLQuery1.ParamByName('von').value := von; SQLQuery1.ParamByName('bis').value := bis; SQLQuery1.Open; |
AW: SQLQuery Datensätze mit Bedingung zählen
Das wäre mein nächster Vorschlag gewesen. Das dauert zwar evtl. einen kleinen Tick länger, dafür muss man sich im Normalfall aber um den passenden Datentyp keinen Kopf machen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz