Avatar billede joggeren Nybegynder
29. juni 2004 - 08:54 Der er 37 kommentarer og
3 løsninger

Kontrolciffer EAN 13

Jeg har en kolonne, hvor jeg har en masse EAN numre uden kontrolciffer. Kan man lave en opdateringsforespørgsel der laver dette kontrolnummer?
29. juni 2004 - 08:57 #1
øh...ja!

Hvordan? Det afhænger af hvordan du beregner kontrolcifferet!
Avatar billede joggeren Nybegynder
29. juni 2004 - 09:00 #2
Efter EAN13 måden...
29. juni 2004 - 09:01 #3
Jeg ville lave en funktion i et modul, som laver beregningen.

Eks.

Public Function FixEAN(EAN as string) As String
    'seudokode:
    FixEAN = EAN & Kotrolciffer
End Function

Denne funktion vil jeg så sætte ind i en forespørgsel:

Update Dintabel Set EAN = FixEAN([EAN])


Jeg beklager, at jeg ikke lige er inde i EAN13-metoden ;)
Avatar billede proaccess Nybegynder
29. juni 2004 - 09:03 #4
Du kan finde beregningen på:
http://www.barcodeisland.com/ean13.phtml
29. juni 2004 - 09:07 #5
Joggeren-> har din EAN-kode, så kun 12 cifre?
29. juni 2004 - 09:12 #6
Proaccess-> er du igang med en lille funktion? (for så vil jeg ikke bruge tid på det ;)
Avatar billede proaccess Nybegynder
29. juni 2004 - 09:15 #7
Public Function strEAN(strFirst12 As String) As String
  Dim intLoop As Integer, lngDummy As Long
  strFirst12 = Right("000000000000" & strFirst12, 12)
  For intLoop = 1 To 11 Step 2
    lngDummy = lngDummy + 1 * Mid(strFirst12, intLoop, 1)
    lngDummy = lngDummy + 3 * Mid(strFirst12, intLoop + 1, 1)
  Next
  If lngDummy Mod 10 = 0 Then
    strEAN = strFirst12 & "0"
  Else
    strEAN = strFirst12 & 10 - (lngDummy Mod 10)
  End If
End Function
29. juni 2004 - 09:16 #8
Function FixEAN(EAN As String) As String
    Dim CheckCiffer As Byte
    Dim a As Integer, b As Integer, c As Integer, d As Integer, e As Integer, F As Integer, G As Integer, H As Integer, i As Integer, j As Integer, k As Integer, l As Integer
   
    a = Mid(EAN, 1, 1)
    b = Mid(EAN, 2, 1)
    c = Mid(EAN, 3, 1)
    d = Mid(EAN, 4, 1)
    e = Mid(EAN, 5, 1)
    F = Mid(EAN, 6, 1)
    G = Mid(EAN, 7, 1)
    H = Mid(EAN, 8, 1)
    i = Mid(EAN, 9, 1)
    j = Mid(EAN, 10, 1)
    k = Mid(EAN, 11, 1)
    l = Mid(EAN, 12, 1)

    CheckCiffer = (1 * a + 3 * b + 1 * c + 3 * d + 1 * e + 3 * F + 1 * G + 3 * H + 1 * i + 3 * j + 1 * k + 3 * l) Mod 10
    FixEAN = EAN & CheckCiffer
End Function
Avatar billede proaccess Nybegynder
29. juni 2004 - 09:16 #9
Denne funktion kalder du så i en forespørgsel:

UPDATE Tabel
SET FeltMed12Cifre = strEAN(FeltMed12Cifre)
Avatar billede joggeren Nybegynder
29. juni 2004 - 09:18 #10
pt har den 12 cifre... men den mangler det sidste ciffer...hvor indsætter man denne kode?
Avatar billede proaccess Nybegynder
29. juni 2004 - 09:18 #11
>Thomas: Checkcifret er (10 - resultatet af formlen)!
Avatar billede proaccess Nybegynder
29. juni 2004 - 09:20 #12
>joggeren: Du skal lave et modul, hvor du indsætter koden.
Du må IKKE kalde modulet det samme som funktionen "strEAN"
29. juni 2004 - 09:26 #13
Proaccess->ok, den missede jeg lige:
Function FixEAN(EAN As String) As String
    Dim CheckCiffer As Byte
    Dim a As Integer, b As Integer, c As Integer, d As Integer, e As Integer, F As Integer, G As Integer, H As Integer, i As Integer, j As Integer, k As Integer, l As Integer
   
    a = Mid(EAN, 1, 1)
    b = Mid(EAN, 2, 1)
    c = Mid(EAN, 3, 1)
    d = Mid(EAN, 4, 1)
    e = Mid(EAN, 5, 1)
    F = Mid(EAN, 6, 1)
    G = Mid(EAN, 7, 1)
    H = Mid(EAN, 8, 1)
    i = Mid(EAN, 9, 1)
    j = Mid(EAN, 10, 1)
    k = Mid(EAN, 11, 1)
    l = Mid(EAN, 12, 1)

    CheckCiffer = (1 * a + 3 * b + 1 * c + 3 * d + 1 * e + 3 * F + 1 * G + 3 * H + 1 * i + 3 * j + 1 * k + 3 * l)
    If CheckCiffer Mod 10 = 0 Then
        FixEAN = EAN & "0"
    Else
        FixEAN = EAN & CStr(10 - (CheckCiffer Mod 10))
    End If
