Office: (Office 2007) Daten abfragen, Seriennummer hoch zählen, in Formular schreiben

Helfe beim Thema Daten abfragen, Seriennummer hoch zählen, in Formular schreiben in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo an alle, ich bin ein etwas unerfahrener VBA Programmierer und soll für die Arbeit ein Tool programmieren. Ziel des Tools: Der Mitarbeiter gibt... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von ChristianB, 25. Juli 2015.

  1. Daten abfragen, Seriennummer hoch zählen, in Formular schreiben


    Hallo an alle,

    ich bin ein etwas unerfahrener VBA Programmierer und soll für die Arbeit ein Tool programmieren.

    Ziel des Tools:
    Der Mitarbeiter gibt eine Auftragsnummer bestehend aus Belegjahr, Belegnummer und Positionsnummer ein, dann fragt das Tool die Daten ab und schmeißt eine Übersicht (eine Art Datenblatt) aus.

    Meine Probleme:
    Ich frage die Grunddaten mit einer einfachen Abfrage ab und schreibe Sie in die Tabelle "tbl_1Auftragsdaten" von da aus sollen weitere Daten aus der Tabelle "Hepa-Referenz" abgefragt werden und ebenfalls in die Tabelle "tbl_1Auftragsdaten" angefügt werden. ("tbl_1Auftragsdaten" besteht nur aus einer Zeile mit einer einmaligen Artikelnummer)

    Wenn alle Daten abgefragt sind, dann soll der Mitarbeiter eine 6-stellige Seriennummer eingeben und das System zählt automatisch hoch (bspw.: 3 Stück, eingegebene Nummer 123456, dann müssen 3 identische Datensätzen mit einer jeweils anderen Seriennummer erstellt werden. Datensatz 1: Serial 123456, Datensatz 2: Serial 123457, Datensatz 3: Serial 123458.

    Option Compare Database
    Option Explicit

    Private Sub Befehl0_Click()
    'on error goto fehler
    'DoCmd.SetWarnings False

    Dim rec As DAO.Recordset
    Dim zielrec As DAO.Recordset
    Dim control As Integer
    Dim sqlstr As String
    Dim sqlziel As String
    Dim serial As Long
    Dim stk As Integer
    Dim i As Integer
    Dim sqlinsert As String
    Dim zielseriennummer As Long

    DoCmd.OpenQuery "1_Auftragsdaten"
    '(Damit frage ich die Grunddaten ab und schreibe sie in tbl_1Auftragsdaten)

    sqlstr = "Select count (*) as Anzahl FROM tbl_1Auftragsdaten where Artikelnummer = " & "'" & Me.Artikelnummer & "'"
    '(Fehler beim kompilieren)
    sqlziel = "SELECT tbl_1Auftragsdaten.Artikelnummer, Hepa-Referenz.Rahmen, Hepa-Referenz.Temperatur FROM Hepa-Referenz INNER JOIN tbl_1Auftragsdaten ON tbl_1Auftragsdaten.Artikelnummer = Hepa-Referenz.Artikelnummer where tbl_1Auftragsdaten.Artikelnummer=" & _
    "'" & Me.Artikelnummer & "'"
    '(Fehler beim kompilieren)

    Set rec = CurrentDb.OpenRecordset(sqlstr)
    Set zielrec = CurrentDb.OpenRecordset(sqlziel)
    control = rec("Anzahl")

    stk = Me.Stück

    serial = InputBox("Bitte sechstellig Seriennummer eingeben")
    If IsNumeric(serial) = False Or Len(CStr(serial)) 6 Then MsgBox ("Seriennummer nicht sechstellig, bitte erneut starten")

    DoCmd.RunSQL ("delete from seriennummer")
    zielseriennummer = CLng(serial)
    For i = 1 To stk
    sqlinsert = "insert into Seriennummer values(" & zielseriennummer & "," & "'" & zielrec("Artikelnummer") & "'" & "," & _
    zielrec("Temperatur") & "," & "'" & zielrec("Rahmen") & "')"
    DoCmd.RunSQL (sqlinsert)
    zielseriennummer = zielseriennummer + 1
    Next
    '(Das hat beim letzten Versuch gut geklappt. *cool.gif* )

    'DoCmd.SetWarnings True
    'fehler:
    'Exit Sub
    End Sub

    Theorie:
    Er fragt mit der "Docmd-Abfrage" die Grunddaten ab
    fügt dann die fehlenden Felder aus der Hepa-Referenz an
    dann erstellt er anhand der Stückzahl die aufsteigende Seriennummer
    und hat dann (theoretisch) alle nötigen Daten.

    Ich bin etwas verzweifelt und hoffe, dass man mein Problem versteht :-)

    Vielen Dank im Voraus für die Hilfe und Unterstützung

    :)
     
    ChristianB, 25. Juli 2015
    #1
  2. Code:
    Hepa-Referenz ... der Bindestrich in der Bezeichnung wird als MINUS interpretiert, damit stimmt dann die ganze Syntax der Anweisung nicht mehr.
    => Sonderzeichen und Leerzeichen in Bezeichnungen vermeiden oder zumindest mit eckigen Klammern maskieren.
     
    ebs17, 27. Juli 2015
    #2
  3. Guten Morgen!

    Das habe ich geändert und mir für die Zukunft gespeichert.
    Leider kommen die Fehler beim kompilieren immer noch...
    Beim = '" & Me.Artikelnummer & "'" bringt er den Fehler.

    sqlstr = "Select count (*) as Anzahl FROM tbl1Auftragsdaten where Artikelnummer = " & "'" & Me.Artikelnummer & "'"

    Woran könnte das denn liegen?
     
    ChristianB, 2. August 2015
    #3
  4. Daten abfragen, Seriennummer hoch zählen, in Formular schreiben

    Ist Artikelnummer vom Datentyp Text- oder Zahl?
    Wenn Zahl, dann ohne Hochkomma:
    Code:
    tbl1Auftragsdaten vs. tbl_1Auftragsdaten?
    Ansonsten mal debuggen, was zur Laufzeit in Me.Artikelnummer für ein Wert vorhanden ist.
    maike
     
    maikek, 2. August 2015
    #4
  5. Hallo,
    heißt die Tabelle wirklich tbl1Auftragsdaten?
    Vielleicht so...
    Code:
     
    Kyron9000, 2. August 2015
    #5
  6. Hallo Maike, hallo Kyron,

    also die Tabelle heißt wirklich "tbl1Auftragsdaten" (kommt daher, damit jeder sofort erkennen kann welche Tabellen nacheinander erstellt werden, deswegen tbl1...

    Die Artikelnummer enthält Zahlen und Buchstaben.

    Ich habe in einem anderen Thread gefunden, dass man anstatt dem Me.Artikelnummer lieber Me![Artikelnummer] nehmen soll. Das bringt mich dann zum Laufzeitfehler 2465 Access kann das angesprochene Feld Artikelnummer nicht finden...

    Code:
    Ich glaube die Programmierung ist (scheiße) einfach, nur mach ich das ledier viel zu selten um eine Routine zu entwickeln... Ich bin der Abfrage "zusammen-klicker" ;-)

    Vielen vielen Dank für die bisher geleiste Hilfe.
     
    ChristianB, 2. August 2015
    #6
  7. ...na dann schau dir mal das Feld an was es für einen Namen hat!
    Eventuell hast cboArtikelnummer, oder txtArtikelnummer oder... vergeben.
    Das mit Me! muss nicht sein ich verwende immer Me. da hast eine Intellisense dabei.
    das... Code:
    & kannst auch so... Code:
    erstellen, aber das wäre auch egal *wink.gif*
     
    Kyron9000, 2. August 2015
    #7
  8. Daten abfragen, Seriennummer hoch zählen, in Formular schreiben

    Es ging mir nicht um die 1, sondern dass du den Namen bislang immer mit einem Unterstrich vor der 1 geschrieben hast.
    Dann prüfe, ob das Formularfeld auch wirklich Artikelnummer heißt (und nicht vielleicht Text127 oder so).
    maike
     
    maikek, 2. August 2015
    #8
  9. Der Unterstrich wurde entfernt, da ebs17 schrieb, dass ein "-" Probleme geben kann. Also habe ich alle "-" und "_" entfernt (außer bei der docmd. Abfrage).

    Das Feld heißt Artikelnummer, da durch die Abfrage eine Tabelle erstellt wurde, in dem unter anderem das Feld/Spalte "Artikelnummer" erstellt wird. Die Tabelle wird NICHT über ein Formular gesteuert/wiedergegeben.
    Entwurfsansicht der Tabelle sagt ebenfalls Text.
    Feldgröße 31; Eingabe erforderlich Nein; Leere Zeichenfolge ja; Indiziert Nein, Unicode Kompression Nein, IME-Modus Keine Kontrolle, IME Satzmodus Keine, Textausrichtung Standard.
     
    ChristianB, 3. August 2015
    #9
  10. ...für mich ist es immer noch nicht klar ob du jetzt das Formular im Entwurf geöffnet,
    das Feld Artikelnummer angesehen und nicht nur in der Tabelle überprüft hast.

    Du kannst mal einen Debug.Print Me.Artikelnummer vor dem Fehler setzen und überprüfen,
    ob da wirklich ein Wert dabei ist.
     
    Kyron9000, 3. August 2015
    #10
  11. ahhhh jetzt...
    ha ha ha ha.... ich bin/war wohl blond... sehr blond, also am blondesten.

    Ich wollte mit me.Artikelnummer die Artikelnummer aus einer Tabelle ansprechen, die keine Verknüpfung zum Formular hatte... Dementsprechend konnte Access keine Artikelnummer finden...
    Ich dachte, dass Access so klug ist, dass wenn ich den folgenden Code eingebe Access die Artikelnummer aus der Tabelle als me.Artikelnummer setzt.
    Code:
    Ich habe jetzt auf meinem Formular ein Feld Artikelnummer eingegeben und zack funktioniert es... zumindest bis stk = Anzahl :-D weil da wieder der Fehler ist, dass Anzahl nur in der Tabelle ist und nicht mit dem Formular verknüpft ist....

    Wie setze ich am einfachsten für Stück das Feld aus einer Tabelle.
    Bspw.: stk = tbl1Auftragsdaten.Anzahl (das geht so natürlich nicht...)

    Ich fühle mich sehr unklug...
     
    ChristianB, 3. August 2015
    #11
  12. ...kannst mir erklären, für was der Code überhaupt gut ist?
    control = rec("Anzahl")

    Eine Anzahl kannst auch über DCount ermitteln, aber du verwendest ja control gar nicht mehr...?!
    Wo sollen diese Stück zu ermitteln sein? Eingabe in einem Feld... das anscheinend nicht existiert!

    eventuell meinst stk = control? Aber, ob da Integer reichen wird? Long wäre besser.

    Was möchtest denn überhaupt erstellen?

    OK, hast eh am Anfang geschrieben, muss ich nur durchlesen *biggrin.gif*
     
    Kyron9000, 3. August 2015
    #12
  13. Daten abfragen, Seriennummer hoch zählen, in Formular schreiben

    First of all: der Code kam aus einem sehr ähnlich Projekt und wurde umgeschrieben und ich habe eigentlich alles unnütze gelöscht, außer control...


    Also in dem oberen Teil bis stk = ... frage ich die Eckdaten, bzw. Auftragsdaten ab. Daraus ergibt sich eine Stückzahl des Auftrags.

    Nehmen wir folgendes an:
    1 Auftrag mit 5 Stück
    der erste Artikel soll die Seriennummer 123456 bekommen, der zweite dann 123457, der dritte 123458, also immer +1, damit jeder Nummer eine eigene Seriennummer bekommt. So mit werden Tippfehler, etc umgegangen, wenn der Mitarbeiter für 5 Stück jeweils einzeln die Seriennummer eingeben muss.

    Wenn ich alle Daten habe, dann soll ein Formular erstellt werden, welches alle Daten enthält. Die Erstellung des Formulars dürfte kein Problem sein, weil ich alles in Tabellen gespeichert habe und diese "nur" reinziehen muss ;-)
     
    ChristianB, 3. August 2015
    #13
  14. ...also, ich habe mir den Code jetzt mal komplett angesehen und habe ihn etwas umprogrammiert...
    Ob er so passt ist natürlich fraglich, kann es nicht testen, ist also nur mal zum
    testen, nimmst halt einen anderen Button dafür her *Smilie...
    Code:
    Ich habe angenommen, das deine beiden Recordsets gleich in der Anzahl der DS sind...
    wenn nicht muss man das anpassen. Deine Abfragen kenne ich natürlich nicht.
    Was löscht du da eigentlich für eine Tabelle? Hoffe nicht die, von der die Daten her sind *tongue.gif*

    Alte Krankheit, .MoveNext vergessen, wäre eine Endlosschleife gewesen.
    Ausserdem verstehe ich den Code irgendwie nicht, da würde ja der Select-Teil fehlen!
    Das hat schon mal funktioniert?
    Code:
     
    Kyron9000, 3. August 2015
    #14
  15. Also der Code läuft bis .MoveLast durch :-) dann kommt "kein aktueller Datensatz "
    Ich möchte die Tabelle Seriennummer löschen, bevor ich die Datensätze jeweils abhängig der Stückzahl des Auftrags anfüge. Bspw. Wenn im ersten Auftrag 3 Stück waren, sind 3 Datensätze in der Tabelle Seriennummer und diese sollen natürlich gelöscht werden, damit die Seriennummern des aktuellen Auftrags nur in dieser Tabelle sind. *wink.gif*

    Ja das hatte schon mal funktioniert aber das war alles etwas anders *mrcool
     
    ChristianB, 3. August 2015
    #15
