Entwickler-Ecke

Datenbanken - 2 Date-Parameter in Abfrage mit BETWEEN


Cuci - So 05.10.14 18:46
Titel: 2 Date-Parameter in Abfrage mit BETWEEN
Hallo, ich bin dabei, meine Anwendung von BDE auf MySQL umzustellen. Folgendes SQL-Statement wird von FireDAC bezüglich der MySQL-Syntax angemeckert:

'SELECT * FROM Vertrag V, Haeuser H ' +
'WHERE (V.Haus = H.Haus) ' +
'AND (H.Haus = :Haus) ' +
'AND (V.MietEnde BETWEEN :MpLfdA AND :MpLfdE) ' +
'ORDER BY V.MietBeginn';

Wäre schön, wenn mich jemand schlau machen könnte.


Lemmy - So 05.10.14 20:09

Hi,
da dürfte der Vergleichsoperator noch fehlen:

http://dev.mysql.com/doc/refman/5.1/de/comparison-operators.html



user profile iconCuci hat folgendes geschrieben Zum zitierten Posting springen:

'SELECT * FROM Vertrag V, Haeuser H ' +
'WHERE (V.Haus = H.Haus) ' +
'AND (H.Haus = :Haus) ' +
'AND (V.MietEnde BETWEEN :MpLfdA AND :MpLfdE) =1 ' +
'ORDER BY V.MietBeginn';


oder =0 je nachdem was Du willst...


ub60 - So 05.10.14 21:03

Eventuell ist das Datumsformat falsch?
Gib doch mal den Inhalt der Abfrage in einen String aus und lass Dir den Inhalt anzeigen bzw. veröffentliche diesen String hier.
Ich tippe auf einen Fehler in den Variablen in der Abfrage.

ub60


Cuci - Di 07.10.14 13:41

Ich glaube auch, dass es mit dem Format zu tun hat. Und ich würde auch gerne den vorgeschlagenen Test durchführen, nur wo? Ich vermute mal im MySQL-Server, mit dem ich aber noch auf dem Kriegsfuß stehe.

Die Date-Felder sind ja in MySQL im amerikanischen Format gespeichert. Wenn ich im Delphi das Programm ausführe werden sie im deutschen Format angezeigt. Kein Problem.

Ich habe diesen VIEW (Ansicht) in MySQL angelegt, hatte aber immer Fehlermeldungen im Zusammenhang mit den Parametern (Syntax-Error). Erst als ich die Doppelpunkte vor den Parametern durch '@' ersetzt hatte, wurde der VIEW angenommen, aber wenn ich den VIEW durchführe bekomme ich 0 Datensätze. Da beißt sich die Schlange in den Schwanz ...

Gruß Cuci


ene - Di 07.10.14 16:43

Was gibt dir das denn zurück?


SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
8:
9:
'SELECT ' +
  '* ' +
'FROM ' +
  'Vertrag V INNER JOIN Haeuser H ON V.Haus = H.Haus ' +
'WHERE ' +
  '(H.Haus = :Haus) ' +
  'AND (V.MietEnde BETWEEN '2000-01-01' AND '2014-10-07') ' +
'ORDER BY ' +
  'V.MietBeginn ';


Dann mach halt ein ShowMessage(sqlstring). Dann siehst du, was da drin steht.


Cuci - Sa 11.10.14 20:45

. . . ich habe die Abfrage im FireDAC-Monitor getestet, auch mit den Datumsangaben. Es gibt weder eine Fehlermeldung noch ein Resultat.


ene - Mo 13.10.14 06:16

Hast du denn schon mal andere Abfragen erstellt? Funktionieren die? Oder kann es sein, dass deine Verbindung nicht korrekt ist?