![]() |
SQL: Wenn Query eine Summe erhält (>0) Bedingung ausführe
Morgen,
ich müsste mal dringend wissen - ob und wenn ja wie es möglich ist, eine Bedingung aus SQL zu starten. Das ganze schaut so aus, mit Hilfe von SQL frag ich ab, ob am jeweiligem Datum (Tag X) das entsprechende Auto, welches ein User am Tag X haben möchte, noch da ist - oder nicht. Den SQL Code:
Delphi-Quellcode:
habe ich an die ButtonClickFunktion des Abschick-Buttons gesetzt.
Query2.Close;
Query2.SQL.Clear; sSQL := 'SELECT * FROM "t:eDienstreisebuch\mainDBalt.dbf" where dienst_pkw = "' + PKW.Text + '" AND datum = ''' + Datum2.text + ''''; Query2.sql.add(sSQL); Query2.Active:=True; Soweit gehts auch, wenn ein bereits eingetragener Datensats übereinstimmt, wird dieser in den Query geschrieben und ich laß ihn mir über ein DBGrid anzeigen. Später ist aber kein Platz mehr für ein DBGrid und der User soll auch nur drauf hingewiesen werden, wenn er den Wagen an Tag X nicht haben kann, ansonsten soll der neue Datensatz ganz normal eingetragen werden. Ich hoffe mein Problem richtig erklärt zu haben, habt ihr vielleicht Ideen? |
Re: SQL: Wenn Query eine Summe erhält (>0) Bedingung ausf
Variante 1: Select Count(*) From ...
Variante 2: Wie gehabt, nur nachher prüfen: if Query.bof and Query.eof then AutoNichtDa |
Re: SQL: Wenn Query eine Summe erhält (>0) Bedingung ausf
Zitat:
Delphi-Quellcode:
schreiben?
Query2.sql.add(sSQL);
Query2.Active:=True; Wäre schön. |
Re: SQL: Wenn Query eine Summe erhält (>0) Bedingung ausf
Delphi-Quellcode:
So sollte es gehen.
Query2.Close;
Query2.SQL.Clear; sSQL := 'SELECT * FROM "t:eDienstreisebuch\mainDBalt.dbf" where dienst_pkw = "' + PKW.Text + '" AND datum = ''' + Datum2.text + ''''; Query2.sql.add(sSQL); Query2.Active:=True; if Query2.Bof and Query2.Eof then SHowMessage("Keine Daten"); |
Re: SQL: Wenn Query eine Summe erhält (>0) Bedingung ausf
Zitat:
Damit hast du mir sehr geholfen. |
Re: SQL: Wenn Query eine Summe erhält (>0) Bedingung ausf
Was ist, wenn das Auto nur 2 Stunden weg ist?
Du würdest es nicht weiter vermieten :arrow: Verdienstausfall 2.Bsp. : Auto wurde am 3.1. gemietet und am 5.1. zurückgebracht: Wie reagiert dein Programm dann für den 4.1.? |
Re: SQL: Wenn Query eine Summe erhält (>0) Bedingung ausf
Zitat:
Das wurde hier schon auf Konverenzen besprochen, ich stand deswegen auch schon stark in der Kritik. Die Wahrscheinlichkeit ein PKW an dem selben Tag, noch einem weiteren Mitarbeiter geben zu können ist gering. Auswertung der alten Datenbank hat das ergeben. Natürlich wäre es schön, wenn man es auch noch von der Zeit abhängig macht. Das war auch mein Ziel, sobald ich mit der Revision des Programmes fertig bin, dann nutze ich die Zeit die mir noch bleibt (das wird nicht viel Zeit sein) um es auch Tageszeit abhängig zu gestalten. Dafür gibt es hier ja auch schon ein Thread, wo es um Räume ging, und belegt oder nicht. Erinnert ihr euch sicher noch dran. Vorläufig muss es so reichen... . :? |
Re: SQL: Wenn Query eine Summe erhält (>0) Bedingung ausf
Verdammt,
da gibts noch n Problem mit deinem Code, Mario. Er schaut jetzt im Programm so aus:
Delphi-Quellcode:
Ein Fehler fällt auf, die Zeile die ich ausgeklammert habe, kann in der Form ja auch nicht funktionieren. Denn sSQL ist ja nicht mehr vorhanden, die Deklaration davon - könnte ich also auch entfernen.
var
sSQL: string; procedure TForm1.Button2Click(Sender: TObject); begin Query2.Close; Query2.SQL.Clear; Query2.SQL.Text := 'SELECT *' + #10 + 'FROM "t:eDienstreisebuch\mainDB.dbf"' + #10 + 'WHERE Dienst_PKW = :iDienst_PKW And' + #10 + ' Datum = :iDateT'; Query2.prepare; Query2.ParamByName('iDienst_PKW').AsString := Dienst_Pkw.text; Query2.ParamByName('iDateT').AsDateTime := DateT.DateTime; Query2.open; //Query2.sql.add(sSQL); Query2.Active:=True; if Query2.Bof and Query2.Eof then begin ShowMessage('Dateneingabe'); end else ShowMessage('Keine Daten'); Nun sieht es leider so aus, dass das Programm immer
Delphi-Quellcode:
ausführt, niemals
then begin ShowMessage('Dateneingabe');
Delphi-Quellcode:
[/delphi]. Auch wenn es eine Summe im Query gibt.
else ShowMessage('Keine Daten');
Der alte Code, der funktioniert hat sah so aus:
Delphi-Quellcode:
Dabei gabs dann aber das Problem mit dem DateTimePicker... .
var
sSQL: String; procedure TForm1.Button1Click(Sender: TObject); begin Query2.Close; Query2.SQL.Clear; sSQL := 'SELECT * FROM "t:eDienstreisebuch\mainDBalt.dbf" where dienst_pkw = "' + PKW.Text + '" AND datum = ''' + Datum2.text + ''''; Query2.sql.add(sSQL); Query2.Active:=True; if Query2.Bof and Query2.Eof then ShowMessage('Keine Daten'); end; Was hab ich denn an dem Code oben falsch gemacht? |
Re: SQL: Wenn Query eine Summe erhält (>0) Bedingung ausf
Das mit dem EOF/BOF gefällt mir nicht. :mrgreen: Schau mal, ob es da nicht "IsEmpty" oder "IsNull" oder so in der Richtung gibt.
|
Re: SQL: Wenn Query eine Summe erhält (>0) Bedingung ausf
Zitat:
Im alten Code sogar 100%ig zuverlässig, da kann das Problem nicht liegen... *seufz*. |
Re: SQL: Wenn Query eine Summe erhält (>0) Bedingung ausf
Was ist an BOF and EOF denn nicht OK? Ich dachte immer, damit eine wirklich saubere Verfahrensweise zu haben.
Wegen dem ausgeklammerten Code: Active = True und Open ist das selbe. Ergo willst Du der SQL-Anweisung nach dem Öffnen noch Code hinzufügen, dass geht natürlich nicht. Mit meinem Code hat das nicht zu tun, von mir kommt ja nur die Prüfung... |
Re: SQL: Wenn Query eine Summe erhält (>0) Bedingung ausf
Zitat:
da hast du natürlich recht. Das war n anderer Thread. Ich hab soviele von SQL, ich bin da so unerfahren... . |
Re: SQL: Wenn Query eine Summe erhält (>0) Bedingung ausf
Das ist purer Perfektionismus. :lol: Ich habe mir angewöhnt, wenn etwas mit einer Abfrage geht, nicht zwei oder eine zusammengesetzte zu verwenden. Wird man z.B. abgelenkt und schreibt statt AND ein OR in die Abfrage, dann passieren unnötige Fehler (dem Compiler ist es egal) und der Code wird etwas unübersichtlicher. Ohne Schreibfehler ist es schon dasselbe.
|
Re: SQL: Wenn Query eine Summe erhält (>0) Bedingung ausf
@Hansa: Der Argumentation kann ich folgen. Im speziellen Falle werde ich jedoch BOF and EOF vorziehen, da ich da genau weiß, wass passiert. Bei isEmpty oder isNull und dergleichen wäre ich mir speziell bei TQuery unsicher, ob das bei jedem Tabellentyp gleich umgesetzt wird. Trotzdem Danke für den Tipp.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 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