End Function
Avatar billede joggeren Nybegynder
29. juni 2004 - 09:31 #14
Hmm.. feltet med den 12 cifrede kode er et tekst felt.. det skal vel ændres til et tal format.. men hvad hedder den rigtige formattering af dette felt?

Synes den sletter dataene når jeg ændrer feltets datatype... så noget gør jeg forkert.
29. juni 2004 - 09:32 #15
Probleemet er nok, at den alm. taltype ikke kan indeholde så mange cifre.

Prøv evt datatypen Decimal
Avatar billede joggeren Nybegynder
29. juni 2004 - 09:35 #16
Hmm.. det er office 97.. synes ikke den er der..
29. juni 2004 - 09:37 #17
nej, den kom først i Access 2000 :o(

Så er der desværre kun Tekst tilbage - er det et problem? du skal jo ikke regne på feltet og sorteringer vil altid foregå korrekt, da der altid er 13 cifre..
29. juni 2004 - 09:38 #18
Prøv evt med "Dobbelt Reelt tal". Den skulle kunne tage 15 betydende cifre...
Avatar billede proaccess Nybegynder
29. juni 2004 - 09:41 #19
Begge vores funktioner bygger jo netop på at de første 12 cifre står i et tekstfelt, og resultatet bliver også tekst, så du har jo intet problem dér...
Avatar billede joggeren Nybegynder
29. juni 2004 - 09:42 #20
Så kører vi videre med tekst.. når jeg indsætter din sæt i SQL.. melder den syntax fejl.

UPDATE Ean1
SET ean kode = strEAN(ean kode)
Avatar billede proaccess Nybegynder
29. juni 2004 - 09:43 #21
Det er fordi du har mellemrum i dit feltnavn...

UPDATE Ean1
SET [ean kode] = strEAN([ean kode])
Avatar billede joggeren Nybegynder
29. juni 2004 - 09:49 #22
men der er mellemrum i feltnavnet
Avatar billede proaccess Nybegynder
29. juni 2004 - 09:50 #23
Netop, og løsningen er at sætte de kantede paranteser omkring [ean kode]...
Avatar billede joggeren Nybegynder
29. juni 2004 - 09:59 #24
Går i stå i første linie:

Public Function strEAN(strFirst12 As String) As String
  Dim intLoop As Integer, lngDummy As Long
  strFirst12 = Right("000000000000" & strFirst12, 12)
  For intLoop = 1 To 11 Step 2
    lngDummy = lngDummy + 1 * Mid(strFirst12, intLoop, 1)
    lngDummy = lngDummy + 3 * Mid(strFirst12, intLoop + 1, 1)
  Next
  If lngDummy Mod 10 = 0 Then
    strEAN = strFirst12 & "0"
  Else
    strEAN = strFirst12 & 10 - (lngDummy Mod 10)
  End If
End Function
29. juni 2004 - 10:01 #25
Har du lagt koden i et modul?
Avatar billede joggeren Nybegynder
29. juni 2004 - 10:02 #26
Ja...
Avatar billede joggeren Nybegynder
29. juni 2004 - 10:03 #27
"Projektet kunne ikke findes..." første linie er markeret med gul, og right i 3 line er markeret med blå.
Avatar billede proaccess Nybegynder
29. juni 2004 - 10:05 #28
Det kan være fordi du bruger den i en opdateringsforespørgsel...

Prøv med følgende kode (hvor strFirst12 ikke ændres i kørslen)

Public Function strEAN(strFirst12 As String) As String
  Dim intLoop As Integer, lngDummy As Long, strDummy as String
  strDummy = Right("000000000000" & strFirst12, 12)
  For intLoop = 1 To 11 Step 2
    lngDummy = lngDummy + 1 * Mid(strDummy , intLoop, 1)
    lngDummy = lngDummy + 3 * Mid(strDummy , intLoop + 1, 1)
  Next
  If lngDummy Mod 10 = 0 Then
    strEAN = strDummy & "0"
  Else
    strEAN = strDummy & 10 - (lngDummy Mod 10)
  End If
End Function
29. juni 2004 - 10:06 #29
(eller bare erklære den med ByVal)
Avatar billede joggeren Nybegynder
29. juni 2004 - 10:08 #30
Laver samme fejl..
Avatar billede proaccess Nybegynder
29. juni 2004 - 10:19 #31
Prøv at gå ind i dit modul, i menuen tools skal du vælge references, og se om der står "missing" ud for nogle af dem...
Avatar billede joggeren Nybegynder
29. juni 2004 - 10:23 #32
Ud for en ActiveBarcode... men den bruges ikke i dette projekt.
29. juni 2004 - 10:25 #33
så bør den ikke være der, da den netop kan skade afviklingen af VBA-kode
Avatar billede joggeren Nybegynder
29. juni 2004 - 10:27 #34
Hvordan fjerner jeg den?
29. juni 2004 - 10:28 #35
klikker på krydset til venstre (så det forsvinder)
Avatar billede joggeren Nybegynder
29. juni 2004 - 10:36 #36
Så virker det sgu!
Avatar billede proaccess Nybegynder
29. juni 2004 - 10:50 #37
Så mangler vi bare en funktion til at fordele point mellem thomasjepsen og proaccess...
På den måde bliver vi alle glade...  ;0)
Avatar billede joggeren Nybegynder
29. juni 2004 - 10:52 #38
Håber i føler det er retfærdigt...
29. juni 2004 - 11:08 #39
Jeg tror ikke, at du fik givet nogle point :o)
29. juni 2004 - 11:08 #40
Uanset hvad bør Proaccess have flest point, da han kom med det rigtige resultat først :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester