AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MySQL Funktion (z.B. YEAR()) gibt je nach DB unterschiedliche Typen zurück
Thema durchsuchen
Ansicht
Themen-Optionen

MySQL Funktion (z.B. YEAR()) gibt je nach DB unterschiedliche Typen zurück

Ein Thema von Medium · begonnen am 3. Aug 2022 · letzter Beitrag vom 7. Aug 2022
Antwort Antwort
Seite 1 von 2  1 2      
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#1

AW: MySQL Funktion (z.B. YEAR()) gibt je nach DB unterschiedliche Typen zurück

  Alt 3. Aug 2022, 13:07
Das ist leider keine Option, wenn ich das Ergebnis dann mit einer TDataSource in einen TAdvDBGrid darstellen will. Nen Grid von Hand zu befüllen würde ich gern vermeiden, und wozu hab ich denn sonst so schmucke Komponenten gekauft =)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.387 Beiträge
 
Delphi 12 Athens
 
#2

AW: MySQL Funktion (z.B. YEAR()) gibt je nach DB unterschiedliche Typen zurück

  Alt 3. Aug 2022, 13:23
Du kannst doch im Grid die Spalten schon erstellen und falls die im DtaSet dafür nötig waren, dann aus dem Dataset wieder rauslöschen und automatisch erstellen lassen.

Neuerdings können viele Query-Komponenten nun auch Beides (z.B. FireDAC), also ein paar Felder im Designer oder vorm Öffnen per Code dran und den Rest beim Open automatisch. (früher ging nur entweder oder)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 3. Aug 2022 um 13:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.663 Beiträge
 
Delphi 12 Athens
 
#3

AW: MySQL Funktion (z.B. YEAR()) gibt je nach DB unterschiedliche Typen zurück

  Alt 3. Aug 2022, 13:26
Mit FireDAC könnte man auch das Datentyp-Problem mit einem entsprechenden Mapping lösen. Ob, und wenn ja, wie das mit TUniQuery geht, kann ich leider nicht sagen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: MySQL Funktion (z.B. YEAR()) gibt je nach DB unterschiedliche Typen zurück

  Alt 3. Aug 2022, 13:57
Mein Fehler: Habe vergessen zu erwähnen, dass das unter D2007 passieren muss. Das sollte eine ganz einfache aus der Hüfte geschosssene Funktion für ein bestehendes Programm werden, mit der man sich Verbräuche summiert pro Tag anzeigen lassen kann. Habe ich unentgeldlich zugesagt, weil "ist ja bloß 2 Zeilen SQL, und nen Grid auf ein Fenster schmeißen". Bis ich es dann beim Kunden ausgeführt habe war das auch so...

Also: FireDAC schön und gut, kann ich hier aber nicht mal so eben austauschen ohne ein paar Mannwochen Arbeit. Ich habe bei Uni nichts gefunden, was irgendwie den Namen "Mapping" trägt, und habe auch nicht wirklich eine Vorstellung davon was das genau macht in diesem Zusammenhang.

Das Alter der IDE und Komponenten führt fürchte ich auch dazu, dass Himi's 2. Idee hier nicht eingesetzt werden kann.
Die erste verstehe ich nicht ganz. Die Spalten im Grid an sich sind nicht das Problem, sondern die Fields die ich im Field-Editor der Query anlege. Da diese mitsamt ihres Typen fest im Deklarationsteil landen, verstehe ich gerade nicht wie ich da zur Laufzeit etwas löschen/hinzufügen können soll.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.663 Beiträge
 
Delphi 12 Athens
 
#5

AW: MySQL Funktion (z.B. YEAR()) gibt je nach DB unterschiedliche Typen zurück

  Alt 3. Aug 2022, 14:04
Seit ein paar Versionen erlaubt ein TDataSet einen Mischbetrieb mit statischen und dynamischen Feldern. Das würde aber das Typ-Problem vermutlich gar nicht lösen.

Allerdings unterstützt auch UniDAC so ein Mapping: https://docs.devart.com/unidac/data_type_mapping.htm - zumindest in der aktuellen Version.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#6

AW: MySQL Funktion (z.B. YEAR()) gibt je nach DB unterschiedliche Typen zurück

  Alt 3. Aug 2022, 14:20
Sieht interessant aus, aber die D2007 Komponenten haben die entsprechenden Methoden und Eigenschaften offenbar leider noch nicht

