Veteran
Beiträge: 137
|
Es gibt quasi 3 Tabellen: Futter, wird gelagert und Lager
In der Tabelle Futter steht die Futterart und die FutterID.
In der Tabelle wird gelagert steht die FutterID als Fremdschlüssel sowie der Futterbestand (und die LagerID als Fremdschlüssel).
In der Tabelle Lager steht die LagerID und der Lagerort.
Dann musst Du immer berücksichtigen, dass die FutterId in [wird gelagert] nur zusammen mit der LagerId einen Datensatz eindeutig identifiziert. Dass muss Du bei allen SQL-Abfragen immer berücksichtigen.
str_SQL = "Select [wird gelagert].[Futterbestand] "
str_SQL = str_SQL & "From [wird gelagert], [Futter] "
str_SQL = str_SQL & "Where [Futter].[Futterart] ='" & Me.Auswahl_Futterart.Value & "';" 'Die Textbox heißt Auswahl_Futterart
Hier fehlt eine JOIN-Bedingung, die die beiden Tabellen [wird gelagert] und [Futter] miteinander verbindet. Das SQL sollte am Ende so aussehen:
[CODE]
SELECT [wird gelagert].[Futterbestand]
FROM [wird gelagert]
INNER JOIN [Futter]
ON [wird gelagert].FutterId = [Futter].FutterId
WHERE [Futter].[Futterart] = ...
[/CODE]
Wenn Du eine Combobox im dem Formular verwendest und dort die FutterId auswählen lässt, kannst Du Dir die Tabelle [Futter] in der Abfrage komplett sparen.
Weiter unten in dem Update-Statement musst Du eine String-Verkenntung vornhehmen
[CODE]
....
str_SQL = str_SQL & "SET [wird gelagert].[Futterbestand] = " & int_neuerBestand
...
dbs.Execute str_SQL , dbFailOnError
[/CODE]
Bei dbs.Execute besser immer dbFailOnError angben, damit man beim Fehlschlagen des SQL auch eine ordentliche Fehlermeldung bekommt. ----- https://codekabinett.com/ |