Thema:

Daten abfragen, Seriennummer hoch zählen, in Formular schreiben

Die Seite wird geladen...
  1. Daten abfragen, Seriennummer hoch zählen, in Formular schreiben - Similar Threads - Daten abfragen Seriennummer

  2. Import Daten aus Access Abfrage klappt nicht

    in Microsoft Excel Hilfe
    Import Daten aus Access Abfrage klappt nicht: Moin, ich habe ein Problem. Ich habe eine Datenbank in Access mit diversen Tabellen und Abfragen. Jetzt habe ich eine neue Abfrage erstellt und muß das Ergebnis täglich in eine Exceldatei...
  3. Excel lädt die Daten nicht sobald Abfragekriterium für ein Textfeld erstellt wird

    in Microsoft Access Hilfe
    Excel lädt die Daten nicht sobald Abfragekriterium für ein Textfeld erstellt wird: Hey Ihr Lieben, ich habe eine Abfrage erstellt und das Kriterium - Wie "*gelb*" - angegeben. Sprich: Mir werden alle Datensätze angezeigt die irgendwo das Wort "gelb" in sich haben. Nun...
  4. Bestimmte Daten zwischen innerhalb eines Datumsbereichs einer Tabelle Anfügen

    in Microsoft Access Hilfe
    Bestimmte Daten zwischen innerhalb eines Datumsbereichs einer Tabelle Anfügen: Hallo, ich habe per Google und Foren SuFu leider nichts passendes finden können, wage aber zu bezweifeln, dass Access da an seine Grenzen kommt, da es eigentlich recht banal ist. Ich habe eine...
  5. Datensatz abfragen und Daten ergänzen

    in Microsoft Access Hilfe
    Datensatz abfragen und Daten ergänzen: Hallo, ich habe leider keine Ahnung mehr von Access. Habe es zwar vor 10 Jahren gelernt, doch leider ist mein wissen weg. Ich habe folgendes Problem : Ich würde gerne eine Auftragsverwaltung...
  6. Daten zurückschreiben über Verknüpfte Abfrage

    in Microsoft Access Hilfe
    Daten zurückschreiben über Verknüpfte Abfrage: Hallo zusammen, habe folgende Problem: Hatte eine DB mit einer Tabelle. Dazu ein Formular und eine Abfrage. Über die Abfrage habe ich die Tabelle über Datensatzquelle mit meinem Formular...
  7. Sortierung von Daten via Abfrage?

    in Microsoft Access Hilfe
    Sortierung von Daten via Abfrage?: Hallo zusammen! Ich bin Access-Neuling und habe ein Problem mit der Sortierung von Daten bzw. bin mir nicht sicher, ob ich das von mir gewünschte Ergebnis überhaupt via Abfrage erreichen...
  8. Abfrage von historischen Daten aus SharePoint-Liste mit Power Query

    in Microsoft Excel Hilfe
    Abfrage von historischen Daten aus SharePoint-Liste mit Power Query: Guten Tag, um den Status verschiedener Projekte zu verfolgen nutzen wir eine SharePoint-Liste. Um verschiedene statistische Auswertungen durchführen rufe ich die Liste in Excel mittels...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden