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 2 von 3     12 3      
Benutzerbild von Uwe Raabe
Uwe Raabe

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

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

  Alt 3. Aug 2022, 14:29
CAST() und CONVERT() lassen lediglich die generischen SIGNED und UNSIGNED Tyen zu, die zum selben Problem führen.
Wenn du das CAST bzw. CONVERT drin hast, sollten doch beide Datenbanken das gleiche Ergebnis liefern. Pass deine statischen Felder doch einfach auf SIGNED bzw. UNSIGNED an (TLargeIntField).
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.679 Beiträge
 
Delphi 2007 Enterprise
 
#12

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

  Alt 3. Aug 2022, 16:30
Genau das hilft leider nicht. Ich vermute, dass das DBMS so "intelligent" ist, dass es beim Cast auf diese generischen Typen die Länge des originalen Typens beibehält. Bei mir gibt meine MariaDB auf dem Entwicklungs-PC auch mit Cast einen Typen zurück, den mein Programm als Integer-Feld anlegen möchte. Die MySQL DB beim Kunden gibt, mit demselben Cast, allerdings ein LongInt zurück. Genau wie die ungecasteten Aufrufe von YEAR() usw.

Die Felder manuell im Feld-Editor als TLargeIntField anzulegen brachte zumindest, dass ich es jetzt beim Kunden laufen lassen kann. Aber testen kann ich damit nun nicht mehr.

Ich hatte auch nach einer Möglichkeit gesucht, um mir mal vom DBMS selbst anzeigen zu lassen, welche Typen es für die Spalten um Result-Set verwendet. Für Tabellen gibt es da gleich mehrere Wege, aber für eine Query scheinbar nichts. Damit hätte ich zumindest dann etwas rumspielen können. Hat mich irritiert, dass das scheinbar wohl ein Nischenproblem ist.
"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
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#13

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

  Alt 3. Aug 2022, 16:33
Alle meine Queries kommen ohne statische Felder und hängen genauso auch an Grids. Allerdings DevExpress.
Das AdvDBGrid (TMS) möchte als Datenquelle ein TDataSource. Eine Query kann ich da nicht direkt einhängen, und ohne die Feld-Deklarationen in der Query-Komponente, findet es auch keine Daten. Da ich DevExpress nicht habe, und für eine kostenlose Schnellschusslösung auch nicht anschaffen möchte, hilft mir das leider nicht weiter.
"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.007 Beiträge
 
Delphi 12 Athens
 
#14

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

  Alt 3. Aug 2022, 16:37
Ich vermute, dass das DBMS so "intelligent" ist, dass es beim Cast auf diese generischen Typen die Länge des originalen Typens beibehält.
Hast du es mal mit CONVERT versucht?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#15

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

  Alt 3. Aug 2022, 16:38
Wenn du für einen Kunden ein Anwendung entwickelst ist es sinnvoll hier auch das vom Kunden genutzten System in der Entwicklungsumgebung zu nutzen.
Gegen MariDB zu entwickeln obwohl der Kunde ein (älteres) MySQL hat halte ich für kein guten Ansatz.
Hier sind Probleme die nur beim Kunden auftreten vorprogrammiert.

Wir haben bei uns z.B. MySQL, MS SQL und Oracle in diversen Versionen laufen, um genau möglichst nahe beim Kundensystem zu sein.
Natürlich können wir nicht alles Sub-Versionen abbilden, aber ein "Aktueller Patch-Stand von Vx/y/z ist schon mal ein guter Kompromiss.

bei MySQL hatten wir auch mal den Fall das eine Version von MySQL die Feldtypen falsch zurück gemeldet hat.
D.h. unsere Anwendung konnte gar nicht mehr Funktionieren, da es die Typen bei Programmstart prüft.
mit dem nächsten Fix-Version von MySQL hatten sie diesen groben Fehler behoben.
Wenn dein Kunde natürlich eine solche Problematische Version hat wird es schwieriger.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#16

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

  Alt 3. Aug 2022, 16:43
Hast du es mal mit CONVERT versucht?
Jap, selbes Ergebnis leider.
"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
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#17

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

  Alt 3. Aug 2022, 16:48
Wenn du für einen Kunden ein Anwendung entwickelst ist es sinnvoll hier auch das vom Kunden genutzten System in der Entwicklungsumgebung zu nutzen.
Bislang hatte ich damit keine Probleme. Ich muss auch gestehen, dass ich nicht unbedingt scharf darauf bin MariaDB und MySQL usw. in jeweils ~5 Versionen zu installieren und pflegen, nur um alle paar Jahre mal ein Problem nicht zu haben Aber vom Prinzip her hast du natürlich Recht.
"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
43.136 Beiträge
 
Delphi 12 Athens
 
#18

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

  Alt 3. Aug 2022, 17:05
Zitat:
Installieren
Für nahezu alle Datenbanken gibt es fertige Docker-Container.

Die kann man sogar oftmals auf seinem NAS laufen lassen, falls man sowas besitzt und nicht alles auf dem PC haben will.



Alternatiuv kann man das DBMS auch in je einer VM installieren (auf PC, NAS, sonstwo), wenn man mit dem Zeugs nicht direkt seinem Entwicklungsrechner zumüllen möchte.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

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

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

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.007 Beiträge
 
Delphi 12 Athens
 
#20

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
Antwort Antwort
Seite 2 von 3     12 3      


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 01:32 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