Avatar billede batting Nybegynder
04. september 2003 - 22:13 Der er 19 kommentarer og
1 løsning

Auto oprette record, udfra to records

Jeg har en tabel "poster" med flg. felter: ID, Antal

tabellen indeholder:
ID: Post1, Post2, Post3
Antal: 2, 3, 5

Jeg ønsker at skabe en liste der giver resultatet
Post1-1
Post1-2
Post2-1
Post2-2
Post2-3
Post3-1
Post3-2 ... osv

Om resultatet kommer i en tabel eller i en query er mig ligegyldigt.

Er der ikke et klogt hoved der kan hjælpe.
Avatar billede fynbohans Nybegynder
04. september 2003 - 22:38 #1
Mangler der Post1-3 eller betyder osv Post3-3 og Post3-4?
Og hvor kommer Antal ind i billedet i resultatet?
Avatar billede batting Nybegynder
04. september 2003 - 22:51 #2
Sorry - Jeg skal vist forklare mig lidt bedre.
Sidste siffer angiver sidste karrakter i resultatet:
Dvs for "Post1" er antal lig 2 dvs resultatet bliver Post1-1, Post1-2
og for "Post2" er antal lig 3 dvs resultatet bliver Post2-1, Post2-2, Post2-3
"Antal" definerer antallet af varianter af "ID"
Osv betyder at jeg ikke gad at skrive de resterende værdier: Post3-3, Post3-4, Post3-5
Avatar billede hekla Nybegynder
04. september 2003 - 23:01 #3
Det nemmeste er , hvis du først laver en forespørgsel, hvor du vælger Antal og derefter laver en ny forespørgsel, hvor du vælger ID fra tabellen og Antal fra den første forespørgsel
Avatar billede hekla Nybegynder
04. september 2003 - 23:03 #4
Glem det. Jeg havde ikke læst spørgsmålet rigtigt.
Avatar billede terry Ekspert
05. september 2003 - 08:10 #5
as far as I can make out its going to have to be done in VBA Code, do you have anything against this?
05. september 2003 - 08:57 #6
Opret en tabel kaldet "Resultat" med kun én kolonne, som også skal hedde "Resultat".

Herefter puttes nedenstående kode i et modul (kan afprøves ved at trykke F5, når markøren står i proceduren):

Public Sub Demo()
    Dim rsPoster As ADODB.Recordset
    Dim rsResultat As ADODB.Recordset
    Dim n As Long
   
    Set rsPoster = New ADODB.Recordset
    Set rsResultat = New ADODB.Recordset
   
    rsPoster.Open "Poster", CurrentProject.Connection, adOpenStatic
    rsResultat.Open "Resultat", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    Do Until rsPoster.EOF
        For n = 1 To rsPoster!Antal
            rsResultat.AddNew
            rsResultat!Resultat = rsPoster!ID & "-" & n
            rsResultat.Update
        Next n
        rsPoster.MoveNext
    Loop
    rsPoster.Close
    rsResultat.Close
End Sub
Avatar billede terry Ekspert
05. september 2003 - 09:06 #7
This puts the required records in the SAME table

Private Sub Command0_Click()
Dim rst As ADODB.Recordset
Dim i As Integer
Dim cnt As Integer
    Set rst = New ADODB.Recordset
    rst.Open "Select * From Poster", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
   
    If Not rst.EOF Then
        DoCmd.SetWarnings False
        For i = 1 To rst.RecordCount
       
           
            For cnt = 1 To rst!Antal - 1
           
                DoCmd.RunSQL "INSERT INTO Poster (ID, Antal) VALUES ('" & rst!ID & "'," & cnt & ")"
               
               
           
            Next cnt
       
            rst.MoveNext
       
        Next i
        DoCmd.SetWarnings True
    End If
Avatar billede terry Ekspert
05. september 2003 - 09:06 #8
.
05. september 2003 - 09:21 #9
Terry-> I see your idea, but....What happens, if you - accidentally - run your code twice? Or if new records are added to "Poster", so you have to run it again later on?
I think it is better to put it in another table, don't you agree?
Avatar billede terry Ekspert
05. september 2003 - 09:33 #10
I NEVER "accidently" run my code twice Thomas, I may do it on purpose though :o)

I must say that it all depends on what batting wants to do with the result. If it is because he intended to have all records in the first table then this is a way to solve this! Just delete the code once its done the first time and no accidents will happen :o) If he needs it for other purposes and will be re-using it then I think you need an extra line of code in your example Thomas.

