Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MySQL Funktion (z.B. YEAR()) gibt je nach DB unterschiedliche Typen zurück (https://www.delphipraxis.net/211146-mysql-funktion-z-b-year-gibt-je-nach-db-unterschiedliche-typen-zurueck.html)

Uwe Raabe 3. Aug 2022 14:29

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

Zitat von Medium (Beitrag 1509690)
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).

Medium 3. Aug 2022 16:30

AW: MySQL Funktion (z.B. YEAR()) gibt je nach DB unterschiedliche Typen zurück
 
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.

Medium 3. Aug 2022 16:33

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

Zitat von Sinspin (Beitrag 1509703)
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.

Uwe Raabe 3. Aug 2022 16:37

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

Zitat von Medium (Beitrag 1509711)
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?

Bernhard Geyer 3. Aug 2022 16:38

AW: MySQL Funktion (z.B. YEAR()) gibt je nach DB unterschiedliche Typen zurück
 
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.

Medium 3. Aug 2022 16:43

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

Zitat von Uwe Raabe (Beitrag 1509713)
Hast du es mal mit CONVERT versucht?

Jap, selbes Ergebnis leider.

Medium 3. Aug 2022 16:48

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

Zitat von Bernhard Geyer (Beitrag 1509714)
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.

himitsu 3. Aug 2022 17:05

AW: MySQL Funktion (z.B. YEAR()) gibt je nach DB unterschiedliche Typen zurück
 
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.

HeZa 4. Aug 2022 17:50

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

Zitat:

Zitat von Uwe Raabe (Beitrag 1509701)
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

Uwe Raabe 4. Aug 2022 20:55

AW: MySQL Funktion (z.B. YEAR()) gibt je nach DB unterschiedliche Typen zurück
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:32 Uhr.
Seite 2 von 3     12 3      

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