Avatar billede sigyn Seniormester
21. oktober 2008 - 13:10 Der er 13 kommentarer og
1 løsning

Formular med flere tomme linier til indtastning ud fra datoer

Jeg ved ikke lige helt hvordan jeg skal formulere det, men jeg har i flere databaser, en formular hvor i jeg indtaster data, typisk for en uge ad gangen, det kan både være fremadrettet og bagudrettet.
Det jeg godt kunne tænke mig, var at når jeg åbnede formularen, så stod den klar med f.eks 5 "tomme linier" til indtastning, bortset fra datoen, som så kom frem som mandag, tirsdag, onsdag, torsdag og fredag i 1. felt i f.eks foregående uge, eller endnu mere avanceret, valgt ud fra ugenr (jeg kan jo have holdt fri)
Avatar billede terry Ekspert
21. oktober 2008 - 18:22 #1
Heres a link which migh thelp you close your oether open questions.
http://expfaq.dk/behandling_af_svar#behandling_af_svar

Concerning this question.
You can not have a completely empty record, you have to have at least one field with something in, such as the date field.´

You can add records in code and then update the form using
Me.requery.

To add a record in code you can use something like this.

Docmd.RunSQL "INSERT INTO YourTable (fieldNamesGoeHere) VALUES(ListOfValuesGoHere)

and you will need to do this in a loop starting at th efrist day of teh week until the last day of the working week.
Avatar billede sigyn Seniormester
22. oktober 2008 - 11:51 #2
Tak for linket. Jeg havde selv ledt men uden held :-)

Jeg tror også, at jeg kan bruge dit svar, men inden jeg giver points (nu ved jeg jo hvordan (det var markeringen jeg manglede)), kan jeg så få dig til at skære det lidt mere ud i pap, jeg er ikke så hård til VBA som jeg gerne ville være.
Vi kunne antage, at min tabel bare hedder Tabel1, og at felterne hedder Dato, Felt1, felt2 og Felt3. Hvis den så skal opdateres 1 gang ugentlig, for nemheds skyld, på en fast ugedag. Så ville den første dato i formularen være f.eks Now()-7, og den sidste i så now()-1
Jeg skal have en variabel for datoen, ikk? Men skal jeg have flere ? de resterende felter skal bare være tomme, og klar til indtastning.
Avatar billede terry Ekspert
22. oktober 2008 - 12:25 #3
Something like this. (Not tested)


Dim varDato as Date
Dim i as integer
Dim sSQL as string

'Set start date

varDato = Date()

For i = 0 to 4

    varDato = dateAdd("d", i, varDato)
   
    sSQL = "INSERT INTO Tabel1 (dato) VALUES('" & varDato & "')"

    Docmd.RunSQL sSQL



Next i
Avatar billede sigyn Seniormester
22. oktober 2008 - 12:53 #4
Det virker, næsten :-)
Jeg har lagt det på en Form_open (Copy and paste)
Men første gang jeg åbner formularen sker der ingenting. Og som jeg læser din kode, skal den putte 5 datoer i tabellen, i dag, og de næste 4 datoer, har jeg ikke ret i det ? Den tager i dag, altså den 22-10, så tager den  d. 23-10, 25-10, 28-10 og 1-11, og den tager alle datoerne 2 gange. Det kan jeg ikke rigtigt gennemskue hvorfor.
Avatar billede sigyn Seniormester
22. oktober 2008 - 13:03 #5
Ups, det dobbelte antal datoer skyldtes en fejl 40, jeg havde først prøvet på Form_load, og da der ingenting skete i første forsøg, copierede jeg videre over i Form_open
Avatar billede terry Ekspert
22. oktober 2008 - 17:56 #6
so now it works?
Avatar billede terry Ekspert
22. oktober 2008 - 17:59 #7
doo
Silly me :o)
varDato = dateAdd("d", i, date())
Avatar billede terry Ekspert
22. oktober 2008 - 17:59 #8
or
varDato = dateAdd("d", 1, varDato)
Avatar billede sigyn Seniormester
23. oktober 2008 - 10:33 #9
Bingo, det virker, og det vil jeg få rigtigt meget glæde af.

Kan du forklare mig hvad "d" står for i denne sætning:
varDato = dateAdd("d", i, varDato)

Jeg vil gerne give dig yderligere 30 points hvis du kan hjælpe mig med at gøre den endnu mere avanceret.
Et er jo hvis jeg skal søge x antal dage frem eller tilbage fra idag, det kan jeg godt finde ud af, men hvis jeg nu ikke kender x bagudrettet, men er interesseret i at fylde op fra seneste dato til i dag.
Og mere endu, hvis ovenstånde evt. også skal hænge sammen med Felt1, hvor jeg kan vælge mellem A, B eller C. I dette tilfælde vil jeg åbne formularen fra en anden formular, hvorfra jeg vælger A,B eller C fra en comboboks. Vi kan jo kalde den cboFelt1
Avatar billede terry Ekspert
23. oktober 2008 - 11:11 #10
Hi

If you mark (select) dateAdd with the mouse and then press F1 you should see Access help with an explanation of th efunction dateAdd. But baiscally the first parametre (d in this case) is the interval d=day. It can also be m=month and so on.

Here's a link which you might find usefull.
http://www.blueclaw-db.com/visual-basic-function/vba-function.htm

I wont have time to help you with your next question(s) until earliest tomorrow but if I can I will. But I think I will need the second part ("Og mere endu...") expalined in more detail.

Drop me a mail and I'll get back to you ASAP.
ekspertenATsanthell.dk
AT = @
Avatar billede sigyn Seniormester
23. oktober 2008 - 13:05 #11
Jeg er ved at lave en mail med et lille eksempel til dig, men det kan også godt være, at jeg først når at få det færdigt til i morgen
Avatar billede terry Ekspert
28. oktober 2008 - 18:09 #12
did you receive my mail (28.10.08)?
Avatar billede sigyn Seniormester
31. oktober 2008 - 10:10 #13
Hermed de lovede points, og endnu engang tak for hjælpen.

For andre interesserede er løsningen her


Private Sub cmdÅbnqryTabel5_Click()
On Error GoTo Err_cmdÅbnqryTabel5_Click

    Dim stDocName As String
    Dim stLinkCriteria As String
   
    stDocName = "qryTabel5"
   
    stLinkCriteria = "[Felt1]=" & "'" & Me![cboBruger] & "'"

    DoCmd.OpenForm stDocName

    Dim varStartDato As Date
    Dim varSlutDato As Date
    Dim i As Integer
    Dim sSQL As String
    Dim varBruger As String
    Dim VarDato As Date
   

varBruger = Form_Bruger5.cboBruger


If DCount("Dato", "Tabel5", "Felt1= '" & varBruger & "'") = 0 Then

'start 1st October 2008
    varStartDato = #10/1/2008#  'You need to alter this to some other start value
Else

    varStartDato = DMax("Dato", "Tabel5", "Felt1 = '" & varBruger & "'") + 1
   
End If


varSlutDato = Date - 1


DoCmd.SetWarnings False

For i = 0 To varSlutDato - varStartDato

    VarDato = DateAdd("d", i, varStartDato)
   
    sSQL = "INSERT INTO Tabel5 (dato, Felt1) VALUES('" & VarDato & "','" & varBruger & "')"

    DoCmd.RunSQL sSQL

   


Next i

DoCmd.SetWarnings True


    Form_qryTabel5.Requery
   
Exit_cmdÅbnqryTabel5_Click:
    Exit Sub

Err_cmdÅbnqryTabel5_Click:
    MsgBox Err.Description
    Resume Exit_cmdÅbnqryTabel5_Click
   
End Sub
Avatar billede terry Ekspert
31. oktober 2008 - 10:56 #14
tak og god weekend
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