Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Shayol am April 16, 2016, 13:14:47

Titel: INSERT INTO & Kreuztabelle
Beitrag von: Shayol am April 16, 2016, 13:14:47
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.
Titel: Re: INSERT INTO & Kreuztabelle
Beitrag von: MzKlMu am April 16, 2016, 13:28:40
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.
Titel: Re: INSERT INTO & Kreuztabelle
Beitrag von: Shayol am April 16, 2016, 13:51:37
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.
Titel: Re: INSERT INTO & Kreuztabelle
Beitrag von: DF6GL am April 16, 2016, 14:02:50
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 & ")"



Titel: Re: INSERT INTO & Kreuztabelle
Beitrag von: MzKlMu am April 16, 2016, 14:08:07
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 ?

Titel: Re: INSERT INTO & Kreuztabelle
Beitrag von: Shayol am April 16, 2016, 14:29:42
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.
Titel: Re: INSERT INTO & Kreuztabelle
Beitrag von: MzKlMu am April 16, 2016, 15:18:31
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.


Titel: Re: INSERT INTO & Kreuztabelle
Beitrag von: Beaker s.a. am April 16, 2016, 15:35:55
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
Titel: Re: INSERT INTO & Kreuztabelle
Beitrag von: Shayol am April 16, 2016, 16:23:35
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.
Titel: Re: INSERT INTO & Kreuztabelle
Beitrag von: MzKlMu am April 16, 2016, 16:39:58
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.