Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

QR Code aufteilen

Begonnen von VBADummie, Juni 06, 2024, 19:01:41

⏪ vorheriges - nächstes ⏩

VBADummie

Hallo liebe Profis,


Ich habe ein sehr Großes Problem, je mehr ich versuche es zu lösen um so verwirrter und Dümmer komme ich mir vor.

ich habe zwei Tabellen und ein Formular mit einem Textfeld und ein Unter Formular mit drei Spalten NEO SMILE Leer.

in das Textfeld Scanne ich einen Multi QR-Code ein zum Beispiel:
 10709127|3A57719D8D||10709128|3A57709A2A||10709129|3A57709A33||10709130|3A57719DC3||10709131|3A57719D75||10709132|3A57719D54||10709133|3A57719DD6||10709134|3A57719DBA||10709135|3A57719D72||10709136|3A57719D57||10709137|3A57719D80||10709138|3A57719D7C||10709139|3A57719D97||10709140|3A57709A49||10709141|3A57719D6F||10709142|3A57719D69||10709143|3A57719DCA||10709144|3A57709A3A||10709145|3A57719D68||10709146|3A57719D77||

Diesen Text möchte ich mit der Split Funktion über eine Schaltfläche Aufteilen.es gelingt mir nicht den gesamten Code auf zu teilen, nach den ersten drei ist schluß. nach dem einlesen sollte der Code im Textfeld gelöscht werden und ein neuer wieder an die bestehende Tabelle angefügt werden.

ich füge mal ein Foto bei

Für eure Hilfe möchte ich mich schon jetzt bedanken.
eventuell ist meine Vorstellung auch gar nicht um zusetzten
Ich hoffe es ist alles verständlich für euch bin das erste mal in einem Forum habe auch lange überlegt ob ich den schritt wagen soll. aber ich komme einfach nicht weiter.

MzKlMu

Hallo,
mir ist nicht ganz klar, was Du aufteilen willst in welche Felder ?

Was ist denn das Trennzeichen?
Es fällt auf, dass es | und || als Trennung gibt.

Zitatein neuer wieder an die bestehende Tabelle angefügt werden.
Das verstehe ich auch nicht.

Gruß Klaus

andyfau

Die Splitfunktion liefert immer ein Array zurück, welches man dann über seine obere und untere Grenze auslesen und so einzelnen Variablen/Feldern zuordnen kann:

Public Sub QRaufteilen(QR As String)
 Dim Teilstring As String
 Dim i As Integer
 Dim QRarray() As String

   QRarray = Split(QR, "|")
   For i = LBound(QRarray, 1) To UBound(QRarray, 1) ' Index i wird von 1 bis zum Ende des Arrays duchgezählt
     Teilstring = QRarray(i)
     Debug.Print Teilstring  'Zeigt die Teilstrings der Reihe nach im Direktfenster
   Next
End Sub

Sub AufrufQRTeilen()
    QRaufteilen ("10709127|3A57719D8D||10709128|3A57709A2A||10709129|3A57709A33||10709130|3A57719DC3||10709131|3A57719D75||10709132|3A57719D54||10709133|3A57719DD6||10709134|3A57719DBA||10709135|3A57719D72||10709136|3A57719D57||10709137|3A57719D80||10709138|3A57719D7C||10709139|3A57719D97||10709140|3A57709A49||10709141|3A57719D6F||10709142|3A57719D69||10709143|3A57719DCA||10709144|3A57709A3A||10709145|3A57719D68||10709146|3A57719D77||")

End Sub
Beste Grüße
Andreas

VBADummie

Hallo MzKlMu
Danke für die schnelle Antwort.

das Trennzeichen ist | aufteilen möchte ich den QR code wie Beispiel.

Ich werde heute mal den Code von andyfau probieren.

natürlich vielen Dank an andyfau für den super Code werde ich gleich mal testen ob ich damit weiter komme.
Vielen Dank schon mal für die Erklärung

ebs17

#4
Private Sub cmdButton_Click()
    SplitQR Me.txtQRString
    Me.ufrmXY.Form.Requery     ' Tabelleninhalt ins Formular holen
    Me.txtQRString = Null
End Sub

Sub SplitQR(QRString As String)
    Dim sArrRecord() As String
    Dim rs As DAO.Recordset
    Dim i As Long
   
    Set rs = CurrentDb.OpenRecordset("SELECT VA_Nummer, NEO, SMILE FROM TableX WHERE False", dbOpenDynaset)
    sArrRecord = Split(QRString, "||")
    With rs
        For i = 0 To UBound(sArrRecord)
            If Len(sArrRecord(i)) = 0 Then Exit For
            .AddNew
            .Fields("VA_Nummer") = Me.txtVA_Nummer
            .Fields("NEO") = Split(sArrRecord(i), "|")(0)     ' evtl. CLng(Split(sArrRecord(i), "|")(0))
            .Fields("SMILE") = Split(sArrRecord(i), "|")(1)
            .Update
        Next
        .Close
    End With
