AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken MySQL versus MsSQL Syntax Group By

MySQL versus MsSQL Syntax Group By

Ein Thema von Ykcim · begonnen am 11. Mai 2021 · letzter Beitrag vom 14. Mai 2021
Antwort Antwort
Seite 2 von 3     12 3   
Delphi.Narium

Registriert seit: 27. Nov 2017
1.909 Beiträge
 
Delphi 7 Professional
 
#11

AW: MySQL versus MsSQL Syntax Group By

  Alt 12. Mai 2021, 17:44
Erstmal nur zur Fehlereingrenzung:
Delphi-Quellcode:
   Query.Open;
   Query.Last;
   Query.First;
Ändert sich was?

Nicht alle Datenbankkomponenten laden grundsätzlich alle Datensätze, sondern nur die ersten X. (z. B. Attribut FetchRow bei den Zeoskomponenten.)

Was gibt Dir Query.RecordCount aus?
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
760 Beiträge
 
Delphi 10.4 Sydney
 
#12

AW: MySQL versus MsSQL Syntax Group By

  Alt 12. Mai 2021, 18:12
Interessant!
Nach Query.open ist der RecordCount bei 50,
nach Query.Last ist der RecordCount bei 229...

Das wäre also gelöst. Vielen Dank!
Patrick
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
1.909 Beiträge
 
Delphi 7 Professional
 
#13

AW: MySQL versus MsSQL Syntax Group By

  Alt 12. Mai 2021, 18:30
Dieses Open-Last ist nur 'ne Krücke, die bestenfalls als suboptimal zu bezeichnen ist.

Gibt es bei Deiner Datenbankkomponenten ein Attribut, über das man sowas wie FetchRow, FirstRows, MaxRows o. ä. konfigurieren kann?

Das ist leider nicht bei allen Datenbankkomponenten einheitlich.

Bei ADO heißt es MaxRows, bei Zeos FetchRow, andernorts auch mal LoadLimit.

Schau bitte mal, ob Dir dashier weiterhilft: http://docwiki.embarcadero.com/RADSt...Rows_(FireDAC)

FetchOptions -> fmAll

Geändert von Delphi.Narium (12. Mai 2021 um 18:31 Uhr) Grund: Schreibfehler
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.797 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: MySQL versus MsSQL Syntax Group By

  Alt 12. Mai 2021, 18:36
Wenn du alle Datensätze direkt nach dem Öffnen brauchst (z.B. wegen des SaveToStream), dann musst du bei der Query in FetchOptions das AutoFetchAll aktivieren.

Ups: zu spät
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
760 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: MySQL versus MsSQL Syntax Group By

  Alt 12. Mai 2021, 18:49
Ich nutze die TFDQuery Komponente. Ich habe diese Einstellungen versucht, aber leider keinen Erfolg gehabt:
Delphi-Quellcode:
Query.FetchOptions.AutoFetchAll;
   Query.FetchOptions.RowsetSize:=-1;
Die EInstellung RowSetSize schein standardmäßig auf 50 zu stehen. Das würde ja passen...

Ich dachte, der Wert -1 oder 0 würde ihn auf unendlich stellen, aber dann bekomme ich nur einen Datensatz.
Ich habe den Wert jetzt auf 99999999 gestellt, damit sollte ich bei der Anwendung auf der sicheren Seite sein...

VIelen Dank
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.797 Beiträge
 
Delphi 10.4 Sydney
 
#16

AW: MySQL versus MsSQL Syntax Group By

  Alt 12. Mai 2021, 22:51
Versuch mal Query.FetchOptions.Mode := afAll vor dem Open.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
2.964 Beiträge
 
Delphi 2010 Enterprise
 
#17

AW: MySQL versus MsSQL Syntax Group By

  Alt 13. Mai 2021, 18:04
Ich muss mich an diese Denkweise gewöhnen. Eigentlich packe ich immer so wenig wie möglich in die Gruppierung, weil ich mir einbilde, dass die Performance dann besser ist...
Auch wenn das am Beispiel schon geklärt ist:
Wenn Du Dir die mySQL Denkweise abgewöhnst, dann bist Du genau richtig. Diesen Mist gibt es nur bei mySQL und er funktioniert nicht zuverlässig.
Unabhängig von MSSQL, selbst in mySQL würde ich alle Group By Abfragen auf "normal" umstellen, falls Du da noch Projekte laufen hast. Und die Datenbank so umkonfigurieren, dass sie diese schlampige Notation nicht mehr akzeptiert. Dann verhält sich mySQL wie richtige Datenbanken und versucht nicht schlau zu sein und falsch zu liegen. Das Schlimme ist ja, dass Du es ab ein paar Tausend Datensätzen nur mit einigem Aufwand nachvollziehen kannst, ob richtig oder falsch.

