Hoppa till innehåll

Sida 1 av 1
  • Du kan inte starta en ny tråd
  • Du kan inte svara i tråden

Skapa stigande numrering med ny numrering för varje grupp

#1
Medlem är utloggad   Hansol 33 

  • Nykomling
  • Pip
  • Grupp: Medlemmar
  • Inlägg: 4
  • Gick med: 2011-10-21

Skrivet 21 okt 2011, 07:25

Hej !

Ny här på forumet och jag har sök med ljus och lykta efter en lösning på mitt bekymmer men inte hittat något.

Jag behöver skapa en numrering av posterna i en fråga (skulle även kunna vara en tabell). Det vore inga problem om det bara skulle vara en enkel stigande numrering, det löses med en räknare.

Mitt önskemål är att numreringen ska börja om för varje nytt värde i ett av fälten.

T ex:
Kundgrupp - Kund - Num:
X --- A --- 1
X --- B --- 2
X --- C --- 3
Y --- D --- 1
Y --- E --- 2
Z --- F --- 1
Z --- G --- 2
Z --- H --- 3



Så i fältet "Num" vill jag få in en funktion som skapar en ny numrering för varje förändring i "Kundgrupp"

Finns det någon SQL kod som kan skapa en sådan alternativt någon annan funktion?

Mvh // Håkan
0

#2
Medlem är utloggad   MickeF 

  • Användare
  • PipPip
  • Grupp: Medlemmar
  • Inlägg: 83
  • Gick med: 2010-06-04
  • Ort:Stockholm

Skrivet 21 okt 2011, 10:45

Jag tror det är enklast att göra detta med lite kod.

' Denna funktion tvingar fram en nummerordning som börjar på 1 för varje grupp
Function KundNumUpdateTvinga()
	Dim rs As Recordset, sql$, max&, gammalKundgrupp$
	
	sql = "SELECT Kundnum.Kundgrupp, Kundnum.Kund, Kundnum.Num FROM Kundnum"
	sql = sql & " ORDER BY Kundnum.Kundgrupp, Kundnum.Kund;"

	Set rs = CurrentDb.OpenRecordset(sql)
	Do Until rs.EOF
    	If rs!Kundgrupp <> gammalKundgrupp Then
        	max = 0
        	gammalKundgrupp = rs!Kundgrupp
    	End If
    	max = max + 1
    	rs.Edit
    	rs!num = max
    	rs.Update
    	rs.MoveNext
	Loop
	rs.Close
End Function


Vill man behålla numret som en kund har fått måste denna användas istället.
Gäller tex om en kund tas bort:
Om tex Kund A tas bort i exemplet ovan och en ny kund I tillkommer i Kundgrupp X. Då kommer kund I få nummer 4.
Function KundNumUpdateBevara()
	Dim rs As Recordset, sql$, max&, gammalKundgrupp$
	
	sql = "SELECT Kundnum.Kundgrupp, Kundnum.Kund, Kundnum.Num FROM Kundnum"
	sql = sql & " ORDER BY Kundnum.Kundgrupp, Kundnum.Num > 0, Kundnum.Kund, Kundnum.Num;"

	Set rs = CurrentDb.OpenRecordset(sql)
	Do Until rs.EOF
    	If rs!Kundgrupp <> gammalKundgrupp Then
        	max = 0
        	gammalKundgrupp = rs!Kundgrupp
    	End If
    	If (rs!num > 0) Then
        	max = rs!num
    	Else
        	max = max + 1
        	rs.Edit
        	rs!num = max
        	rs.Update
    	End If
    	rs.MoveNext
	Loop
	rs.Close
End Function


X --- A --- 1
X --- B --- 2
X --- C --- 3
X --- I --- 4
Y --- D --- 1
Y --- E --- 2
Z --- F --- 1
Z --- G --- 2
Z --- H --- 3
Accesskonsult
Micke Falk

Inlägget är redigerat av Cluster: 21 okt 2011, 11:37.
Anledning till redigering: Inlägg sammanslagna av moderator

0

#3
Medlem är utloggad   Hansol 33 

  • Nykomling
  • Pip
  • Grupp: Medlemmar
  • Inlägg: 4
  • Gick med: 2011-10-21

Skrivet 21 okt 2011, 13:24

Tack för ditt svar MickeF !

Jag får dock upp ett felmeddelande när jag lagt till ett fält i frågan med denna

rs.Edit är markerat och följande meddelande visas

Kompileringsfel:
Det går inte att hitta metoden eller datamedlemmen

Vet du vad det kan bero på?

Kan tillägga att det är Access 200 jag använder.
0

#4
Medlem är utloggad   MickeF 

  • Användare
  • PipPip
  • Grupp: Medlemmar
  • Inlägg: 83
  • Gick med: 2010-06-04
  • Ort:Stockholm

Skrivet 21 okt 2011, 13:30

Visa inläggHansol 33, den 21 okt 2011, 13:24, sa:

Kan tillägga att det är Access 200 jag använder.


2.0 eller 2003 eller?
Accesskonsult
Micke Falk
0

#5
Medlem är utloggad   MickeF 

  • Användare
  • PipPip
  • Grupp: Medlemmar
  • Inlägg: 83
  • Gick med: 2010-06-04
  • Ort:Stockholm

Skrivet 21 okt 2011, 13:36

Om det är 2007:

Kolla http://www.eggheadca...nger-found.aspx
Accesskonsult
Micke Falk
0

#6
Medlem är utloggad   Hansol 33 

  • Nykomling
  • Pip
  • Grupp: Medlemmar
  • Inlägg: 4
  • Gick med: 2011-10-21

Skrivet 21 okt 2011, 13:48

Sorry, missade sista siffran
Det är 2002
0

#7
Medlem är utloggad   MickeF 

  • Användare
  • PipPip
  • Grupp: Medlemmar
  • Inlägg: 83
  • Gick med: 2010-06-04
  • Ort:Stockholm

Skrivet 21 okt 2011, 19:04

Visa inläggHansol 33, den 21 okt 2011, 13:48, sa:

Sorry, missade sista siffran
Det är 2002



Då är det nog en referens till "Microsoft DAO 3.x Object library" som saknas.

Gör så här:
1) Öppna kodfönstret
2) från verktygsmenyn väljer du "Referenser".
3) Leta upp "Microsoft DAO 3.x Object library" (vet ej exakt versionsnummer men 3.6 är det för Access 2003
4) Kryssa för den
5) stäng Referenser

Prova ingen!
Accesskonsult
Micke Falk
0

#8
Medlem är utloggad   MickeF 

  • Användare
  • PipPip
  • Grupp: Medlemmar
  • Inlägg: 83
  • Gick med: 2010-06-04
  • Ort:Stockholm

Skrivet 21 okt 2011, 19:47

Ah, sen måste
"Microsoft DAO 3.x Object library"
troligen ligga före
"Microsoft ActiveX Data Objects 2.1 Library"
i referenslistan.
Accesskonsult
Micke Falk
0

#9
Medlem är utloggad   Hansol 33 

  • Nykomling
  • Pip
  • Grupp: Medlemmar
  • Inlägg: 4
  • Gick med: 2011-10-21

Skrivet 24 okt 2011, 09:44

Tusen tack MickeF !

Det fungerade inte att köra koden i frågan för den var "ReadOnly".
Så jag körde istället direkt i tabellen och då fungerar det klockrent !

Mvh // Håkan
0
Sida 1 av 1
  • Du kan inte starta en ny tråd
  • Du kan inte svara i tråden

1 besökare läser just nu den här tråden, varav 0 medlem(mar) och 1 gäst(er)
 
 
Senast obesvarade trådar
Prenumerera på nyheter

Missa inte våra nya
smarta nyhetsbrev

Läs mer om nyhetsbreven här!
Beställ direkt:


Extreme
PC för Alla-nätverket