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
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
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
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.
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..
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...
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
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
Uanset hvad bør Proaccess have flest point, da han kom med det rigtige resultat først :o)
Synes godt om
Ny brugerNybegynder
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.