End Sub
Mit freundlichem Glück Auf!

Eberhard

VBADummie

Hallo Eberhard habe deinen Code ergänzt mit Tabellennamen,
er läuft jetzt durch aber die einzelnen daten verschwinden ins nichts,
könntest du mir bitte noch mal helfen?

Private Sub cmdSplitt_Click()
    SplitQR Me.SCAN
    Me.Lager_Scan_Ufrm.Form.Requery   ' Tabelleninhalt ins Formular holen
    Me.SCAN = Null
End Sub

Sub SplitQR(SCAN As String)
    Dim sArrRecord() As String
    Dim rs As DAO.Recordset
    Dim i As Long
   
    Set rs = CurrentDb.OpenRecordset("SELECT VA_Nummer, NEO, SMILE FROM tblLager_Scan WHERE False", dbOpenDynaset)
    sArrRecord = Split(QRString, "||")
    With rs
        For i = 0 To UBound(sArrRecord)
            If Len(sArrRecord(i)) = 0 Then Exit For
            .AddNew
            .Fields("VA_Nummer") = Me.VA_Nummer
            .Fields("NEO") = Split(sArrRecord(i), "|")(0)     ' evtl. CLng(Split(sArrRecord(i), "|")(0))
            .Fields("SMILE") = Split(sArrRecord(i), "|")(1)
            .Update
        Next
        .Close
    End With
End Sub

So wie er jetzt ist läuft er ohne Fehler durch nur die Daten verschwinden im Nirvana

Danke schon mal im voraus

ebs17

#6
Zitatnur die Daten verschwinden im Nirvana
Heißt das Nirwana tblLager_Scan (aktualisierte Ansicht nach Anfügen)?

Daneben sollte man den verwendeten QRCode betrachten: Die Prüfung "If Len(sArrRecord(i)) = 0 Then Exit For" wurde eingeführt, weil der gezeigte Code mit einem "||" endet und somit das letzte Element von Split nichts auswertbares ergibt.
Wenn der QRCode nun aber mit einem doppelten Pipe beginnt, erfolgt so keine Tabelleneintragung.
Das hieße also: Mit anderen Ausgangsbedingungen müsste man Änderungen am Code vornehmen.
Mit freundlichem Glück Auf!

Eberhard

Beaker s.a.

Hallo,

Die Trennung mit "||" halte ich für falsch.
Für mich deutet die doppelte Pipe darauf hin, dass hier ein Feld
ohne Inhalt vorhanden ist, wie es bei einer importierten .csv auch
vorkommt.

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)

MzKlMu

#8
Hallo,
ZitatDie Trennung mit "||" halte ich für falsch.
Das denke ich auch. Sieht man auch im Bild in #1. Das 3. Feld wird als Leer bezeichnet.

Was natürlich für den Code keine Rolle spielt, es muss nur der Parameter von "||" in "|" geändert werden.
Gruß Klaus

VBADummie

ich bin euch sehr dankbar für eure Hilfe
ich kann euch gerne meine DB senden, der Ansatz von Eberhard ist schon richtig denke ich.
leider bin ich wirklich noch ein absoluter Dummie was vba betrifft.
ich habe im Anhang die DB als ZIP mal rein getan. danke euch allen für euer Interesse und Hilfe.
eventuell bin ich auch auf den komplett falschen weg?

MzKlMu

Hallo,

sollen nur die beiden Felder gefüllt werden, die im Formular zu sehen sind ?
Gruß Klaus

Beaker s.a.

Hallo,
So funzt es.
Das mit den doppelten Pipes ist richtig. Es wird einmal damit gesplittet und
anschliessend in der Schleife die einzelnen Felder des Arrays nochmal mit der
einfachen. Daraus ergeben sich mit dem gezeigten Beispielscan 20 DS mit
jeweils zwei Feldern mit der VA_Nummer aus dem Feld im Form.

Beim Split wurde der Parameter als "SCAN" übergeben, ausgewertet wurde aber
"QRString", der vom Himmel fiel, - geändert.

Auf "VA_Nummer" wurde ein eindeutigen Index gelegt, da funzt der Code nur für
den ersten DS dann kommt der Indexfehler. Diesen Index in einen Mehrfelder-
Index über alle Felder (3) geändert. Den Daten nach würde wohl auch ein Index
auf das Feld "NEO" reichen, - hab ich aber nicht getestet.

HFo und Feld VA_Nummer "entbunden" und Verknüpfung von/nach "NEO" gelöscht.
Die VA_Nummer kann somit manuell eingegeben werden. Oder man wandelt es in
ein Kombi um.

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)

VBADummie

Hallo Ekkehard, tausend Danke es funktioniert super.