![]() |
AW: Problem mit Group by in Access
Datamodule1.ADOQueryRollenJoinLagerplatzTabelle.SQ L.Add('SELECT Materialrollen.[Mat-Nr], Materialrollen.Rollennummer, Materialrollen.DatumAb, Rollenlager.Lagerplatz, Rollenlager.Rollennummer FROM Materialrollen ');
Datamodule1.ADOQueryRollenJoinLagerplatzTabelle.SQ L.Add('LEFT JOIN Rollenlager ON Rollenlager.Rollennummer = Materialrollen.Rollennummer where ((Materialrollen.[Mat-Nr] = ' + EditMaterialeingangMatNr.Text + ') and (Materialrollen.DatumAb is NULL))'); |
AW: Problem mit Group by in Access
Das SQL ist dashier ohne den Delphiquelltext:
SQL-Code:
Die Zahl der Spalten hinter dem Select ist mehr als nur die Spalte Lagerplatz, von daher kann das nicht das SQL sein, welches Dir das Ergebnis
SELECT Materialrollen.[Mat-Nr], Materialrollen.Rollennummer, Materialrollen.DatumAb, Rollenlager.Lagerplatz, Rollenlager.Rollennummer FROM Materialrollen
LEFT JOIN Rollenlager ON Rollenlager.Rollennummer = Materialrollen.Rollennummer where Materialrollen.[Mat-Nr] = :MatNr and Materialrollen.DatumAb is NULL Zitat:
Wenn Du im Ergebnis nur die Spalte Lagerplatz haben möchtest, dann selektiere im SQL bitte auch nur die Spalte Lagerplatz. Hast Du dashier schonmal probiert?
SQL-Code:
Oder in Delphi, zum Direktkopieren:
SELECT Rollenlager.Lagerplatz FROM Materialrollen
LEFT JOIN Rollenlager ON Rollenlager.Rollennummer = Materialrollen.Rollennummer where (Materialrollen.[Mat-Nr] = :MatNr and Materialrollen.DatumAb is NULL) group by Rollenlager.Lagerplatz
Delphi-Quellcode:
Datamodule1.ADOQueryRollenJoinLagerplatzTabelle.SQL.Add('SELECT Rollenlager.Lagerplatz FROM Materialrollen LEFT JOIN Rollenlager ON Rollenlager.Rollennummer = Materialrollen.Rollennummer where ((Materialrollen.[Mat-Nr] = ' + EditMaterialeingangMatNr.Text + ') and (Materialrollen.DatumAb is NULL)) group by Rollenlager.Lagerplatz');
Lesbarer als ein reines SQL? Nein, natürlich nicht Verständlicher als ein reines SQL? Nein natürlich nicht. Vorab auf der Datenbank testbares SQL? Nein natürlich nicht. Auch wenn der Quelltext dadruch länger wird und es etwas mehr Schreibarbeit wird:
Delphi-Quellcode:
Vielleicht mal so in der Art probieren?
Datamodule1.ADOQueryRollenJoinLagerplatzTabelle.SQL.Clear;
Datamodule1.ADOQueryRollenJoinLagerplatzTabelle.SQL.Add('SELECT Rollenlager.Lagerplatz') Datamodule1.ADOQueryRollenJoinLagerplatzTabelle.SQL.Add('FROM Materialrollen'); Datamodule1.ADOQueryRollenJoinLagerplatzTabelle.SQL.Add('LEFT JOIN Rollenlager'); Datamodule1.ADOQueryRollenJoinLagerplatzTabelle.SQL.Add('ON Rollenlager.Rollennummer = Materialrollen.Rollennummer'); Datamodule1.ADOQueryRollenJoinLagerplatzTabelle.SQL.Add('where Materialrollen.[Mat-Nr] = :MatNr'); Datamodule1.ADOQueryRollenJoinLagerplatzTabelle.SQL.Add('and Materialrollen.DatumAb is NULL'); Datamodule1.ADOQueryRollenJoinLagerplatzTabelle.SQL.Add('group by Rollenlager.Lagerplatz'); Datamodule1.ADOQueryRollenJoinLagerplatzTabelle.Parameters.ParamByName('MatNr').Value := EditMaterialeingangMatNr.Text; |
AW: Problem mit Group by in Access
Hallo Delphi.Narium,
habe hier einen 27"-Monitor. Die meisten SQL-Abfragen passen in eine Zeile. Für mich viel übersichtliger als mehrere Zeilen übereinander. Geschmacksache. Gebe das Ergebnis in einem DBGrid aus, deshalb nur der Lagerplatz. Wenn ich den Select-Vorschlag benutze, dann bekomme ich eine Fehlermeldung, dass "Mat-Nr" fehlt. Luckner |
AW: Problem mit Group by in Access
Der Vorschlag enthält einen Parameter, der muss auch befüllt werden.
Daher in meinem Delphiquelltrextvorschlag auch die Zeile:
Delphi-Quellcode:
Datamodule1.ADOQueryRollenJoinLagerplatzTabelle.Parameters.ParamByName('MatNr').Value := EditMaterialeingangMatNr.Text;
Diese Fehlermeldung bekommst Du garantiert nicht: Zitat:
Derweil, die von Dir gepostete Fehlerbeschreibung lässt nicht erkennen, ob nun die Spalte Mat-Nr fehlt oder der Parameter MatNr. Zugegeben, Accessfehlermeldungen sind nicht immer zwingend aufschlussreich, sondern eher vage. Aber wenn Du uns jeweils einfach die Originalfehlermeldung mitteilst, ist das deutlich einfacher. |
AW: Problem mit Group by in Access
ok, mache ich.
|
AW: Problem mit Group by in Access
Zitat:
Also mit der Angabe aus ![]() Es würde tatsächlich ein Distinct ohne group by reichen. @Lucker: Egal wie groß der Monitor ist und welche Gewohnheiten Du hast. Die Mehrheit hat andere. Wenn Du es den Helfern also erleichtern möchtest, ist eine übersichtliche Formatierung besonders entgegenkommend. Vermutlich würde so eine simple Aufteilung eines Statements in mehrere Zeilen für Select Clause From Clause / Join Where Clause [Group by ..] [Order ..] auch Deinem eigenen Verständnis dienen. P.S.: Es gibt nette IDE, die SQL Text auf Knopfdruck formatieren, es gibt sogar einige, die Copy/Paste von/nach Delphi anbieten. Ist beides nicht zur Hand, tut's auch ein online Formatierer. |
AW: Problem mit Group by in Access
Zitat:
In Delphi kann ich in einer Quelltextzeile auch mehrere Befehle hintereinanderschreiben, beim 27" wohl sogar ziemlich viele. Aber ob das der Les- und Wartbarkeit des Quelltextes dienlich ist, wage ich zu bezweifeln. So wie man in Delphi logisch zusammgehörige Quelltextzeilen zusammenfasst, kann man das auch in SQL machen, auch wenn die Syntax das nicht zwingend erfordert oder man 50 Meter Quelltext in eine Zeile schreiben kann ;-) Logische Strukturen im Quelltext (und dazu gehören auch SQL-Statements) haben für mich was mit Softwarequalität zu tuen. "Kilometerlange" Einzeiler gehören für mich nicht dazu. |
AW: Problem mit Group by in Access
Hallo...8-)
Zitat:
Grund: ![]() Zitat:
Zitat:
|
AW: Problem mit Group by in Access
Zitat:
Ein beliebiger Filter (where clause) auf irgendwelche Felder wirkt sich aber nicht auf Funktionsweise oder Syntax für Group by aus. |
AW: Problem mit Group by in Access
Zitat:
Delphi-Quellcode:
Gruß
Datamodule1.ADOQueryRollenJoinLagerplatzTabelle.SQL.Text:='SELECT Rollenlager.Lagerplatz'+
'FROM Materialrollen '+ 'LEFT JOIN Rollenlager '+ 'ON Rollenlager.Rollennummer = Materialrollen.Rollennummer '+ 'where Materialrollen.[Mat-Nr] = :MatNr ' + 'and Materialrollen.DatumAb is NULL '+ 'group by Rollenlager.Lagerplatz'); Datamodule1.ADOQueryRollenJoinLagerplatzTabelle.Parameters.ParamByName('MatNr').Value := EditMaterialeingangMatNr.Text; K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:43 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