Avatar billede wilweb Nybegynder
03. september 2005 - 14:39 Der er 14 kommentarer og
1 løsning

Hent første record og sidste record fra acces

Jeg vil gerne hent første (dato) record og sidste (dato) record fra access database where gruppe = 115

min access ser sådan ud:
dato | gruppe
11-06-2005 | 115
12-06-2005 | 115
13-06-2005 | 115
14-06-2005 | 115
12-06-2005 | 116
13-06-2005 | 116
14-06-2005 | 116

jeg har prøvet med:

strSQL1 = "Select top 1 * from kalender where gruppe='115' order by dato Desc"
Set rs1 = conn.execute(strSQL1)   
dFirst=rs("dato")

strSQL = "Select top 1 * from kalender gruppe='115' order by dato Asc"
Set rs = conn.execute(strSQL)
dLast=rs("dato")

er det måden eller burde jeg gøre noget smartere?
Avatar billede wilweb Nybegynder
03. september 2005 - 14:40 #1
vender tilbage senere på eftermiddagen!
Avatar billede kalp Novice
03. september 2005 - 14:43 #2
Der er altid en bedre måde, at gøre tingene på, men som jeg altid siger.. hvis det virker.. hvorfor så gøre noget ved det?
Avatar billede nielle Nybegynder
03. september 2005 - 14:46 #3
SELECT Max(dato) As MaxDato, Min(dato) AS MinDato FROM kalender WHERE gruppe='115'
Avatar billede softspot Forsker
03. september 2005 - 16:42 #4
Der er ikke noget i vejen med at stræbe efter perfektion - sålænge man har råd til det ;)
Avatar billede nielle Nybegynder
03. september 2005 - 16:54 #5
Der er heller ikke noget i vejen med at stræbe efter at lave mere effektiv kode. Ovenstående belaster databasen mindre idet:

1) Der er kun 1 kald i stedet for 2, og
2) Da løsningen ikke bruger ORDER BY, spare databasen at skulle sortere hele tabellen før at den kan returnere det første element.
Avatar billede softspot Forsker
03. september 2005 - 16:56 #6
Netop min point, nielle ;)
Avatar billede wilweb Nybegynder
03. september 2005 - 19:44 #7
strSQL= "SELECT Max(dato) As MaxDato, Min(dato) AS MinDato FROM kalender WHERE gruppe='115'"
Set rs = conn.execute(strSQL)   
skal jeg så udskrive dem:
response.write rs.MAxDato
response.write rs.MinDato
?
Avatar billede nielle Nybegynder
03. september 2005 - 19:46 #8
Næsten rigtigt. Sådan:

strSQL= "SELECT Max(dato) As MaxDato, Min(dato) AS MinDato FROM kalender WHERE gruppe='115'"
Set rs = conn.execute(strSQL)   

response.write rs("MAxDato")
response.write rs("MinDato")
Avatar billede wilweb Nybegynder
03. september 2005 - 19:57 #9
Jeg er godt nok ikke så hurtig!
Det er jo meningen at jeg skal have flere records ud, jeg ved ikke om det er mig der gør noget forkert, når jeg tænkte at jeg kunne gøre sådanne her:
strSQL="SELECT besked, overskrift, starttid, sluttid, Max(dato) As MaxDato, Min(dato) AS MinDato FROM kalender WHERE gruppe='115'"   
Set rs = conn.execute(strSQL)   
if not rs.eof or rs.bof then
session("overskrift") = rs("overskrift")
session("besked") = rs("besked")
starttid = CStr(left(rs("starttid"),5))
sluttid = CStr(left(rs("sluttid"),5))
session("strDato1") = rs("MaxDato")
session("strDato2") = rs("MinDato")
'response.write "<br>" &starttid & "  -  " & sluttid & "<br>"
'response.write session("strDato1") & "  -  " & session("strDato2")
end if
Avatar billede wilweb Nybegynder
03. september 2005 - 19:59 #10
JEg får denne fejl
Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access-driver] Du har forsøgt at køre en forespørgsel, der ikke medtager det angivne udtryk "besked" som en del af en aggregatfunktion.
/default.dk/kalender/edit.asp, line 44

Hele min table ser så danne ud:
id|dato|overskrift|gruppe|besked|starttid|sluttid
Avatar billede nielle Nybegynder
03. september 2005 - 20:02 #11
Det lader ikke til at du kan kombinere det på den måde. Der skal sandsynligvis en SQL til det første:

strSQL = "SELECT Max(dato) As MaxDato, Min(dato) AS MinDato FROM kalender WHERE gruppe='115'"

- og en anden SQL til resten:

strSQL = "SELECT besked, overskrift, starttid, sluttid WHERE gruppe='115'"
Avatar billede wilweb Nybegynder
03. september 2005 - 20:04 #12
Ok, og tak for din tålmodighed
Avatar billede nielle Nybegynder
03. september 2005 - 20:05 #13
Svar :^)
Avatar billede wilweb Nybegynder
03. september 2005 - 20:11 #14
Takker for hjælpen
Avatar billede kjulius Novice
04. september 2005 - 21:42 #15
Mig bekendt kan det godt lade sig gøre i én SQL sætning. Du skal bare huske at opføre alle felter som ikke bruges af en aggregat funktion (som er SUM, COUNT, AVG osv.) på en GROUP BY, altså i dit tilfælde:

strSQL="SELECT besked, overskrift, starttid, sluttid, Max(dato) As MaxDato, Min(dato) AS MinDato FROM kalender WHERE gruppe='115' GROUP BY besked, overskrift, starttid, sluttid"
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