AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

XE5 - MySQL und FireDAC

Ein Thema von hberdel · begonnen am 4. Sep 2014 · letzter Beitrag vom 3. Okt 2014
Antwort Antwort
hberdel

Registriert seit: 1. Feb 2003
Ort: Darmstadt, Provence, Südspanien
31 Beiträge
 
Delphi XE5 Professional
 
#1

XE5 - MySQL und FireDAC

  Alt 4. Sep 2014, 14:19
Datenbank: MySQL • Version: 5.0.11 • Zugriff über: FireDAC
Hallo, ich bin dabei, die Datenbank von BDE auf MySQL umzustellen. Nun habe ich einige Datumsfelder in den Tabellen. Wegen der amerikanischen Darstellung des Datums als (date) in MySQL habe ich diese Felder als String (varchar(10)) angelegt. Für die Darstellung im DBGrid sollen die Datumswerte auf das europäische Datumsformat umgestellt werden. Um eine Sortierung zu ermöglichen habe ich ein VIEW erzeugt, das aber nicht funktioniert.

VIEW `vert_sort_mietbeginn_1` AS select `vertrag`.`MietBeginn` AS `mb_string`,
str_to_date('00.00.0000',get_format(DATE, 'EUR')) AS `mb_date` from `vertrag`

Das Ergebnis ist eine nach String (also falsche) Sortierung in der Spalte mb_string. Die Spalte mb_date enthält überall den Wert 0000-00-00.

Eine andere Variante geht auch nicht:

VIEW `ver_sort_mietbeginn` AS select `vertrag`.`MietBeginn` AS `mb_string`,
str_to_date(`vertrag`.`MietBeginn`,_utf8'%d,%m,%Y' ) AS `mb_date` from `vertrag`

Das Ergebnis ist eine nach String (also falsche) Sortierung in der Spalte mb_string, wie oben. Die Spalte mb_date enthält überall den Wert NULL.

Vielleicht sieht jemand eine Lösung, danke voraus.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: XE5 - MySQL und FireDAC

  Alt 4. Sep 2014, 14:26
Zunächst wäre es schön, wenn du den SQL-Code auch in SQL-Code-Tags packen könntest.
SQL-Code:
VIEW `vert_sort_mietbeginn_1` AS
  select
    `vertrag`.`MietBeginn` AS `mb_string`,
    str_to_date('00.00.0000',get_format(DATE, 'EUR')) AS `mb_date`
  from `vertrag`
dann wird das ungemein lesbarer

Warum nimmst du nicht einfach den Typ date ? Wie MySQL das dann intern abspeichert kann dir doch sowas von egal sein.
Und weil wir ja alle immer nur bei Abfragen mit Parametern arbeiten, ist das bei der Abfrage dann auch egal:
Delphi-Quellcode:
Query.SQL.Text = 'SELECT * FROM foo WHERE mb_date = :ein_datum';
Query.ParamByName( 'ein_datum' ).Value := EncodeDate( 2014, 01, 01 ); // Einfach ein Datum übergeben
Query.Open;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 4. Sep 2014 um 14:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#3

AW: XE5 - MySQL und FireDAC

  Alt 4. Sep 2014, 14:28
Nur sollte man bei ParamByName auch den Namen des Parameters angeben und nicht den des Feldes
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: XE5 - MySQL und FireDAC

  Alt 4. Sep 2014, 14:29
Nur sollte man bei ParamByName auch den Namen des Parameters angeben und nicht den des Feldes
Hab ich doch sofort nach deinem Hinweis geändert
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
hberdel

Registriert seit: 1. Feb 2003
Ort: Darmstadt, Provence, Südspanien
31 Beiträge
 
Delphi XE5 Professional
 
#5

AW: XE5 - MySQL und FireDAC

  Alt 8. Sep 2014, 18:47
Hallo, zuerst mal vielen Dank für Eure Hilfe. Ich weiß jetzt wieder, wo der Knackpunkt war: Wie kriege ich meine Datumswerte im amerikanischen Datumsformat in MySQL importiert, wo doch meine Daten in "deutscher" Form vorliegen. Deshalb hatte ich wohl den Weg des geringsten Widerstandes genommen und in MySQL den String-Typ für das Datum genommen . . . was dann hinterher wieder seine Tücken zeigte.

Nun will ich Euch nicht vorenthalten, welchen genialen Einfall ich hatte. Vor dem Export der Daten aus der BDE habe ich das Datumsformat meines PC auf JJJJ-mm-dd geändert und den Datentyp im MySQL auf "date" geändert - und alles war ratz-fatz erledigt. Die größte Überraschung war dann, dass im Delphi die Datumswerte wieder wie ganz selbstverständlich im gewohnten Format angezeigt werden ... und die Sortierung funktioniert auch problemlos.

Merci

Harald
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: XE5 - MySQL und FireDAC

  Alt 8. Sep 2014, 19:18
Das ist keine Überraschung, sondern genau das was wir versucht haben dir zu erklären

Und wenn du in der alten Datenbank auch ein Feld vom Typ Datum hattest, dann ist die Übertragung absolut kein Problem, wenn man Abfragen mit Parametern nutzt. Das ist nicht nur sicherer, sondern auch erheblich schneller bei der Übertragung.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 8. Sep 2014 um 19:20 Uhr)
  Mit Zitat antworten Zitat
hberdel

Registriert seit: 1. Feb 2003
Ort: Darmstadt, Provence, Südspanien
31 Beiträge
 
Delphi XE5 Professional
 
#7

AW: XE5 - MySQL und FireDAC

  Alt 29. Sep 2014, 17:00
Folgendes Problem mit der SQL-Syntax aus dem 'alten Delphi mit BDE':

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


wird von MySQL angemeckert ab dem 'bold-Teil'. Ich kann überhaupt keine entsprechende Beschreibung für die Verwendung von Parametern in der SQL-Referenz finden.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: XE5 - MySQL und FireDAC

  Alt 29. Sep 2014, 17:13
es liegt nicht am Paarmeter sondern daran, dass der Feldname Haus nicht eindeutig ist
SQL-Code:
SELECT * FROM Vertrag V, Haeuser H
WHERE (V.Haus = H.Haus)
AND (H.Haus = :Haus)
AND (Mietende BETWEEN :MpLfdA AND :MpLfdE)
ORDER BY V.MietBeginn
Markus Kinzler
  Mit Zitat antworten Zitat
hberdel

Registriert seit: 1. Feb 2003
Ort: Darmstadt, Provence, Südspanien
31 Beiträge
 
Delphi XE5 Professional
 
#9

AW: XE5 - MySQL und FireDAC

  Alt 3. Okt 2014, 21:06
Schön, dass ihr mir geholfen habt. Ich musste allerdings die Parameter-Doppelpunkte durch '@' ersetzen. MySQL hat jetzt also den VIEW akzeptiert. Wenn ich allerdings das Programm in der Entwicklungsumgebung ausführe bekomme ich eine Fehlermeldung von FireDAC, dass der Datentyp des Parameters 'Haus' nicht bekannt sei. Wo kann ich den ergänzen? Im Delphi habe ich den Datentyp schon eingestellt. Wo finde ich TFDParam.DataType?
Miniaturansicht angehängter Grafiken
fehlermeldung-param.jpg  
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:12 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