Hallo zusammen,
ich habe zwei Probleme. INSERT INTO & Kreutabelle und deren Auswertung weiter verarbeiten. Würde das gerne nach und nach angehen , diese Probleme. Falls sich welche finden sollten, natürlich. ;D
Mein INSERT INTO überträgt die ID von einem Listenfeld nicht nicht in die Tabelle. Die anderen beide Werte schon, nur diese eine bleibt leer in der Tabelle(tblRefiningRohstoffe).
Private Sub cmdAdden_Click()
If IsNull(txtAnzahl) Then
MsgBox "Bitte geben Sie eine Anzahl ein!", , "Anzahl eingeben"
Cancel = True
Me.txtAnzahl.SetFocus
Exit Sub
End If
CurrentDb.Execute "INSERT INTO tblRefiningRohstoffe(CharakterID, RohstoffeID, Anzahl) " & _
"VALUES (" & Me.cboCharakter & ", '" & Me.Liste1001 & "', '" & Me.txtAnzahl & " ')"
End Sub
So sieht der SQL-Code beim Listenfeld aus.
SELECT ID, Name FROM tblRohstoffe WHERE KategorieID = 1;
Das Listenfeld heißt bei mir Liste1001.
Hallo,
welche Datentypen haben die IDs ?
Das Cancel = True ist völlig sinnfrei, was willst Du mit dem ?
Und warum verwendest Du nicht einfach ein gebundenes Formular ?
Dann braucht es fast keinen Code.
Das Cancel = True
Hast Recht, habs entfernt.
ID -> AutoWert
Rohstoffe -> Zahl (Long Integer)
Anzahl -> Zahl (Long Integer)
Ich möchte mich gerne mit VBA / SQL beschäftigen. Nur aus diesem Grund eigentlich, finde das sehr Interessant.
Ich habe im Listenfeld 2 Spalten und bei deren Anzeige habe ich mich für die Spalte "Namen" endschieden. Kann es sein , das er nicht weiß welchen Wert er davon übermitteln muss ?! Sprich: ID oder Name , wobei ich die ID brauche.
Hallo,
zudem...
...", " & Me!Liste1001.Column(0) & ", '" .....
(keine Hochkommata, da "RohstoffeID" vermutlich Datentyp Long entspricht.)
PS:
auch um Me!txtAnzahl die Hochkommata entfernen!
"Feldname "Anzahl" vermeiden, weil es sich dabei um ein reserviertes Wort handelt.
VALUES (" & Me!cboCharakter & ", " & Me!Liste1001.Column(0) & ", " & Me!txtAnzahl & ")"
Hallo,
Du hast ja nur Zahlen, also entfallen mal alle Hochkomma (').
Außerdem, für das Listenfeld sollst Du als gebundene Spalte die mit der ID verwenden, im Regelfall die 1. Spaltenzahl 2, Spaltenbreiten 0cm;5cm. Dadurch werden die Namen angezeigt, aber die ID zum Speichern verwendet.
ZitatIch möchte mich gerne mit VBA / SQL beschäftigen. Nur aus diesem Grund eigentlich, finde das sehr Interessant.
da gäbe es andere Betätigungsfelder, aber auf die Vorteile gebundener Formulare würde ich nicht verzichten, das kannst Du gar nicht so komfortabel programmieren, wie das serienmäßig automatisch funktioniert.
Nachtrag:
Ach ja, das mit der Anzahl hatte ich vergessen, bitte ändern (Menge oä).
Und was hat das mit einer Kreuztabelle zu tun ?
Habe jetzt die ganzen Einträge in die tblRefiningRohstoffe hinzugefügt. Beispiele:
ID CharakterID RohstoffeID Anzahl
1 2 28 5000
2 2 28 4600
3 2 5 3000
4 2 5 2000
Ich brauche von der Kreuztabelle die ganze Summe der einzlenen Erze. Das habe ich auch hinbekommen in der Kreuztabellenabfrage. Nur ich kann mit diesen Daten , leider nichts anfangen. Gibt es eine möglichkeit diese zubenutzen ? ich brauche diese Summen um weiter zumachen. Hab es auch hinbekommen das man diese Daten in eine Tabelle ablegt, aber ich bekomme es nicht hin, das diese sich jedesmal Aktualisiert in der Tabelle, wenn ich einen Neuen Rohstoff hinzufüge.
Hallo,
wozu brauchst Du eine extra Tabelle ?
Eine Abfrage sollte reichen, die ist stets automatisch aktuell.
Und von welchen Summen sprichst Du jetzt plötzlich ?
Und den Sinn einer Kreuztabellenabfrage erschließt sich mir auch nicht.
Meinst Du das mit den Summen so:
RohstoffeID Anzahl
28 9600
5 5000
Dazu brauchst Du keine Kreuztabellenabfrage.
Du solltest Dich bemühen, das immer auch ausführlich zu beschreiben, man muss ja die Zusammenhänge kennen, um Helfen zu können.
Mal sprichst Du von Erzen, dann von Rohstoffen, wo kommen jetzt Erze ins Spiel, ich sehen kein Feld mit einem solchen Bezug.
Das mit dem Feldnamen "Anzahl" war keine Empfehlung, das ist zwingend erforderlich.
Anzahl ist eine Access Funktion und liefert die Anzahl der Datensätze.
Wenn Du den Feldnamen Anzahl in einer Formel verwendest, wird nicht der Eintrag des Feldes verwendet, sondern die Anzahl der Datensätze.
Also unbedingt ändern.
Moin,
ZitatDas Cancel = True ist völlig sinnfrei, was willst Du mit dem ?
Und sollte, mit vorhandenem "Option Explicit", auch einen Fehler
(Variable nicht deklariert) werfen.
@shayol
Füge dies in
jeden Modulkopf ein. Geht auch (allerdings nicht
nachträglich) automatisch, wenn man im VBA-Editor unter Optionen
das Häkchen bei "Variablendeklaration erforderlich" setzt.
gruss ekkehard
Habe den Feldnamen und alles andere angepasst in Menge. Und wieso ich mich vertaen habe ist folgendes. Ich erstell eine DB , wo es um Erze & Ice geht. Sprich , die RohstoffID 28 = Erz und 5 = Ice. Tut mir leid, das es für missverständnissen gekommen sein sollte.
www.legion-der-finsternis.de/EveOnline.accdb (http://www.legion-der-finsternis.de/EveOnline.accdb)
ZitatMeinst Du das mit den Summen so:
RohstoffeID Anzahl
28 9600
5 5000
Genau das brauche ich als Endergebnis(Summe von einem Rohstoff) und dan muss diese Summe in eine Me!txtXXX dargestellt werden. Und diese Summe brauche ich für weitere Aktionen.
@Beaker s.a.
"Option Explicit" habe ich ebenfalls hinzugefügt. Danke dir ebenfalls.
Hallo,
das ist eine einfache gruppierte Abfrage.
SELECT RohstoffID,
Sum(Menge) AS SummevonMenge
FROM Datentabelle
GROUP BY RohstoffID
Diese Abfrage verwendest Du als Datenquelle für ein Formular.
Eine extra Tabelle braucht es da nicht.
PS:
Da ich nur Access2003 (MDB) habe, kann ich mir die obige DB nicht ansehen.