Docmd.runsSQL "Delete * from Resultat"

But again it all depends what its for
05. september 2003 - 09:50 #11
Jeg er selvfølgelig enig - "Accidently" var også et forkert ord, men det kunne jo være, at resulatet ikke var helt som Batting ønskede. Med dit forslag har man bare ikke mulighed for et "second try". Det var bare det, som jeg ønskede at kommentere :o)

Du må heller ikke tage det personligt, at jeg ofte kommentere dine og andres forslag. Jeg ser det blot som en form for 'træning' at forsøge at gennemskue konsekvenserne af en stump kode.
Dine forslag vil nok især blive gennemlæst, men det er kun fordi du jo er 'mesteren' (ifølge pointtavlen ;o) og derfor er det jo lidt sjovere, hvis man kan finde en lille fejl i ny og næ :o)
Avatar billede terry Ekspert
05. september 2003 - 10:09 #12
Thomas>I dont take it personal so dont worry, make all the comments you want. We and others can learn from ALL (almost) the input which comes.
When I give an answer I have more than likely other ideas too, for example I had thought of doing EXACTLY what was asked for which your answer does. But I couldnt give the same answer as you so decided to be different. How else am I supposed to get points to keep my position as "mesteren" (ifølge pointtavlen ;o)
05. september 2003 - 10:22 #13
LOL :o)

Anything for at few points, eh? :)
Avatar billede terry Ekspert
05. september 2003 - 10:29 #14
yeps :o)
Avatar billede batting Nybegynder
05. september 2003 - 10:33 #15
Tak for deltagelsen, jeg er desvære arbejdsramt lige nu. sidder på en mac og tegner. En lille kommentar til "depends on what batting wants to do with the result" "ID" er en fysiskplacering af en post på et spejderløb. Tallet angiver mandskabs behovet. Det jeg vil generere er en liste af unikke titler der relaterer til placering og antal. Jeg skal således have muligheden for at ændre på begge værdier. Så terrys eksempel går ikke - jeg skal ikke overskrive de oprindelige værdier.
Thomas> Jeg er ny bruger access og prøver dit forslag i aften - foreløbig tak
Avatar billede batting Nybegynder
05. september 2003 - 22:23 #16
Hej thomas - Jeg er 10 sek fra at kaste point til dig.
Dog har jeg et lille problem.
Jeg taster værdier ind for de forskellige poster... og kører komadoen.
Resultatet er perfekt at er oprettet i tabellen og klar til brug.
Dog finder jeg på at øge antallet i af posterne.
Så kører jeg komandoen igen og nu har jeg de gamle records og de nye i samme tabel. hvis jeg så sætter talbellen op som ønsket, med Resultat som unik titel "No Duplicates" så giver komadoen en runtime err. pga duplicate values !
Hvad gør jeg nu !
05. september 2003 - 22:26 #17
Du skal sørge for at tømme tabellen inden du kører proceduren.

Public Sub Demo()
    Dim rsPoster As ADODB.Recordset
    Dim rsResultat As ADODB.Recordset
    Dim n As Long
   
    Set rsPoster = New ADODB.Recordset
    Set rsResultat = New ADODB.Recordset
   
    docmd.Setwarnings false
    docmd.RunSQL "Delete From Resultat"
    docmd.Setwarnings true

    rsPoster.Open "Poster", CurrentProject.Connection, adOpenStatic
    rsResultat.Open "Resultat", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    Do Until rsPoster.EOF
        For n = 1 To rsPoster!Antal
            rsResultat.AddNew
            rsResultat!Resultat = rsPoster!ID & "-" & n
            rsResultat.Update
        Next n
        rsPoster.MoveNext
    Loop
    rsPoster.Close
    rsResultat.Close
End Sub
05. september 2003 - 22:27 #18
De 3 linier, som er indsat sørger for at tømme tabellen hver gang. Derved skulle problemet være løst...
Avatar billede batting Nybegynder
05. september 2003 - 22:57 #19
Tusind tak for hjælpen - manualer er gode - men eksperten er klart at foretrække. Jeg vender tilbage med nye hovedbrud !
Avatar billede terry Ekspert
06. september 2003 - 09:03 #20
05/09-2003 09:33:52

Docmd.runsSQL "Delete * from Resultat"

: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