Avatar billede kivig Nybegynder
05. oktober 2006 - 11:08 Der er 3 kommentarer

Undgå dubletter ved oprettelse af ordrenr.

Hej.

Jeg har et lille system som opretter tilbud til kunder.

Ved gennemførsel af en ordre gemmes ordren i en access db hvor ordrenr = kundenr. dvs unikt. Kundenummeret er skabt af dagens dato ddmmyyyy og et nummer bagved som angiver ordrens nummer, hvis det er dagens første ordre hedder kundenummeret ddmmyyyy-1, men hvordan kan jeg tjekke db hvis kundenummeret = ddmmyyyy-1 og tillægge 1 hvis den eksisterer ?

Jeg har prøvet mig med følgende kode, men den tillægger et 1-tal mere bag 1-tallet. hvordan incrementere jeg?

Aar = DatePart("yyyy", Date, vbUseSystemDayOfWeek, vbUseSystem)
Maaned = DatePart("m", Date, vbUseSystemDayOfWeek, vbUseSystem)
Dag = DatePart("d", Date, vbUseSystemDayOfWeek, vbUseSystem)

' Sæt et nul foran de 9 første måneder
If Maaned < 10 Then Maaned = "0" & Maaned
' Sæt et nul foran de 9 første måneder
If Dag < 10 Then Dag = "0" & Dag
' De seks første i nummeret
Ordrenr = "Q" & Dag & Maaned & Aar & AK-
' Find det højeste nummer i den serie
strQuery = "SELECT * FROM tblNyKunde WHERE Ordrenr Like '" & Ordrenr & "%' "
strQuery =  strQuery &  "ORDER BY tblNyKunde.OrdreNr DESC; "
'response.write strQuery & "<br>"
rst.Open strQuery, conn, adOpenDynamic, adLockOptimistic
' Ingen fundet ? Start med 1
if rst.bof and rst.eof then
    Ordrenr = Ordrenr & "AK-" & 1
    else
    Ordrenr = rst("Ordrenr") & 1
end if
Avatar billede jesperfjoelner Nybegynder
07. oktober 2006 - 22:13 #1
Det lyder som en lidt omstændig måde at gøre det på. Jeg tror ikke jeg forstår det hele.
Du kunne også have to felter i tabellen - et med ordrenr og et med dato+tid?

Nå men Ordrenr kan vist laves lidt kortere således:

Ordrenr = "Q" & format(date,"ddmmyyyy") & "AK-"

Hjælper det hvis du blot bruger EOF

strQuery = "SELECT * FROM tblNyKunde WHERE Ordrenr Like '" & Ordrenr & "%' "
strQuery =  strQuery &  "ORDER BY tblNyKunde.OrdreNr DESC; "
'response.write strQuery & "<br>"
rst.Open strQuery, conn, adOpenDynamic, adLockOptimistic
' Ingen fundet ? Start med 1
if rst.eof then
    Ordrenr = Ordrenr & "AK-" & 1
    else
    Ordrenr = rst("Ordrenr") & 1
end if

Hvad er det med "AK-" ?
Jeg synes ikke du nævner det før det forekommer i koden.
Avatar billede kivig Nybegynder
09. oktober 2006 - 14:03 #2
Hejsa.

AK- er bare initialer på den person som laver tilbuddet, mit problem er at jeg vil tjecke db for eksisterende kundenr og ligge 1 til ordrenummeret sidste tal så de pr dato hedder feks.

Q-09102006-AK-1 og det næste tilbud samme dag hedder
Q-09102006-AK-2 osv.
Avatar billede thesurfer Nybegynder
21. marts 2007 - 13:27 #3
Jeg tror at der er noget I har overset..

Hvis man har tallene 1-25, ser det sådan ud:

Tal-rækkefølge er: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25
Tekst-tal-rækkefølge er: 1,10,11,12,13,14,15,16,17,18,19,2,20,21,22,23,24,25,3,4,5,6,7,8,9

Med tekst, kommer alle 1'erne først, derefter alle 2'erne, og så 3'erne, 4'erne, ....

Man skal for hver eneste post, manipulere teksten med f.eks. Left, Right, Mid, InStr..

Dvs:
I skal have fat i nummeret efter "AK-", konvertere det til tal (med CInt) og smide det i en variabel.
Ved næste post, skal I konvertere tegnet (efter "AK-") til et tal, og sammen ligne med det i tal-variablen.
Hvis det nye tal er større end det gamle, skal det nye sættes i tal-variablen.
- Og gentag til alle poster er løbet igennem.
Når man er færdig med loopen, lægger man 1 til tallet i variablen, via: variabel = variabel + 1
Så bruger man tallet i variablen.

Grunden til at man skal konvertere til typen tal, er at "1" er større end "5", da "1" kommer først.
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