Vergiß die alte Denkweise einfach, falls es schneller sein sollte- was kaum nachvollziehbar wäre-, lohnt sich das Risiko überhaupt nicht.
Gruß, Jo
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
760 Beiträge
 
Delphi 10.4 Sydney
 
#18

AW: MySQL versus MsSQL Syntax Group By

  Alt 14. Mai 2021, 10:08
Zitat:
Versuch mal Query.FetchOptions.Mode := afAll vor dem Open.
Das war erfolgreich. Vielen Dank!

Zitat:
Wenn Du Dir die mySQL Denkweise abgewöhnst, dann bist Du genau richtig.
Harte Worte für jemanden, der seit 15 Jahren sich MySQL selbst angeeignet hat
Aber ich bin ja lernfähig

Vielen Dank!
Patrick
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
2.964 Beiträge
 
Delphi 2010 Enterprise
 
#19

AW: MySQL versus MsSQL Syntax Group By

  Alt 14. Mai 2021, 22:12
Zitat:
Wenn Du Dir die mySQL Denkweise abgewöhnst, dann bist Du genau richtig.
Harte Worte für jemanden, der seit 15 Jahren sich MySQL selbst angeeignet hat
Aber ich bin ja lernfähig

Es ist wirklich ein gut gemeinter Hinweis. Schau Dir ein x-beliebiges mySQL Forum an (Ich glaube bei Maria ist es analog, da weiß ich nicht, wann dieses Verhalten- also ab welcher Version- per Default umgestellt wurde auf "normal" bzw. richtig.) Es wimmelt von Group By Fragen. Und das wäre ja noch okay, wenn es um das reine Verständnis geht.
Die Leute, die nicht fragen und die Fehler in ihrer Datenausgabe nicht bemerken, sind am Ende die Dummen. Es ist mir ein Rätsel, warum so ein Produkt existiert (und so verbreitet ist), das willkürlich falsche Daten ausgibt.

Und nur so:
Die Faustregel für eine korrekte Group By Syntax (die nebenbei schon immer auch bei mySQL funktioniert):
> alle Spalten der Ausgabe müssen entweder gruppiert oder aggregiert werden,
ist doch recht übersichtlich.
Gruß, Jo
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
793 Beiträge
 
Delphi 2009 Professional
 
#20

AW: MySQL versus MsSQL Syntax Group By

  Alt 14. Mai 2021, 22:55
Ja, es ist etwas unlogisch, dass wenn du ein JOIN-Kriterium ein PK ist und trotzdem man alle Felder aggregieren oder gruppieren muss. Aber es ist konsequent bzgl. der Regel dass jedes Feld aggregiert oder gruppiert ist.

Übrigens:
- Bei MSSQL fasst man Bezeichner in eckigen Klammern ein oder notfalls in doppelten Anführungszeichen. Einfache Anführungszeichen sind für Strings.
- IIF ist übersichtlicher als ein CASE-WHEN-Konstrukt mit zwei Situationen.
- COALESCE mit zwei Parametern ist zwar dasselbe wie ISNULL, aber ISNULL ist leichter verständlich. /Edit: Und performanter.
- Und bitte benutze Views, statt so viele Zeilen SQL im Quelltext zu haben.
- Und zu QuotedStr kein Kommentar.
Na ja gut, egal. Namen der Tabellen und Felder sind der Horror. Dachte erst Paradox, aber das kannte immerhin längere Feldnamen.

In "normalem" SQL wäre das wohl so erforderlich:
SQL-Code:
SELECT
[...]
         CASE WHEN b.in__vrrd < a.minstock then 'Mindestmenge unterschrittenELSE 'END AS 'Kommentar',
[...]
GROUP BY
[...]
  'Kommentar'  -- da weiß ich jetzt garnicht, ob MS-SQL das so kann
Nein, kann es nicht. Felder, die du nur aus Aggregaten oder Gruppen generierst, gruppierst du nicht. Sonst gruppierst du dasselbe Feld (bzw. hier zwei Felder) zweimal, das ergibt keinen Sinn.
Janni
2005 PE, 2009 PA, XE2 PA

Geändert von Redeemer (14. Mai 2021 um 23:23 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 21:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf