Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Kreuztabelle mit TempVars als Kriterium

Begonnen von Paule, Juni 15, 2016, 08:22:53

⏪ vorheriges - nächstes ⏩

Paule

Hallo,

ich möchte mithilfe einer Kreuztabelle mir den Stand des Lagerhauses anzeigen lassen.
Dazu verwende ich die Produkte/Teile gemäß meiner WH_Items - Tabelle und die Warehouses gemäß der WH_WarehouseT-Tabelle.
Fallls Waren von A nach B bewegt werden, wird in die Tabelle WH_Movings die entsprechenden Daten gespeichert.

Um jetzt zu meinem Warehouse-Status zu kommen verwende ich zwei Abfragen:

1. Eine Abfrage, die mir alle Zu- und Abgänge aus jedem Warehouse anzeigt mit folgendem Code (Name: WH_InOut2Q):
SELECT WH_Warehouses.WarehouseName, WH_ItemsT.ItemName, WH_MovingsT.Amount
FROM WH_ItemsT INNER JOIN (WH_Warehouses INNER JOIN WH_MovingsT ON WH_Warehouses.WarehouseID = WH_MovingsT.Destination) ON WH_ItemsT.ItemID = WH_MovingsT.ItemID;
UNION ALL SELECT WH_Warehouses.WarehouseName, WH_ItemsT.ItemName, -[WH_MovingsT].[Amount] AS Amount
FROM WH_ItemsT INNER JOIN (WH_Warehouses INNER JOIN WH_MovingsT ON WH_Warehouses.WarehouseID = WH_MovingsT.Departure) ON WH_ItemsT.ItemID = WH_MovingsT.ItemID;


2. Aus dieser Abfrage erstelle ich schlussendlich die Kreuzabfrage.
Diese hat folgenden SQL Code:
TRANSFORM Sum(WH_InOut2Q.Amount) AS SummevonAmount
SELECT WH_InOut2Q.ItemName
FROM WH_InOut2Q
GROUP BY WH_InOut2Q.ItemName
ORDER BY WH_InOut2Q.ItemName DESC
PIVOT WH_InOut2Q.WarehouseName;


Nun kommen natürlich regelmäßig neue Lagerhäuser dazu. Deswegen wird die Tabelle irgendwann ziemlich unübersichtlich. Ich wollte daher über ein Formular, wo man ein Warehouse angeben kann, welches als TempVar gespeichert wird, dass der Bericht mir dann nur die Anzahl der Produkte/Teile für eben jenes Warehouse angezeigt wird.

Daher habe ich in der ersten Abfrage folgenden Code noch eingefügt:
SELECT WH_Warehouses.WarehouseName, WH_ItemsT.ItemName, WH_MovingsT.Amount
FROM WH_ItemsT INNER JOIN (WH_Warehouses INNER JOIN WH_MovingsT ON WH_Warehouses.WarehouseID = WH_MovingsT.Destination) ON WH_ItemsT.ItemID = WH_MovingsT.ItemID Where WH_Warehouses.WarehouseName Like [TempVar]![WarehouseStatus];
UNION ALL SELECT WH_Warehouses.WarehouseName, WH_ItemsT.ItemName, -[WH_MovingsT].[Amount] AS Amount
FROM WH_ItemsT INNER JOIN (WH_Warehouses INNER JOIN WH_MovingsT ON WH_Warehouses.WarehouseID = WH_MovingsT.Departure) ON WH_ItemsT.ItemID = WH_MovingsT.ItemID Where WH_Warehouses.WarehouseName Like [TempVar]![WarehouseStatus];


In dieser ersten Abfrage zeigt er mir dann auch entsprechend nur alle Ein- und Ausgänge des Warehouse an, welches ich als TempVar im Auswahl-Formular ausgewählt habe.

Allerdings funktioniert dann die Kreuzabfrage nicht mehr. Als Meldung gibt er mir dann immer aus:
"Das Microsoft-Access-Datenbankmodul erkennt [TempVar]![WarehouseStatus] nicht als gültigen Feldnamen oder Ausdruck.

In der ersten Abfrage funktioniert aber eben dies ohne Probleme.

Was kann ich da unternehmen? Wisst ihr Rat?

Vielen Dank und viele Grüße,
Marcus


Paule

Danke! Funktioniert!

Ich würde nun gerne wie vorher auch schon einen Bericht von der Kreuzabfrage erstellen.

Allerdings kann dann als vorhandenes Feld, welches ich im Bericht hinzufügen kann, dann immer nur das aktuell ausgewählte Warehouse ausgewählt werden.

Sobald ich dann ein anderes Warehouse auswähle, funktioniert zwar die Abfrage reibungslos, aber der Bericht nicht.

Heißt, ich müsste die Warehouse-Auswahl dynamisieren, damit mir dann das Warehouse angezeigt wird, welches =[TempVar].[WarehouseStatus] entspricht.

Meine Google-Suche hat dazu nichts ergeben, auch wenn ich zugegebenerweise nicht so recht weiß, wonach ich genau suchen soll.

MaggieMay

Hallo,

bei Auswahl eines einzelnen Warehouse dürfte sich eine Kreuztabellenabfrage zur
Darstellung des Abfrageergebnisses wohl erübrigen - meinst du nicht auch?
Freundliche Grüße
MaggieMay

Paule

Das habe ich gedacht und ausprobiert.
Es kommt dann aber immer wieder eine Fehlermeldung
"Laufzeitfehler 3070 - Das Microsoft Access-Datenbankmodul "" nicht als gültigen  Feldnamen oder Ausdruck".

Wenn ich mir die Entwurfsansicht des Berichts anzeigen lasse, so zeigt er mir als Spalte immer nur ein Warehouse an. Als vorhandenes Feld ist dann das Warehouse, welches ich als TempVar ausgewählt habe verfügbar. Wenn ich dieses anstelle des alten Warehouses in den Bericht ziehe, funktioniert es. Aber die Spalte passt sich eben nicht nach TempVar-Eingabe entsprechend an.

MaggieMay

Wie gesagt, nur die Kreuztabellenabfrage macht einen dynamischen Bericht erforderlich.
Wenn aber immer nur ein Warehouse ausgewählt wird, könnte diese Spalte eine feste
Überschrift (und einen festen Namen) bekommen.

Das könnte dann so aussehen:
SELECT WH_InOut2Q.WarehouseName, WH_InOut2Q.ItemName, Sum(WH_InOut2Q.Amount) AS SummevonAmount
FROM WH_InOut2Q
GROUP BY WH_InOut2Q.WarehouseName, WH_InOut2Q.ItemName
Freundliche Grüße
MaggieMay

Paule

Ah ja...jetzt hab ich verstanden... Sorry... :(
Alles klar!