14. august 2007 - 12:31Der er
22 kommentarer og 1 løsning
Dato gentagelse
Jeg har følgende kode i en formular. Den sørger for at kopiere antal forekomster med et bestemt interval i måneder. Jeg kunne godt tænke mig at koden ikke opretter den første forekomst. Dvs. hvis første forekomst er 1/8-07 og intervallet er 1 måned, skal den første dato være 1/9-07.
Dim Dato As Date, I As Integer Dato = Format(Me.Startdato, "dd-mm-yyyy", vbMonday, vbFirstFourDays) Dato2 = Format(Me.Forfaldsdato, "dd-mm-yyyy", vbMonday, vbFirstFourDays) For I = 1 To Val(Me.Forekomster) DoCmd.RunSQL "INSERT INTO [Opgaver totalt] ( startdato, emne, initialer, forfaldsdato, gentagelse, forekomster, status, tekst )SELECT '" & Format(Dato, "dd-mm-yyyy") & "', '" & Me.Emne & "', '" & Me.Initialer & "','" & Format(Dato2, "dd-mm-yyyy") & "', '" & Me.Gentagelse & "', '" & Me.Forekomster & "', '" & Me.Status & "', '" & Me.Tekst & "' " Dato = DateAdd("m", Val(Me.Hyppighed), Dato) Dato2 = DateAdd("m", Val(Me.Hyppighed), Dato2)
Du kan også bare samle alle definitionerne, hvis du vil:
Dim Dato As Date, I As Integer, c As Integer Dato = Format(Me.Startdato, "dd-mm-yyyy", vbMonday, vbFirstFourDays) Dato2 = Format(Me.Forfaldsdato, "dd-mm-yyyy", vbMonday, vbFirstFourDays)
Dim Dato As Date, I As Integer, c As Integer Dato = Format(Me.Startdato, "dd-mm-yyyy", vbMonday, vbFirstFourDays) Dato2 = Format(Me.Forfaldsdato, "dd-mm-yyyy", vbMonday, vbFirstFourDays)
Hele koden ser nu sådan ud: Dato = Format(Me.Startdato, "dd-mm-yyyy", vbMonday, vbFirstFourDays) Dato2 = Format(Me.Forfaldsdato, "dd-mm-yyyy", vbMonday, vbFirstFourDays) c = 0 If c > 0 Then For I = 1 To Val(Me.Forekomster) DoCmd.RunSQL "INSERT INTO [adhoc opgaver totalt] ( startdato, emne, initialer, forfaldsdato, gentagelse, forekomster, status, tekst )SELECT '" & Format(Dato, "dd-mm-yyyy") & "', '" & Me.Emne & "', '" & Me.Initialer & "','" & Format(Dato2, "dd-mm-yyyy") & "', '" & Me.Gentagelse & "', '" & Me.Forekomster & "', '" & Me.Status & "', '" & Me.Tekst & "' " Dato = DateAdd("m", Val(Me.Hyppighed), Dato) Dato2 = DateAdd("m", Val(Me.Hyppighed), Dato2) c = c + 1 Next MsgBox ("Opgaven er nu oprettet"), vbInformation, "Opgave oprettet" DoCmd.SetWarnings True End If
Jeg var nødt til at bytte om på 2 af dine linjer, da den ikke ville acceptere NEXT uden FOR. Men det virker stadig ikke, der bliver ikke lavet nogen dato gentagelser og jeg får ikke msgbox heller
Dim Dato As Date, I As Integer, c As Integer Dato = Format(Me.Startdato, "dd-mm-yyyy", vbMonday, vbFirstFourDays) Dato2 = Format(Me.Forfaldsdato, "dd-mm-yyyy", vbMonday, vbFirstFourDays)
Linien "c = c + 1" skal jo ikke være inde i IF-sætningen, da den så aldrig vil kommer over 0.. :-)
Rettelse.. igen.. igen.. igen.. :-)
Rettelse:
Dim Dato As Date, I As Integer, c As Integer Dato = Format(Me.Startdato, "dd-mm-yyyy", vbMonday, vbFirstFourDays) Dato2 = Format(Me.Forfaldsdato, "dd-mm-yyyy", vbMonday, vbFirstFourDays)
Dato og dato2 repræsenterer de datoer der skal lægges i tabellen, dvs. for hver forekomst. Koden har egentlig fungeret godt nok, den er bare ikke sat op til at "springe" den første dato over og det ønsker jeg den skal gøre, fordi den post jeg opretter, vil netop indeholde den første dato
Jeg ved ikke om du har ret, men mit mål er at kun at få en post pr. dato.
Hvad hvis man valgte en nemmere løsning, der gjorde at man i koden lagde en sletning af en af de poster der har samme dato. F.eks. hvis man slettede ud fra id. Er du med på hvad jeg mener?
Jeg beklager at jeg først skriver nu.. Jeg "mistede" den seneste mail i dyngen af mails fra andre spørgsmål jeg deltager i..
Som jeg ser det, kan man gøre det på 2 måder:
1) Vía SQL Her kan du begrænse hvad outputtet skal være, og du burde derfor kunne bruge noget i stil med SQL koden fra 16/08-2007 11:12:27 og 16/08-2007 11:46:22
2) Via kode Efter at have fået outputtet fra SQL'en, kan du f.eks. smide posterne i en array, og hoppe over nogle af dem, via en tæller, som nævnt i resten af indlæggende..
Jeg har aldrig arbejdet med DoCmd.RunSQL, SQL kald direkte i Access, så jeg kan ikke sige dig, hvordan det vil fungerer..
Umiddelbart ser det ud til at fungere på normalvis.. hvilket så undrer mig, at du ikke får fejl, fordi du har en SELECT sætning lige efter en INSERT sætning, uden at putte ";" i mellem de to sætninger.. Det har jeg aldrig prøvet før..
Jeg ville helst have brugt SQL-begræsningen, f.eks. med BETWEEN eller "<= og >="..
Jeg har først set dine svar nu. du skal ha tak for dine forsøg, jeg lukker nu spørgsmålet. Måske opretter jeg et nyt senere
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.