Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi In SQL Anweisung Feld Inhalt abfragen lassen (https://www.delphipraxis.net/14382-sql-anweisung-feld-inhalt-abfragen-lassen.html)

LuckyStrike4life 8. Jan 2004 09:49


In SQL Anweisung Feld Inhalt abfragen lassen
 
Morgen,

ich hab ein Code geschrieben der soweit auch funktioniert.
Es ging darum das geschaut wird, ob ein Eintrag der in eine DB gespeichert werden soll, nicht möglich ist - weil Überschneidungen in den angeforderten PKWs zu Tag XX besteht.

Das geht mit SQL und schaut so aus:
Delphi-Quellcode:
Query2.Close;
Query2.SQL.Clear;
Query2.SQL.ADD ('SELECT * FROM "mainDB" WHERE dienst_pkw="Ford DM-162" and datum="08.01.2004"');
Query2.Active:=True;
Nun, das ist nur ein einfaches Beispiel, um zu lernen wie es überhaupt funktionieren kann.

Alles funktioniert, in nem DBGRid las ich mir dann die entsprechenden Datensätze anzeigen.

Jetzt muss der Code aber so verändert werden, dass ich nach
WHERE dienst_pkw= nicht im Code sagen muss, was für ein Fahrzeug ausgewählt wurde.
Das gleiche beim Datum.

Also muss ich den Code noch so verändern, dass die Abfrage der Felder automatisch erfolgt und sich in den Code einsetzt.
Die Fahrzeuge werden in einer DBLookupCombobox angegeben, das Datum über den DateTimePicker.

Angaben wie WHERE dienst_pkw="FieldByName('Dienst_PKW')" funktionieren natürlich nicht, hab ich probiert :) .

Smokey 8. Jan 2004 10:01

Re: In SQL Anweisung Feld Inhalt abfragen lassen
 
Ich habe bisher weder mit DBLookupCombo gearbeitet noch mit DateTimePicker aber mal generell:

Wenn du in einen String irgendwas einbinden willst, was erst zur Laufzeit bekannt ist (Variable, Text aus Combobox usw.) dann so :

Delphi-Quellcode:
sSQL := 'SELECT * FROM myTable where myFeld = ' + textField1.Text + 'AND myField2 = ' + QuotedString(wasweissich.text)
sSql ist dabei ne String Variable. Du müsstest quasi nur textField1.text und wasweissich.text durch die Werte deiner beiden Controls ersetzen.

Oder hab ich dein Problem missverstanden??

LuckyStrike4life 8. Jan 2004 10:51

Re: In SQL Anweisung Feld Inhalt abfragen lassen
 
Zitat:

Zitat von Smokey
Ich habe bisher weder mit DBLookupCombo gearbeitet noch mit DateTimePicker aber mal generell:

Wenn du in einen String irgendwas einbinden willst, was erst zur Laufzeit bekannt ist (Variable, Text aus Combobox usw.) dann so :

Delphi-Quellcode:
sSQL := 'SELECT * FROM myTable where myFeld = ' + textField1.Text + 'AND myField2 = ' + QuotedString(wasweissich.text)
sSql ist dabei ne String Variable. Du müsstest quasi nur textField1.text und wasweissich.text durch die Werte deiner beiden Controls ersetzen.

Oder hab ich dein Problem missverstanden??

Danke,
du hast das Problem richtig erkannt.

Dein Programmcode sieht auch gut aus, hab das Beispielprogramm mal so verändert, dass die Daten aus normalen Edit Feldern abgegriffen werden.

Hab dann sSQL als String deklariert, schaut nun 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.Active:=True;
end;
Nun mag Delphi aber nicht compilieren, ich bekomme immer die Aussage:
Zitat:

[Fehler] Unit1.pas(46): Nicht abgeschlossener String
[Fehler] Unit1.pas(47): Operator oder Semikolon fehlt
...

BluesKid 8. Jan 2004 11:06

Re: In SQL Anweisung Feld Inhalt abfragen lassen
 
Versuchs mal so:

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;
end;
u.U. kannst du die Gänsefüsschen und Klammern auch weglassen :?:

schöne Grüße

Sam

Smokey 8. Jan 2004 11:23

