Gegevens splitsen

Status
Niet open voor verdere reacties.

pcprutser

Gebruiker
Lid geworden
6 mrt 2010
Berichten
6
Aangezien ik biljetten invoer op www.eurobilltracker.org, hou ik deze ook graag zelf bij, nu doe ik dat altijd al in excel, maar wil nu een stapje verder gaan zeg maar.

Inmiddels heb ik een database gemaakt met 3 tabellen:
-Land (herkomst van land herleiden)
-Bedrag (voor het keuze menu in het invulformulier, en ter voorkoming van redundantie)
-Biljetten (waar alle biljetten in worden genoteerd)

Op de achterkant van elk eurobiljet staat een code van 1 letter gevolgd door 11 cijfers. Door die letter kan je de herkomst van het biljet herleiden. Nu is het zo dat ik deze heb opgesplitst in 2 kolommen, 1 voor de letter (die nu te kiezen is in het invulformulier) en 1 voor de cijfers.
Alleen is het natuurlijk netter om deze gegevens in 1 kolom te hebben staan, alleen heb ik dan geen idee of en hoe ik dan de herkomst kan herleiden.

Het herleiden van het land staat op wikipedia verder uitgelegt: HIER

Ook staat daar hoe je kan 'controleren' of het biljet echt is (in elk geval aan de hand van de code achterop het biljet) ook dit kan ik momenteel in excel, alleen weet ik niet hoe ik die formule kan toepassen in access.

Iemand ideeën?
 
Kun je een Excelbestand posten waarin de procedure staat? Dan kunnen we zien wat en hoe het is te vertalen naar Access. Op basis van wat je nu hebt verteld is dat heel lastig.
 
Als ik het goed begrijp, werkt het als volgt: je evalueert alle losse cijfers in de biljectcode, die je bij elkaar optelt. Daar tel je vervolgens de waarde van het Land bij op, en daar komt dan een getal uit. Dit is een getal van 3 cijfers, die vervolgens ook weer succesievelijk bij elkaar worden opgeteld. En de som daarvan moet altijd 9 zijn. Is dat correct?
 
dat klopt helemaal ;)

en ik heb dat filmpje eens zitten bekijken, en dat is met access 2003, en ik gebruik access 2007, toch een behoorlijk verschil, heb ook met 2003 leren omgaan, en moet behoorlijk omschakelen in 2007, maar net als word en excel begint het al te wennen :thumb:
 
Maar mijn voorbeeldje moet je toch kunnen openen... En nee, 2007 WENT NOOIT.............
 

Bijlagen

ik kan het voorbeeld inderdaad openen, en het doet wat het moet doen, alleen zou ik van de 9 een 'ja' maken, maargoed dat is niet zo moeilijk in te stellen.

Wat ik echter wel moeilijk vind (en nog steeds niet gelukt is:shocked:) is om jou voorbeeld te implementeren in mijn database.
Daarom heb ik mijn database meegepost, in de hoop dat jullie mij op weg kunnen helpen.
 

Bijlagen

Wat lukt er niet?
 
ik heb geen idee hoe ik het werkend moet krijgen in mijn database, natuurlijk zal ik een aantal verwijzingen moeten veranderen. Maar ik heb geen idee welke. Ik heb wel vaker een database gemaakt, maar nog nooit VB erin gebruikt.
En voor mijn gevoel mis ik ergens een knop: 'activeer nu' ofso..
 
Er hoeft niks geactiveerd worden, maar je moet waarschijnlijk nog wel een extra handeling verrichten. Het deel dat de berekening uitvoert zit namelijk niet op het formulier, maar in een Module. Als je op Modules klikt, zie je een module met de naam <Eurocheck>. Hierop staat de code die de berekening uitvoert. Als je die kopieert naar je eigen db, dan moet het formulier werken.
 
ik heb hem 1 op 1 gekopieerd, maar loop ik opnieuw vast. of moet ik dat formulier ook kopiëren? Maar dan zou ik het hele formulier moeten verbouwen, word nog een klus. Of ik moet jou voorbeeld nemen, en daar mijn db omheen knopen..
 
Het belangrijkste is de functie, want die doet de berekening. Op je formulier heb je in ieder geval deze code nodig:

Code:
Private Sub Form_Current()
Dim sBiljet() As String
Me.txtRefWaarde = ""
Me.txtRefWaarde = ""
Me.txtTotaalWaarde = ""
Me.txtWaardeCheck = ""

    iCheck = 0
    sBiljet = Split(BiljetCheck(Me.txtLongcode), "|")
    Me.txtASCII = sBiljet(0)
    Me.txtRefWaarde = sBiljet(1)
    Me.txtTotaalWaarde = sBiljet(2)
    For i = 1 To Len(sBiljet(2))
        iCheck = iCheck + Mid(sBiljet(2), i, 1)
    Next i
    Me.txtWaardeCheck = iCheck
    If iCheck = 9 Then Me.Check = True Else Me.Check = False
End Sub
Ik zal je er ook maar bijvertellen wat-ie allemaal doet, dan wordt het hopelijker wat makkelijker toe te passen.
Zoals je in het begin ziet, wordt er een Matrix variabele gedefinieerd met de naam sBiljet(). Een matrixvariabele is een variabele die meerdere waarden tegelijk kan bevatten. Zo kun je in één variabelen een hoop veldwaarden tegelijk opslaan, die je dan met een loopje kunt bewerken. De variabele wordt gevuld door de functie Biljetcheck aan te roepen. De functie doet niet meer dan alle deelberekeningen uitvoeren, en in één tekststring terugleveren. Dat gebeurt met het commando BiljetCheck(Me.txtLongcode). Het resultaat daarvan is een tekstreeks, waarbij de verschillende waarden zijn gescheiden door een | teken. Met behulp van de opdracht Split wordt die string vervolgens weer opgedeeld in aparte variabelewaarden, die dus worden toegewezen aan de matrixvariabele sBiljet().
Met de regels
Code:
    Me.txtASCII = sBiljet(0)
    Me.txtRefWaarde = sBiljet(1)
    Me.txtTotaalWaarde = sBiljet(2)
worden de deelvariabelen toegewezen aan de tekstvakken.
In het stuk
Code:
    For i = 1 To Len(sBiljet(2))
        iCheck = iCheck + Mid(sBiljet(2), i, 1)
    Next i
    Me.txtWaardeCheck = iCheck
    If iCheck = 9 Then Me.Check = True Else Me.Check = False
Wordt gecontroleerd of de eindcheck correct is of niet.
Bij jou zullen de tekstvakken uiteraard wel anders heten, dus die verwijzingen zul je in de formuliercode moeten aanpassen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan