Avatar billede gushansson Nybegynder
16. februar 2007 - 17:47 Der er 25 kommentarer og
3 løsninger

DTPicker SQL Between

Hej

Har følgende:

  start1 = Format(DTPicker1.Value, "dd MMM yyyy")
  start2 = Format(DTPicker2.Value, "dd MMM yyyy")

Hvor start1 = 26 jan 2007 og start2 er = 12 feb 2007.

I min testdatabase har jeg to records, hvor datoerne er:

28 jan 2007 og
10 feb 2007.

Jeg anvender følgende SQL:

SQL = "SELECT * FROM tbl_test " & _
      "WHERE Dato BETWEEN " & "'" & start1 & "'" & " and " & "'" & start2 & "'"
rssum.Open SQL, dbsum, 1, 3

Jeg forventer et udtræk, hvor jeg får begge records med, men det sker ikke fordi den først dato (start1) er større end dato (start2) dvs. jeg får kun record nr. 2 ud (feb. måned).

Men hvordan får jeg begge records med i udtrækket?

Normal er et udtræk i DTPicker fra d. 01 jan 2007
til d. 10 jan 2007 og her virker det fint nok for dato et er mindre.
Avatar billede kalp Novice
16. februar 2007 - 17:56 #1
lav din sql om til

SQL = "SELECT * FROM tbl_test " & _
      "WHERE '" & start1 & "' >= Dato AND '" & start2 &"' <= Dato "
rssum.Open SQL, dbsum, 1, 3
Avatar billede gushansson Nybegynder
16. februar 2007 - 18:15 #2
Desværre, så viser recordset = true dvs. SQL'en finder ikke mine records. Andre løsninger?
Avatar billede kalp Novice
16. februar 2007 - 18:24 #3
forstår ikke hvad du mener med at start1 er større en start2..
hvorfor er den det? januaer er da før feb og så er den vel mindre.
Avatar billede gushansson Nybegynder
16. februar 2007 - 18:27 #4
Ja, men da det er en string jeg anvender, så tjekker den på første karakter i denne string og start1 er f.eks. 26 og start2 er 12. Giver det mening?
Avatar billede gushansson Nybegynder
16. februar 2007 - 18:28 #5
Ved ikke om mit svar kom frem...
Avatar billede kalp Novice
16. februar 2007 - 18:30 #6
hvilken db?
Avatar billede gushansson Nybegynder
16. februar 2007 - 18:31 #7
Access
Avatar billede gushansson Nybegynder
16. februar 2007 - 18:32 #8
Set dbsum = New ADODB.Connection
  dbsum.ConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & App.Path & "\Test.mdb"
  dbsum.Open
Avatar billede kalp Novice
16. februar 2007 - 18:40 #9
prøv

SQL = "SELECT * FROM tbl_test " & _
      "WHERE Dato BETWEEN " & "'" & Int(start1) & "'" & " and " & "'" & Int(start2) & "'"
rssum.Open SQL, dbsum, 1, 3
Avatar billede gushansson Nybegynder
16. februar 2007 - 18:45 #10
Type mismatch error code 13
Avatar billede kalp Novice
16. februar 2007 - 18:46 #11
tænkte jeg nok.. har en løsning hvis altså du kan svare ja til dette..
i din db.. starter dine dato'er altid med 2 cifre?
altså 01, for den første ?
Avatar billede gushansson Nybegynder
16. februar 2007 - 18:47 #12
bemærk at en konvertering med int og der er en streng i nemlig: jan og feb så bliver det mismatch code da det er string.
Avatar billede kalp Novice
16. februar 2007 - 18:48 #13
SQL = "SELECT * FROM tbl_test " & _
      "WHERE Dato BETWEEN " & "'" & Int(Left(start1,2)) & "'" & " and " & "'" & Int(Left(start2,2)) & "'"
rssum.Open SQL, dbsum, 1, 3


hvis ja.. så skal den der virke
Avatar billede kalp Novice
16. februar 2007 - 18:50 #14
eller ja.. måske ikke fordi der selvfølgelig er de der '', men Dato skal så også laves til et tal.. så vil det virke:=)
Avatar billede gushansson Nybegynder
16. februar 2007 - 18:52 #15
Desværre, recordset igen true. Finder ikke noget. Har kopieret hele din SQL ind. Ja, den er svær...
Avatar billede kalp Novice
16. februar 2007 - 18:54 #16
SQL = "SELECT * FROM tbl_test " & _
      "WHERE Int(Left(Dato,2)) BETWEEN " & Int(Left(start1,2)) & " AND " & Int(Left(start2,2)) & " "
rssum.Open SQL, dbsum, 1, 3

skal være sådan der
Avatar billede kalp Novice
16. februar 2007 - 19:00 #17
jeg spiser lige..
hvis syntaxen var fin i den før så kan jeg ikke se hvorfor det ikke virker..
der sammenlignes på tal nemlig.

så skal det være fordi dine dato'er ikke altid starter med to cifre:)
Avatar billede gushansson Nybegynder
16. februar 2007 - 20:15 #18
Stadigvæk true men ingen compiler fejl i SQL. Men hvis du siger, at du tjekker på tal, så er første tal jo også højre end tal 2 dvs. 26 her større end 12 og derfor finder SQL ikke noget og viser recordset = true.
I min DTPicker er dato altid på to cifre 01, 12 osv.
Avatar billede gushansson Nybegynder
16. februar 2007 - 20:15 #19
Har gæster, så jeg løber ind imellem he he
Avatar billede gushansson Nybegynder
16. februar 2007 - 20:20 #20
Se, hvis jeg ændrede data i min database, så første data (start1) var f.eks. 11 jan 2007 og start2 var 12 feb 2007, så lykkes din SQL fordi start1 er mindre end 12 feb 2007 altså 11 jan 2007, så derfor virker din SQL. Men igen, hvis start1 ændres til større end 12, så giver recordset = true. damm take it :-).
Avatar billede kalp Novice
16. februar 2007 - 20:20 #21
så skal man sikkert konvertere din dato'er til rigtigte dato'er men ved ikke rigtig hvordan man gør det når du har dine dato'er på den måde. fordi de ikke er skrevet som 01/01/2007 men 01 jan 20007
Avatar billede gushansson Nybegynder
16. februar 2007 - 20:27 #22
Men det kan vi vel bare gøre. Dvs. DTPicker skal altså i format ændres inden der søges?
Avatar billede kalp Novice
16. februar 2007 - 20:32 #23
ja men jeg har ikke rigtig benyttet funktionen da mine dato'er aldrig er strings:)
men det vil jo helt sikkert løse problemet da du så får data der kan sammenlignes korrekt
Avatar billede gushansson Nybegynder
16. februar 2007 - 20:36 #24
Ok, men du skal have dine point alligevel for din kamp :-)
Avatar billede gushansson Nybegynder
16. februar 2007 - 20:40 #25
Har du fået mine point?
Avatar billede kalp Novice
16. februar 2007 - 20:43 #26
nej det er også okay:) læg dem i et nyt spørgsmål så er de bedre givet:)

du får dine point igen ved at markere dit eget navn i den der lille boks omkring nederst i venstre hjørne og så trykker du på accepter svar
Avatar billede madsmpedersen Nybegynder
28. februar 2007 - 08:47 #27
Hej
Ved ikke om du har fundet en løsning, ellers tror jeg følgende virker.
Acces skal altid have måned før dag, når man indsætter og søger.

start1 = Format(DTPicker1.Value, "yyyy-mm-dd")
start2 = Format(DTPicker2.Value, "yyyy-mm-dd")
SQL = "SELECT * FROM tbl_test " & _
"WHERE Dato BETWEEN " & "#" & start1 & "#" & " and " & "#" & start2 & "#"
rssum.Open SQL, dbsum, 1, 3
Avatar billede gushansson Nybegynder
28. februar 2007 - 16:11 #28
Hej

Ja, jeg har fundet løsningen. Tak alligevel :-).
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