Kann ich das nicht auch evtl. auf Seite der DB oder Abfrage lösen? Irgendwie muss man doch einem Result-Set konkrete Typen aufdrücken können
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.387 Beiträge
 
Delphi 12 Athens
 
#7

AW: MySQL Funktion (z.B. YEAR()) gibt je nach DB unterschiedliche Typen zurück

  Alt 3. Aug 2022, 14:27
Es gibt irgendwo in der Komponente eine/meherere Tabelle/Listen, wo Übersetzungen drin stehen.

DatenbankTypen -> TDataType/TFieldType -> TFieldClassIrgendwas


Und dann kann man eben teilweise im Select einen CAST machen.



Bei uns gibt es noch was bissl Krankes, wo unsere abgeleiteten Querys (TPgQuery) nochmal ein SELECT * FROM &tablenbame im BeforeOpen machen, um von der Datenbank die Typen abzufragen und die fehlenden Felder noch schnell zu erstellen. (Fields durchgehen und was noch nicht existiert als FieldDef ins eigentliche Query kopieren)
Einige Felder erstellen wir manuell, z.B. wo Einstellungen gemacht und Events angehängt werden. Der Rest kommt "automatisch" aus der DB, so wie es dort grade aussieht.
Nach dem Open kann man ja leider keine TFieldXyz anhängen.

Jetzt, im aktuellen Delphi, wo es eventuell nun auch gemischt beim Erstellen geht (selber + automatisch), wäre es nicht mehr zwingend nötig das vor dem Open zu machen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 3. Aug 2022 um 14:44 Uhr)
  Mit Zitat antworten Zitat
HeZa

Registriert seit: 4. Nov 2004
Ort: Dortmund
182 Beiträge
 
Delphi 10 Seattle Professional
 
#8

AW: MySQL Funktion (z.B. YEAR()) gibt je nach DB unterschiedliche Typen zurück

  Alt 4. Aug 2022, 17:50
Hallo Uwe,

Seit ein paar Versionen erlaubt ein TDataSet einen Mischbetrieb mit statischen und dynamischen Feldern.
davon hatte ich noch nicht gehört. Hast du (oder jemand anderes) einen Tipp, wo ich mehr Informationen dazu finden kann?

Danke.

Ciao HeZa
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.663 Beiträge
 
Delphi 12 Athens
 
#9

AW: MySQL Funktion (z.B. YEAR()) gibt je nach DB unterschiedliche Typen zurück

  Alt 4. Aug 2022, 20:55
Das verbirgt sich im TDataSet im protected FieldOptions, das in abgeleiteten Klassen dann veröffentlicht wird.

Mit AutoCreateMode kann man festlegen, wie mit statischen und dynamischen Feldern umgegangen werden soll:
  • acExclusive arbeitet so wie gehabt. Wenn keine statischen Felder da sind werden alle Felder dynamisch erzeugt.
  • acCombineComputed lässt dabei dann noch (statische) berechnete Felder zu.
  • acCombineAlways mischt die statischen Felder mit den (noch nicht vorhandenen) dynamischen Felder.

PositionMode steuert die Reihenfolge der Felder.

UpdatePersistent passt einige der (statischen) Feldeigenschaften an die Informationen der Datenbank an. Das betrifft z.B. auch die Länge von Stringfeldern - ein häufiges Problem in früheren Versionen und beliebtes Argument gegen statische Felder.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#10

AW: MySQL Funktion (z.B. YEAR()) gibt je nach DB unterschiedliche Typen zurück

  Alt 5. Aug 2022, 09:42
Hatte ich bereits beantwortet. Die Methode DataTypeMap() gibt es dort auch nicht.
Ich habe bei Uni nichts gefunden, was irgendwie den Namen "Mapping" trägt, und habe auch nicht wirklich eine Vorstellung davon was das genau macht in diesem Zusammenhang.
Wenn ich nicht irre, sollte ich die letzte Version haben die ich für D2007 mit meiner Lizenz abrufen konnte. (Zudem würde ich nicht riskieren, für einen Zweizeiler potenziell in einem mehrere Mannmonate schweren Projekt nach unerwarteten Folgeeffekten eines Updates jagen zu müssen. Der ganze Thread hier ist schon in WEIT mehr Arbeit ausgeartet, als ich dafür je investieren wollte.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium ( 5. Aug 2022 um 09:46 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:06 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