Avatar billede ndh Nybegynder
04. april 2002 - 08:54 Der er 22 kommentarer og
1 løsning

Søge på årstals-intervaller

I forbindelse med udarbejdelse af en søgemaskine i en Accessdb har jeg brug at kunne foretage en årstals-intervalsøgning. Jeg skal fx kunne søge efter poster, der oprettet i intervallet fra 1970 til 1990. Hvordan vil sql-sætningen se ud, der kan løse det problem?
Avatar billede olhansen Nybegynder
04. april 2002 - 08:57 #1
Hvad type er feltet i databasen? Hvis dit felt er af type heltal kan din SQL select se sådan ud:

select * from TABEL where AAR> 1970 and AAR<1990
Avatar billede ndh Nybegynder
04. april 2002 - 09:01 #2
Hvad mener du med heltal - om det har datatypen DATO OG KLOKKESLET i db´en?
Undskyld min måske uklare formulering af ovenstående spørgsmål, men jeg ønsker sql-sætningen, hvor årstallene kan variere. Dvs. det fx både skal være muligt at søge på intervallet 1952 til 1974 som på 1970 til 1990.
Avatar billede olhansen Nybegynder
04. april 2002 - 09:19 #3
Ok.

I ASP ser det således ud:



Dim Conn
Dim dbNavn
Dim sSql
Dim RS
Dim dFraAar
Dim dTilAar

dFraAar=1970 'kan evt hentes fra request.querystring
dFraAar=1990 'kan evt hentes fra request.querystring

dbNavn="database.mdb"

'Open database
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Provider = "Microsoft.Jet.OLEDB.4.0"
Conn.Mode=1
Conn.Open dbNavn,"",""


sSql="select * from TABEL where AAR>" & dFraAar & " and AAR<" & dTilAar

Set RS=Conn.Exequte(sSql)




Dette vil åbne et recordset for dig hvis felttypen er HELTAL
Avatar billede ndh Nybegynder
04. april 2002 - 09:20 #4
Jeg tester det lige af og vender tilbage hurtigst muligt
Avatar billede wilweb Nybegynder
04. april 2002 - 09:25 #5
strSQL = "Select * From tabel Where Month(række der indholder Dato)> 1970 and Month(række der indholder Dato)>1990"

Kunne måske gøre, det men er ikke testet!
Gizom:>
Avatar billede wilweb Nybegynder
04. april 2002 - 09:27 #6
strSQL = "Select * From tabel Where Month(AAR)> 1970 and Month(AAR)>1990"

Hvis AAR er din Dato række i DB
Avatar billede ndh Nybegynder
04. april 2002 - 10:10 #7
Jeg kan ikke rigtig få det til at virke, idet scriptet blot tager alle poster med, hvor der indgår årstal. Intervaldelen af scriptet ser således ud:

strSQL = "SELECT * FROM Tabel WHERE"
strSQL = strSQL & " (AAR> '" & dFraAar & "')"
strSQL = strSQL & " AND (AAR< '" & dTilAar & "')"
Hvad er galt?
Avatar billede olhansen Nybegynder
04. april 2002 - 10:22 #8
Hvilken type er feltet AAR ?
Avatar billede wilweb Nybegynder
04. april 2002 - 10:26 #9
KAn skriver "datatypen DATO OG KLOKKESLET i db´en?"
Avatar billede wilweb Nybegynder
04. april 2002 - 10:26 #10
KAn = Han
Avatar billede ndh Nybegynder
04. april 2002 - 10:27 #11
Datatypen er tekst
Avatar billede wilweb Nybegynder
04. april 2002 - 10:29 #12
Så er det jo ikke let når du skriver "datatypen DATO OG KLOKKESLET i db´en?"
:>
Avatar billede ndh Nybegynder
04. april 2002 - 10:34 #13
Jeg er ikke helt med. Jeg spørger nu feltet om skal være af datatypen dato og klokkeslet
Avatar billede olhansen Nybegynder
04. april 2002 - 10:47 #14
Hvis du kan vælge er det bedst at gemme årstallet som tal (langt heltal). Fordi det så er enklere at lave søgningen, og indexering vil få opslaget til at gå kvikt.
Avatar billede wilweb Nybegynder
04. april 2002 - 11:06 #15
Kan du bruge dette her?
datatypen er DATO OG KLOKKESLET i db´en
din AAR er her strDato
din Table = tbl_Dato


<%
MyYear = Year(Date)
SeekYear1 = 1957 'kunne komme fra en querystring
SeekYear2 = 1970 'kunne komme fra en querystring
Seek1 = SeekYear1
Seek2 = SeekYear2

'open db
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath ("data/dato.mdb")
Conn.Open DSN

strSQL = "SELECT strDato FROM tbl_Dato" 'hente alle års tal ind

Set rs = Conn.Execute(strSQL)
    'skriver de 2 årstal ud vi søger efter
    response.write "1 søge år : " & Seek1 & "<br>"
    response.write "2 søge år : " & Seek2 & "<br>"
    Do While Not rs.EOF'loop'er igennem vores års tal og udskriver alle års tal der er lig med eller imellem Seek1 og Seek2
        if SeekYear1 <= Year(rs("strDato")) and SeekYear2 => Year(rs("strDato")) then
          Response.write "år : " & Year(rs("strDato")) & "<br>"
        end if   
    rs.MoveNext
    Loop
'Luk database
Conn.Close
Set Conn = Nothing
%>
Avatar billede coltau Juniormester
04. april 2002 - 11:08 #16
Hvis du på nuværende tidspunkt har datoen gemt som dato/tid så kan du roligt bruge denne SQL i Access:

YFra = "1970"
YTil = "1990"
SQL = "select * from tabelnavn where Year(Dato)>=" & YFra & " and Year(Dato)<=" & YTil
Avatar billede coltau Juniormester
04. april 2002 - 11:09 #17
Da Access understøtter funktion YEAR kan det jo gøres i en SQL-sætning. !
Avatar billede ndh Nybegynder
04. april 2002 - 11:11 #18
Olhansen dit svar virker og du skal have pointene. Problemet er bare at jeg ikke kan give dig dem rent teknisk, idet dit navn ikke optræder blandt de personer jeg kan tildele point. Her optræder kun Gizom og coltau. Hvad gør vi??
Avatar billede wilweb Nybegynder
04. april 2002 - 11:13 #19
ndh :> ikke for at fratage olhansen æren, men du bør prøve coltau løsning. den er nok den mest rigtige!
Avatar billede wilweb Nybegynder
04. april 2002 - 11:18 #20
Ellers del dine point blandt os, vi har jo alle lagt et arbejde i at hjælpe dig.
Avatar billede olhansen Nybegynder
04. april 2002 - 14:07 #21
Hej!

Måske fordi jeg ikke markerer SVAR ude til venstre?

Ove
Avatar billede olhansen Nybegynder
04. april 2002 - 14:10 #22
og tak.
gizom: den rigtige løsning er den der passer til datatypen. Det går ikke an at fyre Year() af på et tekst felt. Og løsningen er ikke scalerbar, da Year() ikke er standard SQL, så hvis der skiftes til oracle eller SQL-server, vil dette ikke virke.

God weekend allesammen
Avatar billede wilweb Nybegynder
04. april 2002 - 14:41 #23
olhnsen:> No hard feelings, og ja det ved jeg godt at Year ikke er standard i SQL, men han spurgte til Access DB og jeg forstod det som om at han brugte datatypen DATO OG KLOKKESLET i db´en.
Jeg vil nok bare ikke bruge så meget tid næste gang, på at besvare spørgsmål, når jeg åbenbart ikke har fattet et døjt om hvad spørgeren vil have af svar.
coltau forslag til en Access db løsning virker helt som det skal!  men alligevel syntes jeg han brude have delt point imellem jer.
Lidt tidlig weekend du holder dig :>
Gizom
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