Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL: Wenn Query eine Summe erhält (>0) Bedingung ausführen. (https://www.delphipraxis.net/14593-sql-wenn-query-eine-summe-erhaelt-0-bedingung-ausfuehren.html)

LuckyStrike4life 12. Jan 2004 08:23


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:
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;
habe ich an die ButtonClickFunktion des Abschick-Buttons gesetzt.

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?

Mario 12. Jan 2004 08:27

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

LuckyStrike4life 12. Jan 2004 08:34

Re: SQL: Wenn Query eine Summe erhält (>0) Bedingung ausf
 
Zitat:

Zitat von Mario
Variante 1: Select Count(*) From ...

Variante 2: Wie gehabt, nur nachher prüfen: if Query.bof and Query.eof then AutoNichtDa

D.h. ich kann tatsächlich eine IF Abfrage in den SQL Text einfügen? Bzw. direkt nach dem
Delphi-Quellcode:
Query2.sql.add(sSQL);    
Query2.Active:=True;
schreiben?
Wäre schön.

Mario 12. Jan 2004 08:44

Re: SQL: Wenn Query eine Summe erhält (>0) Bedingung ausf
 
Delphi-Quellcode:
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");
So sollte es gehen.

LuckyStrike4life 12. Jan 2004 09:35

Re: SQL: Wenn Query eine Summe erhält (>0) Bedingung ausf
 
Zitat:

Zitat von Mario
Delphi-Quellcode:
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');
So sollte es gehen.

Danke, das funktioniert!!
Damit hast du mir sehr geholfen.

Robert_G 12. Jan 2004 10:37

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.?

LuckyStrike4life 12. Jan 2004 10:51

Re: SQL: Wenn Query eine Summe erhält (>0) Bedingung ausf
 
Zitat:

Zitat von GeorgeWNewbie
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.?

:-D Schön das du dir Gedanken machst.
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... . :?

LuckyStrike4life 13. Jan 2004 07:54

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:
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');
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.

Nun sieht es leider so aus, dass das Programm immer
Delphi-Quellcode:
then begin  ShowMessage('Dateneingabe');
ausführt, niemals
Delphi-Quellcode:
else ShowMessage('Keine Daten');
[/delphi]. Auch wenn es eine Summe im Query gibt.

Der alte Code, der funktioniert hat sah so aus:
Delphi-Quellcode:
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;
Dabei gabs dann aber das Problem mit dem DateTimePicker... .

Was hab ich denn an dem Code oben falsch gemacht?

Hansa 13. Jan 2004 08:05

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.

LuckyStrike4life 13. Jan 2004 08:09

Re: SQL: Wenn Query eine Summe erhält (>0) Bedingung ausf
 
Zitat:

Zitat von Hansa
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.

Ja, aber es funktioniert ja.
Im alten Code sogar 100%ig zuverlässig,
da kann das Problem nicht liegen... *seufz*.

Mario 13. Jan 2004 08:17

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...

LuckyStrike4life 13. Jan 2004 08:21

Re: SQL: Wenn Query eine Summe erhält (>0) Bedingung ausf
 
Zitat:

Zitat von Mario
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...

Stimmt :wall: ,
da hast du natürlich recht. Das war n anderer Thread.

Ich hab soviele von SQL, ich bin da so unerfahren... .

Hansa 13. Jan 2004 08:29

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.

Mario 13. Jan 2004 08:36

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 00:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz