AGB  ·  Datenschutz  ·  Impressum  







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

MySQL versus MsSQL Syntax Group By

Ein Thema von Ykcim · begonnen am 11. Mai 2021 · letzter Beitrag vom 14. Mai 2021
Antwort Antwort
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
856 Beiträge
 
Delphi 12 Athens
 
#1

AW: MySQL versus MsSQL Syntax Group By

  Alt 12. Mai 2021, 15:59
Aktuell verzweifle ich gerade. Eigentlich eine Sache von ein paar Minuten und sitze jetzt schon Stunden da dran...

Delphi-Quellcode:
SELECT    a.zynrefkl AS 'Artikelnummer',
         a.afg_oms1 AS 'Artikelbezeichnung 1',
         b.in__vrrd AS 'Bestand',
         a.per__chk AS 'Abgreifmenge',
         a.minstock AS 'Mindestbestand',
         CASE WHEN b.in__vrrd<a.minstock then 'Mindestmenge unterschrittenELSE 'END AS 'Bestandskommentar',
         'AS Kommentar,
         COALESCE(SUM(c.b_aantal),0) AS 'Rückstand',
         COALESCE(SUM(d.aant_uit), 0) AS 'Gesamtverbrauch'
FROM afgart__ a
LEFT JOIN afgant__ b ON b.afg__ref = a.afg__ref
LEFT JOIN bstlyn__ c ON c.afg__ref = a.afg__ref AND c.vrzvouur<GETDATE() AND c.vrz__tst = '1'
LEFT JOIN hisafg__ d ON d.afg__ref = a.afg__ref AND MONTH(d.datum___) = MONTH(GETDATE())
WHERE a.kla__rpn = 'LBBW'
AND    a.zynrefkl <> ''
GROUP BY   a.zynrefkl,
         a.afg_oms1,
         b.in__vrrd,
         a.per__chk,
         a.minstock
Das oben gepostete SQL-Statement funktioniert jetzt, wenn ich es mit HeidSQL ausführe. Ich bekomme 229 Datensätze angezeigt.

Wenn ich das Statement jetzt aber über meine Software absetze, bekomme ich nur 50 Datensätze raus...

Delphi-Quellcode:
procedure TDB_Modul.Get_WeeklyStock(AStream: TStream);
var Logic: TLogic;
      Query: TFDQuery;
begin
   Logic := TLogic.create;
   Logic.Set_Query(Query, MSConnect);
   Try
      Query.SQL.Add('SELECT a.zynrefkl AS ' + QuotedStr('Artikelnummer') + ', '+
                             'a.afg_oms1 AS ' + QuotedStr('Artikelbezeichnung 1') + ', '+
                             'b.in__vrrd AS ' + QuotedStr('Bestand') + ', '+
                             'a.per__chk AS ' + QuotedStr('Abgreifmenge') + ', '+
                             'a.minstock AS ' + QuotedStr('Mindestbestand') + ', '+
                             'CASE WHEN b.in__vrrd<a.minstock then '+QuotedStr('Mindestmenge_unterschritten') + ' ELSE '+QuotedStr('') + ' END AS '+QuotedStr('Bestandskommentar') + ', '+
                             QuotedStr('') + ' AS '+ QuotedStr('Kommentar') + ', '+
                             'COALESCE(SUM(c.b_aantal),0) AS ' + QuotedStr('Rückstand') + ', '+
                             'COALESCE(SUM(d.aant_uit), 0) AS ' + QuotedStr('Gesamtverbrauch') + ' '+
                    'FROM afgart__ a '+
                    'LEFT JOIN afgant__ b ON b.afg__ref = a.afg__ref '+
                    'LEFT JOIN bstlyn__ c ON c.afg__ref = a.afg__ref AND c.vrzvouur<GETDATE() AND c.vrz__tst = '+QuotedStr('1') + ' '+
                    'LEFT JOIN hisafg__ d ON d.afg__ref = a.afg__ref AND MONTH(d.datum___) = MONTH(GETDATE()) '+
                    'WHERE a.kla__rpn = ' + QuotedStr('LBBW') + ' '+
                    'AND a.zynrefkl <> ' + QuotedStr('') + ' '+
                    'GROUP BY a.zynrefkl, a.afg_oms1, b.in__vrrd, a.per__chk, a.minstock ');
      Query.Open;
      if Assigned(AStream) then begin
         Query.SaveToStream(AStream, sfJSON);
      end;
   Finally
      Query.Free;
      Logic.Free;
   End;
end;
Es sind die ersten 50 Datensätze. Aber ich habe doch gar keine Limitierung eingestellt. Sieht jemand, woran das liegen könnte?

Vielen Dank
Patrick
Patrick
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#2

AW: MySQL versus MsSQL Syntax Group By

  Alt 12. Mai 2021, 16: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
856 Beiträge
 
Delphi 12 Athens
 
#3

AW: MySQL versus MsSQL Syntax Group By

  Alt 12. Mai 2021, 17: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
2.558 Beiträge
 
Delphi 7 Professional
 
#4

AW: MySQL versus MsSQL Syntax Group By

  Alt 12. Mai 2021, 17: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 17:31 Uhr) Grund: Schreibfehler
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: MySQL versus MsSQL Syntax Group By

  Alt 12. Mai 2021, 17: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
856 Beiträge
 
Delphi 12 Athens
 
#6

AW: MySQL versus MsSQL Syntax Group By

  Alt 12. Mai 2021, 17: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
11.643 Beiträge
 
Delphi 12 Athens
 
#7

AW: MySQL versus MsSQL Syntax Group By

  Alt 12. Mai 2021, 21: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
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 21:25 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