Re: In SQL Anweisung Feld Inhalt abfragen lassen
 
In deinem Beispiel ist das allerletzte Hochkomma zuviel. Ka warum du das da hingemacht hast.
Deshalb denkt Delphi, da fängt nen neuer Teil vom String an, der aber nirgendwo endet.

Lies dir am besten nochmal generelles zum Handling von Strings durch, mir scheint da fehlen dir noch ein paar Grundlegende Informationen. Und ohne sicheren Umgang mit Strings kommst du bei Datenbanken und SQL nicht weit.

Ist nicht böse gemeint, sondern nur ein Rat :wink:


P.S.: Denk dran, dass im SQL bei einem Vergleich von String-Datenbankfeldern die Strings in Hochkommata stehen müssen, was bei dir mindestens im Fall dienst_pkw so ist.
Dafür am besten die Funktion QuotedString(PKW.Text) benutzen. Dann wird der String aus dem Textfeld direkt in Gänsefüsschen gepackt.

LuckyStrike4life 8. Jan 2004 12:21

Re: In SQL Anweisung Feld Inhalt abfragen lassen
 
BluesKid:
Thx, jetzt funktioniert es soweit.

Smokey:
Dein Rat fasse ich nicht böse auf. An sich muss ich noch sehr viel lernen, Strings und SQL gehört sicher mit dazu.

Wenn ich jetzt z.B.: QuotedString(PKW.text) schreibe, sagt Delphi das QuotedString ein undefinierter Bezeichner sei. Soll ichs als String deklarieren?

Aber gut, der Code funktioniert in der Forum:
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;
Nur, und das ist mir vorher nicht aufgefallen, wenn jetzt kein Datensatz dazu passt - dann bricht das Programm ab und Delphi meint:
Zitat:

Im Projekt soundso.exe ist eine Exception der Klasse EDBEngineError aufgetreten. Meldung: 'Keine Übereinstimmung der Typen im Ausdruck'. Prozeß...
Klare Sache,
wenn das jetzt eine If Abfrage wäre, hätte ich kein Problem - so könnte ich eben wenn nichts zutrift einfach einen anderen Weg weiterarbeiten lassen. Aber bei SQL bin ich so jungfräulich, dass mir die Lösung nicht einfällt.

Robert_G 8. Jan 2004 12:30

Re: In SQL Anweisung Feld Inhalt abfragen lassen
 
Hi LuckyStrike, eine ähnliche Problematik hatten wir hier schon einmal.
Hier im Forum suchenfreien AND Belegungszeitraum AND ermitteln - Treffnix's Lösung war die richtige.

BluesKid 8. Jan 2004 12:35

Re: In SQL Anweisung Feld Inhalt abfragen lassen
 
Moin

Also da werd ich jetzt nicht ganz schlau draus... :wiejetzt:

Was soll die offene Klammer vor PKW.text und warum hast du die Gänsefüsschen um den Abfrageausdruck für datum gemacht...

imho müsste die Exception bei jedem Versuch die Abfrage zu öffnen kommen...is jetzt reine Spekulation aber :

Zitat:

Im Projekt soundso.exe ist eine Exception der Klasse EDBEngineError aufgetreten. Meldung: 'Keine Übereinstimmung der Typen im Ausdruck'. Prozeß...
Diese Meldung besagt doch nur, dass der Typ eines Feldes in deiner DB und der Typ den du im SQL-Statement angegeben hast nicht übereinstimmen...denke nich dass das was damit zu tun hat ob ein Eintrag vorhanden is oder nich...(dann wäre recordcount einfach 0 aber die Abfrage geht trotzdem)

Mein Vorschlag:

Schau dir die Feldtypen in deiner DB an .. ich rate mal ins Blaue, aber ich denke PKW.txt musst du (siehe Post Smokey) mit Hochkommata übergeben und den Wert fürs Datum mit Klammern...


Verbesserungen erwünscht :zwinker:

schöne Grüße

Sam

LuckyStrike4life 8. Jan 2004 13:15

Re: In SQL Anweisung Feld Inhalt abfragen lassen
 
Zitat:

Zitat von BluesKid
Moin

Also da werd ich jetzt nicht ganz schlau draus... :wiejetzt:

Was soll die offene Klammer vor PKW.text und warum hast du die Gänsefüsschen um den Abfrageausdruck für datum gemacht...

imho müsste die Exception bei jedem Versuch die Abfrage zu öffnen kommen...is jetzt reine Spekulation aber :

Zitat:

Im Projekt soundso.exe ist eine Exception der Klasse EDBEngineError aufgetreten. Meldung: 'Keine Übereinstimmung der Typen im Ausdruck'. Prozeß...
Diese Meldung besagt doch nur, dass der Typ eines Feldes in deiner DB und der Typ den du im SQL-Statement angegeben hast nicht übereinstimmen...denke nich dass das was damit zu tun hat ob ein Eintrag vorhanden is oder nich...(dann wäre recordcount einfach 0 aber die Abfrage geht trotzdem)

Mein Vorschlag:

Schau dir die Feldtypen in deiner DB an .. ich rate mal ins Blaue, aber ich denke PKW.txt musst du (siehe Post Smokey) mit Hochkommata übergeben und den Wert fürs Datum mit Klammern...


Verbesserungen erwünscht :zwinker:

schöne Grüße

Sam

Also die Klammer war nur ein Fehler, so würds natürlich nicht funktionieren.
Wenn ich keine Anführungsstriche um Datum setze, dann läßt es sich nicht compilieren. Da standen im Codebeispiel von eich Klammern. Die hab ich dann halt ausgetauscht, denn mit den Klammern gings auch nicht.

So nun hab ich mal noch n wenig getestet,

es schaut jetzt so aus - wenn im Feld Datum nichts eingetragen ist, oder nur zB. 12.12. dann bricht das Programm ab. Wenn dort irgendein richtiges ganzes Datum eingetragen wurde, egal ob es das in der DB gibt oder nicht - dann bricht das Programm nicht ab! So wies sein soll. Der Grid, in dem dann das Ergebniss ausgegeben wird, wird nur mit einer leeren Zeile gefüllt.

Das interessante, es ist egal ob etwas in dem Feld für PKW steht, da kann auch nichts stehen. Das programm bricht nicht ab. So wie es sein soll.

Nun könnte ich schon damit leben wenn es so bleibt, denn ein Datum gibt es immer - bei jedem Datensatz, ein Fahrzeug nicht.


Bin euch wirklich dankbar für die Hilfe!!
Was nicht heißen soll das dieser Thread damit beendet ist, ich muss noch n paar Dinge wissen.

r_kerber 8. Jan 2004 13:29

Re: In SQL Anweisung Feld Inhalt abfragen lassen
 
Zitat:

Zitat von LuckyStrike4life
Wenn ich keine Anführungsstriche um Datum setze, dann läßt es sich nicht compilieren.

Doch, mit doppelten Hochkommas! Und das ist genau das, was QuotedStr auch macht. Es gibt Datenbanken, die akzeptieren kein " als Klammerung für Zeichenketten!

LuckyStrike4life 8. Jan 2004 13:36

Re: In SQL Anweisung Feld Inhalt abfragen lassen
 
Zitat:

Zitat von r_kerber
Zitat:

Zitat von LuckyStrike4life
Wenn ich keine Anführungsstriche um Datum setze, dann läßt es sich nicht compilieren.

Doch, mit doppelten Hochkommas! Und das ist genau das, was QuotedStr auch macht. Es gibt Datenbanken, die akzeptieren kein " als Klammerung für Zeichenketten!

Verstehe, also '' anstatt ". Ich versuchs...

Also das:
Delphi-Quellcode:
''' + Datum2.text + ''''
geht auch, sieht komisch aus - aber okay.
Gleiches Ergebnis wie mit ".

r_kerber 8. Jan 2004 13:40

Re: In SQL Anweisung Feld Inhalt abfragen lassen
 
oder
Delphi-Quellcode:
sSQL := 'SELECT * FROM "t:eDienstreisebuch\mainDBalt.dbf" where dienst_pkw = ' + QuotedStr (PKW.Text);
Sieht besser aus. Für mich sieht eher die Pfadangabe nach FROM komisch aus. Warum nutzt Du keine BDE-Aliase (in Verbindung mit TDatabase im Programm)?

LuckyStrike4life 8. Jan 2004 13:59

Re: In SQL Anweisung Feld Inhalt abfragen lassen
 
Zitat:

Zitat von r_kerber
oder
Delphi-Quellcode:
sSQL := 'SELECT * FROM "t:eDienstreisebuch\mainDBalt.dbf" where dienst_pkw = ' + QuotedStr (PKW.Text);
Sieht besser aus. Für mich sieht eher die Pfadangabe nach FROM komisch aus. Warum nutzt Du keine BDE-Aliase (in Verbindung mit TDatabase im Programm)?

Über Alias Namen von den DBs haben wir doch schon oft gesprochen, ich werds auch noch ändern, allerdings alles zu seiner Zeit ;).

LuckyStrike4life 9. Jan 2004 08:46

Re: In SQL Anweisung Feld Inhalt abfragen lassen
 
Zitat:

Zitat von GeorgeWNewbie
Hi LuckyStrike, eine ähnliche Problematik hatten wir hier schon einmal.
Hier im Forum suchenfreien AND Belegungszeitraum AND ermitteln - Treffnix's Lösung war die richtige.

Ja, den Thread kannte ich auch schon ;).
Der Code ist interessant, so könnte man sogar (eventuell) nach der Uhrzeit gucken lassen. Aber alles nach und nach.

Jetzt fehlt mir noch n kleines Stück Wissen, bis ich den Code auch tatsächlich verwenden kann.

Es ist ja so, ein User trägt sein Antrag ein, dass Programm schaut ob an dem Tag das Auto welches er haben möchte frei ist, wenn ja - dann soll der Datensatz einfach eingestellt werden.
Sollte der gewünschte Wagen aber schon vergeben sein, so muss eine Meldung erscheinen (z.B. durch aufpoppen eines neuen Forms) und es muss der Datensatz angezeigt werden, der den Wagen schon belegt.

Aber wie schreib ich den SQL Code um, dass wenn es ein Ergebnis gibt (sprich: der Wagen schon weg ist) auch eine Handlung vom Programm ausgeführt wird.

Bis jetzt schreibt er das Ergebnis ja nur in ein Query, den ich über n Grid ausgeben lasse.

Ideen? Gibts da eine Lösung oder muss ich ganz anders rangehen?

[edit=sakura] :wall: Doppel-Post, dritten Post, vierten Post und :!: fünften Post :shock: gelöscht. Mfg, sakura[/edit]

Robert_G 9. Jan 2004 09:40

Re: In SQL Anweisung Feld Inhalt abfragen lassen
 
Moin.
Also wenn ich dich richtig verstanden habe, willst du eine eierlegende Wollmilchsau. :zwinker:

Nehme eine Query, die prüft, ob es schon Einträge für das Auto zu dem Zeitpunkt gibt. (Genau das macht der Code in dem anderem Thread)

Wenn die Abfrage nix gefunden hat kannst du normal weitermachen, andernfalls eine Meldung ausgeben.

LuckyStrike4life 12. Jan 2004 11:21

Re: In SQL Anweisung Feld Inhalt abfragen lassen
 
@sakura
Das war wirklich nicht meine Absícht, ich hab immer nur Fehlermeldungen vom Browser erhalten, und dann auf ein neues versucht. Das es am Ende so schlimm aussah, wusste ich nicht. Sorry.

Kleines Problem gibts noch mit dem Code.

Ich hab dafür ja ein Testprogramm erstellt, nun wollte ich es übernehmen.
Das Problem liegt in den verwendeten Komponenten,

die Abfrage welcher PKW genutzt werden soll, erfolgt über eine DBCombobox. Kein Problem, läßt sich in der Form abgreifen:
Delphi-Quellcode:
Dienst_Pkw.text
Das Datum hingegen, stammt aus dem DateTimePicker. Und läßt sich natürlich nicht so einfach abgreifen,
ich habs dann mit:
Delphi-Quellcode:
DateT.Date
versucht. Klang mir recht logisch.

Der Code sieht demzufolge nun so aus:
Delphi-Quellcode:
var
sSQL: string;

Procedure TForm1.Button9Click(Sender: TObject);
Begin

Query2.Close;
Query2.SQL.Clear;
sSQL := 'SELECT * FROM "t:eDienstreisebuch\mainDB.dbf" where dienst_pkw = "' + Dienst_Pkw.text + '" AND datum = ''' + DateT.Date + '''';
Query2.sql.add(sSQL);
Query2.Active:=True;
Delphi mag aber nicht compilieren, Delphi sagt dazu:
Zitat:

[Fehler] DB4realpas.pas(247): Inkompatible Typen: 'String' und 'TDate'
Okay, muss sich ja auch nicht als String abfragen lassen. Normal würde ich
Delphi-Quellcode:
AsDateTime := DateT.Date;
schreiben, aber in SQL funktioniert jenes nicht.

Wie kann ich das Problem lösen... es hindert jetzt extrem am Fertigstellen... .
*seufz*

Robert_G 12. Jan 2004 11:46

Re: In SQL Anweisung Feld Inhalt abfragen lassen
 
Wenn du SQL-Variablen benutzt bekommst du 1. ein paar Probleme weniger und 2. läuft es nächsten Ausführen wesentlich schneller.

Delphi-Quellcode:
  Query1.SQL.TEXT :=
   'SELECT *' + #10 +
   'FROM  "t:eDienstreisebuch\mainDB.dbf"' + #10 +
   'WHERE Dienst_PKW = :iDienst_PKW And' + #10 +
   '      Datum = :iDateT';

  Query1.prepare;
  Query1.ParamByName('iDienst_PKW').AsString := Dienst_Pkw.text;
  Query1.ParamByName('iDateT').AsDateTime := DateT.DateTime;
  Query1.open;
p.s.: Die Lesbarkeit ist so auch wesentlich besser...

LuckyStrike4life 12. Jan 2004 11:58

Re: In SQL Anweisung Feld Inhalt abfragen lassen
 
Zitat:

Zitat von GeorgeWNewbie
Wenn du SQL-Variablen benutzt bekommst du 1. ein paar Probleme weniger und 2. läuft es nächsten Ausführen wesentlich schneller.

Delphi-Quellcode:
  Query.SQL.TEXT :=
   'SELECT *' + #10 +
   'FROM  "t:eDienstreisebuch\mainDB.dbf"' + #10 +
   'WHERE Dienst_PKW = :iDienst_PKW And' + #10 +
   '      Datum = :iDateT';

  Query1.prepare;
  Query1.ParamByName('iDienst_PKW').AsString := Dienst_Pkw.text;
  Query1.ParamByName('iDateT').AsDateTime := DateT.DateTime;
  Query1.open;
p.s.: Die Lesbarkeit ist so auch wesentlich besser...

Interessant,
brauch ich für prepare ein neuen Query? Weil du Query1 geschrieben hast, ich momentan für den eigentlichen Code allerdings Query 2 nutze.

Wofür steht eigentlich '+ #10 +'? Nur damit ich auch mal n wenig was lerne.

Robert_G 12. Jan 2004 13:16

Re: In SQL Anweisung Feld Inhalt abfragen lassen
 
:oops:
Ich hatte mich verschrieben.
Es sollte in der ersten Zeile auch "Query1" stehen (ich werden den Post abändern)

#10 ist ein LineFeed und reicht in SQL als Zeilenumbruch (du brauchst kein #13#10)

LuckyStrike4life 13. Jan 2004 08:24

Re: In SQL Anweisung Feld Inhalt abfragen lassen
 
Verdammt,
da gibts noch n Problem mit deinem Code.

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?

Robert_G 13. Jan 2004 09:06

Re: In SQL Anweisung Feld Inhalt abfragen lassen
 
Das Problem war, dass ich DateTime verwendet habe - für deine jetzige Tabelle müsste es Date sein.

Außerdem sollte die Tabelle 2 Datumsfelder enthalten: 1. ausgeliehen (StartDatum) 2.zurückgebracht(EndDatum) (beide mit Uhrzeit)
dann könnte es So aussehen:
Delphi-Quellcode:
Query2.Close;
Query2.SQL.Clear;
Query2.SQL.Text :=
   'SELECT *' + #10 +
   'FROM  "t:eDienstreisebuch\mainDB.dbf"' + #10 +
   'WHERE Dienst_PKW = :iDienst_PKW AND' + #10 +
   '      (:iDate between StartDatum AND EndDatum)';

Query2.prepare;
Query2.ParamByName('iDienst_PKW').AsString := Dienst_Pkw.text;
Query2.ParamByName('iDate').AsDateTime := DateT.DateTime;
Damit dürftest du die Probleme umgehen können, die weiter oben beschrieben habe...

LuckyStrike4life 13. Jan 2004 09:30

Re: In SQL Anweisung Feld Inhalt abfragen lassen
 
Zitat:

Zitat von GeorgeWNewbie
Das Problem war, dass ich DateTime verwendet habe - für deine jetzige Tabelle müsste es Date sein.

Außerdem sollte die Tabelle 2 Datumsfelder enthalten: 1. ausgeliehen (StartDatum) 2.zurückgebracht(EndDatum) (beide mit Uhrzeit)
dann könnte es So aussehen:
Delphi-Quellcode:
Query2.Close;
Query2.SQL.Clear;
Query2.SQL.Text :=
   'SELECT *' + #10 +
   'FROM  "t:eDienstreisebuch\mainDB.dbf"' + #10 +
   'WHERE Dienst_PKW = :iDienst_PKW AND' + #10 +
   '      (:iDate between StartDatum AND EndDatum)';

Query2.prepare;
Query2.ParamByName('iDienst_PKW').AsString := Dienst_Pkw.text;
Query2.ParamByName('iDate').AsDateTime := DateT.DateTime;
Damit dürftest du die Probleme umgehen können, die weiter oben beschrieben habe...

Danke,
es läuft hier in der Art, dass jeder Mitarbeiter der eine Dienstreise machen muss, ein Auto haben kann, solange es noch nicht vergeben ist. Dienstreisen dauern für gewöhnlich ein Tag - wenn es länger dauert, dann muss der private Wagen genommen werden (gegen Entschädigung, klar).
Daher gibt es keine Feld, wann der PKW wieder da ist, sondern nur die Uhrzeit.

D.h. man könnte (und das wäre auch sehr gut) nach der Zeit schauen lassen, es gibt ein Feld für Beginn d. Reise und Ende d. Reise.

Das würde jetzt aber sehr ausfühlichen Code benötigen, erstmal muss man von der Eingabemaske schauen lassen von wann bis wann ein Wagen genommen wird, in die DB schauen - von wann bis wann der PKW weg ist... usw.

LuckyStrike4life 13. Jan 2004 10:39

Re: In SQL Anweisung Feld Inhalt abfragen lassen
 
*seufz*
hab den Code nun so geschrieben:
Delphi-Quellcode:
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 = :iDate';

Query2.prepare;
Query2.ParamByName('iDienst_PKW').AsString := Dienst_Pkw.text;
Query2.ParamByName('iDate').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');[/delphi]
Leider wird immer noch kein Ergebniss in den Query geschrieben, wenn Datensätze (eigentlich) übereinstimmen.
So läuft dann immer
Delphi-Quellcode:
then begin  ShowMessage('Dateneingabe');
ab.
Der Fehler muss noch woanders liegen... .

Robert_G 13. Jan 2004 10:58

Re: In SQL Anweisung Feld Inhalt abfragen lassen
 
Zitat:

Zitat von GeorgeWNewbie
Das Problem war, dass ich DateTime verwendet habe - für deine jetzige Tabelle müsste es Date sein.

Nicht "asDateTime := xxx.DateTime", sondern "asDate := Date"!!!

LuckyStrike4life 13. Jan 2004 11:11

Re: In SQL Anweisung Feld Inhalt abfragen lassen
 
Nun hab ichs,

der Fehler lag schon in der Zeile - wie du meintest.
Richtig muss sie in meinem Programm in der Art geschrieben stehen:
Delphi-Quellcode:
Query2.ParamByName('iDate').asDate := DateT.DateTime;
"Date" könnte nicht ausreichen, denn die Komponente hat von mir den Namen "DateT" bekommen, warum auch immer ;).

Bedanke mich für deine Hilfe, hast mich wirklich weiter gebracht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:22 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