Neuigkeiten:

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

Mobiles Hauptmenü

INSERT INTO & Kreuztabelle

Begonnen von Shayol, April 16, 2016, 13:14:47

⏪ vorheriges - nächstes ⏩

Shayol

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.

MzKlMu

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.
Gruß Klaus

Shayol

#2
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.

DF6GL

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 & ")"



Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MzKlMu

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 ?

Gruß Klaus

Shayol

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.

MzKlMu

#6
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.


Gruß Klaus

Beaker s.a.

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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Shayol

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

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.

MzKlMu

#9
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.
Gruß Klaus