Avatar billede bluestrike Nybegynder
15. april 2004 - 15:51 Der er 15 kommentarer og
2 løsninger

Dao sql dato, og mindre VBA problem.

Hej
Jeg har det problem at jeg ved ikke hvilken syntax man skal bruge ved dato i DAO.

Jeg har lavet en sql string, herunde ses lidt af where sætningen:

WHERE startdato>={" & currentDato & "} AND slutdato<={" & nyDato & "}

Mit problem er hvilken syntax startdato og slutdato skal være i.

Derudover har jeg et andet lille problem. Jeg har lavet en større  GUI hvor man kan afkrydse forskellige ting i checkboxe, men hvordan kan man lave et loop med dem.

If grpInput.CheckBox14 = True Then
    If sqlStringGrp = "" Then
    sqlStringGrp = "Grp='" & grpInput.CheckBox14.Caption & "'"
    Else
    sqlStringGrp = sqlStringGrp & "OR Grp='" & grpInput.CheckBox14.Caption & "'"
            End If
        End If

Hvis jeg gerne ville lave et loop der løber fra grpInput.Checkbox1 til grpInput.Checkbox14, f.eks en while løkke. Håber nogen ved det :-)
Avatar billede martin_moth Mester
15. april 2004 - 19:12 #1
Det sidste: Det kan du kun ved at oprette dine checkboxe i et kontrol array og så kalde

for i = 0 to 13
  if grpInput.CheckBox(i).value = true then bla bla
next i
Avatar billede peter.erikse Nybegynder
16. april 2004 - 07:20 #2
WHERE Dato <= DateValue('" & slutdato & "') And Dato >= DateValue('" & Startdato& "')
Avatar billede bluestrike Nybegynder
16. april 2004 - 08:24 #3
Jeg ser lige på den med dato'en... men Martin hvordan opretter jeg dem så i en kontrol array??
Avatar billede bluestrike Nybegynder
16. april 2004 - 09:06 #4
Det med dato'en fungere, lige så snart jeg har fået Martin til at uddybe kontrol array delen af spørgsmålet fordeler jeg pointene...
Avatar billede martin_moth Mester
16. april 2004 - 10:10 #5
Du opretter et kontrolarray ved at smide en Checkbox på formen, omdøbe den til hvad den skal hedde, kopiere den ved Ctrl+C, og paste ved Ctrl+V, og sige "JA" til at oprette et kontrolarray

Du kan så oprette et kontrolarray med fx. 14 checkboxe, der hedder:

  CheckBox(0), CheckBox(1), ..., CheckBox(13)

Dim i as long
For i = 0 to 13
  if grpInput.CheckBox(i).Value = True then bla bla bla
Next i
Avatar billede bluestrike Nybegynder
16. april 2004 - 10:53 #6
Skulle den automatisk spørge om det?? For når jeg gør kopiere den med Ctrl+C, Ctrl+V, så smider den bare en ny checkbox ind uden videre...
Avatar billede martin_moth Mester
16. april 2004 - 11:06 #7
Ahh - vi er i VBA (det har du jo også skrevet) og ikke i VB6.

Hmmm - prøv at søg i hjælpen under control array
Avatar billede martin_moth Mester
16. april 2004 - 11:07 #8
PS: Den checkbox den sætter ind uden videre, har den SAMME havn som den forrige. Hvis ja, så er den i et kontrolarray, og kan kaldes med index
Avatar billede bluestrike Nybegynder
16. april 2004 - 11:09 #9
Damn.. så kan du ikke hjælpe?? :-/
Avatar billede bluestrike Nybegynder
16. april 2004 - 11:09 #10
Den har det samme navn ja... Så vil jeg prøve at se om den automatisk har oprettet et kontrolarray.
Avatar billede martin_moth Mester
16. april 2004 - 11:14 #11
Når den har samme navn ER den i et kontolarray....

Men jeg har lige kikket på det, og der er vist ikke kontrolarrays i VBA.

Altså har de IKKE samme navn - prøv at se i dit property vindue. Husk på, at caption IKKE er lig kontrollens havn.

Har du ikke et kontrol array kan du IKKE loope over dem.
Avatar billede bluestrike Nybegynder
16. april 2004 - 11:23 #12
Har godt nok lavet en løsning uden loop, men der er meget redundant kode som jeg meget gerne ville af med. :-(
Avatar billede martin_moth Mester
16. april 2004 - 11:45 #13
VB er ikek så smart at man kan sammensætte kontrolnavne af variabler.

F.eks.

Dim Kontrolnavn
dim i
for i = 1 to 5
  kontrolnavn = "Text" & i
  kontrolnavn.text = "Dette er kontrol nr. " & i
next i

Ovenstående vil IKKE virke - man kan noget tilsvarende i andre sprog, ikke i VB. Eneste anden løsning er kontrolarray - men de er åbenbart ikke i VBA

Alternativt - måske KAN du komme omkring det ved at lave en collection af checkboxe, jeg vil tro at det kræver at du opretter dem runtime. Og så kan do loope igennem din collection af checkboxe. Har ikke tænkt det 100% igennem, men du kan jo prøve. Har du ikke erfaring med collections, skal du nok lige læse 5 min om det først...
Avatar billede bluestrike Nybegynder
16. april 2004 - 11:48 #14
Avatar billede martin_moth Mester
20. april 2004 - 10:36 #15
Så er der kun en collection tilbage, hvis du absolut VIL loope!

Du har trods alt kun 13 kontroller, så måske kan du leve uden loop
Avatar billede bluestrike Nybegynder
20. april 2004 - 15:39 #16
Jeg har lige sat mig lidt ind i det collection :-D her er den kode som virker, hvis der er nogen andre der er intereseret i hvordan man kan bruge det.

Sub checkboxtest()
   
    Dim gruppeV As New Collection
   
    gruppeV.Add grpInput.CheckBox1
    gruppeV.Add grpInput.CheckBox2
    gruppeV.Add grpInput.CheckBox3
    gruppeV.Add grpInput.CheckBox4
    gruppeV.Add grpInput.CheckBox5
    gruppeV.Add grpInput.CheckBox6
    gruppeV.Add grpInput.CheckBox7
    gruppeV.Add grpInput.CheckBox8
    gruppeV.Add grpInput.CheckBox9
    gruppeV.Add grpInput.CheckBox10
    gruppeV.Add grpInput.CheckBox11
    gruppeV.Add grpInput.CheckBox12
    gruppeV.Add grpInput.CheckBox13
    gruppeV.Add grpInput.CheckBox14
    gruppeV.Add grpInput.CheckBox15

    For i = 1 To 15
        If gruppeV.Item(i) Then
            If sqlStringGrp = "" Then
                sqlStringGrp = "Grp='" & gruppeV.Item(i).Caption & "'"
            Else
                sqlStringGrp = sqlStringGrp & " OR Grp='" & gruppeV.Item(i).Caption & "'"
            End If
        End If
        Count = Count + 1
    Next [i]
End Sub
Avatar billede martin_moth Mester
20. april 2004 - 15:42 #17
Og du behøver ikke oprette kontrollerne runtime som jeg antydede at du _måske_ skulle.
Lækkert :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
Kurser inden for grundlæggende programmering

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