Avatar billede listige_luc Praktikant
08. august 2005 - 21:13 Der er 40 kommentarer og
1 løsning

Dato til Access database med SQL

I forlængelse af http://www.eksperten.dk/spm/638348.

Før havde jeg en dato opdelt i tre tekstfelter og nu er de lavet til et datofelt. Nu kan jeg ikke lige komme videre fra følgende:

dg=Day(Date())
md=Month(Date())
yyyy=YEAR(Date())
dato = ?

Set RS = Server.CreateObject("ADODB.Recordset")
Query = "SELECT * FROM ordre order by id"
RS.Open Query, Connupdate, adOpenStatic, adLockOptimistic
RS.AddNew
RS("kundeid") = kundeid
RS("dato") = dato
RS.Update
RS.Close
Set RS = Nothing

Jeg vil gerne bare have den til at opdatere db'en med den nye ordre med dags dato. Formatet skal derefter vises som dd-mm-åååå i stedet for åååå-mm-dd. Dags dato vil f.eks. vises som 08-08-2005 i stedet for 08-08-2005...hmm egentlig et dårligt eksempel. :-)

dg, md og yyyy er det gamle som virkede og de blev så sat sammen for at vises som en dato uden at have egenskab af det. Lidt fusket, men det tjente sit daværende formål. Jeg er ikke sikker at jeg overhovedet behøver dem længere, så jeg håber lidt på at kunne nøjes med noget i stil med " dato = Date ".
Avatar billede busschou Praktikant
08. august 2005 - 21:17 #1
når du indsætter datoen indsætter du den i yyyy-mm-dd format
Det er for at sikre der ikke bliver byttet om på måned og år
Deb burde blive vist normalt når du hiver den ud hvis du har sat indstillingerne til dansk !
Avatar billede nielle Nybegynder
08. august 2005 - 21:18 #2
Er det indsætningen af datoen i databasen der er dit problem, eller er det udskriften på skærmen?
Avatar billede busschou Praktikant
08. august 2005 - 21:18 #3
ved indsætning laver du
...
dg=Day(Date())
md=Month(Date())
yyyy=YEAR(Date())
dato = yyyy&"-"&md&"-"&dg
Avatar billede mugs Novice
08. august 2005 - 21:18 #4
Det tidligere spørgsmål var i Access kategorien, og jeg har intet forstand på ASP. I Access kan problemet løses meget simpelt ved i tabellen at sætte standardværdien for nye poster til Date.
Avatar billede listige_luc Praktikant
08. august 2005 - 21:21 #5
busschou --> jeg er med på formatet, men hvordan henter jeg det? Mener du for resten ikke måned og dag?
nielle --> Indsætningen...som det ser ud nu får jeg ingen dato. Jeg vil gerne have dato = 2005-08-08.
Avatar billede busschou Praktikant
08. august 2005 - 21:21 #6
i min database som er på dansk indsætter jeg i formatet yyyy-mm-dd
Hvad enten jeg hiver det ud af den på en asp side
Eller om jeg åbner access
Så vises det i dd-mm-yyyy format
Men hvis jeg beder den indsætte 04-08-2005 så indsættes det som 08-04-2005 fordi der af en og anden grund i sql overførslen altid tjekkes i formatet mm-dd-yyyy
Avatar billede listige_luc Praktikant
08. august 2005 - 21:22 #7
mugs --> fair nok. :-)
Avatar billede busschou Praktikant
08. august 2005 - 21:22 #8
listige_luc >> jo måned og dag. Som skrevet 21:18:54
Avatar billede busschou Praktikant
08. august 2005 - 21:23 #9
Du henter det vel ved
set rs = conn.execute("select * from tabel")
dato = rs("dato")
Avatar billede listige_luc Praktikant
08. august 2005 - 21:25 #10
busschou --> Øv, det giver mig denne fejl:

Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][ODBC Microsoft Access-driver] Handlingen skal bruge en opdaterbar forespørgsel.
Avatar billede busschou Praktikant
08. august 2005 - 21:25 #11
men du kan jo lave en funktion som du bruger hver gang ved indsættelse
--
Function getDate(dato)
  getDate = Year(dato)&"-"&Month(dato)&"-"&Day(dato)
End Function
--
Så kalder du jo bare ved
--
dato = getDate(Now())
Avatar billede busschou Praktikant
08. august 2005 - 21:26 #12
hvornår giver den dig det?
Der er jo forskel på om du henter eller updaterer
Jeg er ikke så meget inde i at updatere gennem recordset, bruger selv altid connetion til det ...såå
Avatar billede listige_luc Praktikant
08. august 2005 - 21:27 #13
Jeg skal ikke hente det fra tabellen. Jeg skal have den til at hente systemets dags dato og derefter gemme denne i tabellen. Det er dato variablen der volder mig problemer.
Avatar billede busschou Praktikant
08. august 2005 - 21:28 #14
hvis du tager min funktion burde din opdatering kunne køres som
----
Set RS = Server.CreateObject("ADODB.Recordset")
Query = "SELECT * FROM ordre order by id"
RS.Open Query, Connupdate, adOpenStatic, adLockOptimistic
RS.AddNew
RS("kundeid") = kundeid
RS("dato") = getDate(Now())
RS.Update
RS.Close
Set RS = Nothing
Avatar billede nielle Nybegynder
08. august 2005 - 21:30 #15
Siden det er din indsætning i databasen der er problemer, så kan du jo gøre det nogenlunde sådan her:

dg=Day(Date())
md=Month(Date())
yyyy=YEAR(Date())
dato = yyyy & "-" & md & "-" & dg

SQL = "INSERT INTO dinTabel (dato) VALUES (" & dato & ")"
Avatar billede nielle Nybegynder
08. august 2005 - 21:30 #16
Access, vil dog gerne have #-tegn om datoer:

dg=Day(Date())
md=Month(Date())
yyyy=YEAR(Date())
dato = yyyy & "-" & md & "-" & dg

SQL = "INSERT INTO dinTabel (dato) VALUES (#" & dato & "#)"
Avatar billede nielle Nybegynder
08. august 2005 - 21:31 #17
En nemmere måde er da forresten at gøre dette:

SQL = "INSERT INTO dinTabel (dato) VALUES (date())"
Avatar billede busschou Praktikant
08. august 2005 - 21:31 #18
nå ja manglede # ;o)
Avatar billede busschou Praktikant
08. august 2005 - 21:35 #19
jeg har set en del diskutioner omkring det herinde, det er noget med at access/sql delen opfatter det forskellet hvis det er en dato eller en streng, altså
dato = Date
dato = "08-08-2005"
Så vil
"Insert into tabel values (#"&dato&"#)"
blive tolket forskelligt, og det er så der man risikerer at der byttes om på dag og måned
Fx sker det hvis man tager datoen som input fra en form uden at typecaste den med CDate
Derfor har jeg selv gjort det til en vane med en funktion som omvender datoen til yyyy-mm-dd format hvorved man altid er sikker på at den opfattes som ønsket :o)

Men selvfølgelig med # på som nielle siger :o)
Avatar billede listige_luc Praktikant
08. august 2005 - 21:37 #20
Hmm...der sker mærkelige ting. Jeg testede lige en funktion som burde virke, men den melder fejl om at databasen er skrivebeskyttet.

Er det nødvendigt med en ny SQL? Kan jeg ikke gøre det gennem recordsettet?
Avatar billede listige_luc Praktikant
08. august 2005 - 21:39 #21
"Databasen eller objektet er skrivebeskyttet og kan ikke opdateres." Er den helt præcise fejl. Prøver lige det med getDate.
Avatar billede nielle Nybegynder
08. august 2005 - 21:39 #22
Der er slet ingen grund til overhovedet at lave et nyt recordsæt for at indsætte en enkelt række - det er faktisk lidt overkill.
Avatar billede listige_luc Praktikant
08. august 2005 - 21:41 #23
Mht. til getDate funktionen, så er jeg rimelige rusten, så paster jeg det bare før recordsettet sådan:

Function getDate(dato)
  getDate = Year(dato)&"-"&Month(dato)&"-"&Day(dato)
End Function

Set RS = Server.CreateObject("ADODB.Recordset")
Query = "SELECT * FROM ordre order by id"
RS.Open Query, Connupdate, adOpenStatic, adLockOptimistic
RS.AddNew
RS("kundeid") = kundeid
RS("dato") = getDate(Now())
RS.Update
RS.Close
Set RS = Nothing
Avatar billede nielle Nybegynder
08. august 2005 - 21:43 #24
F.eks. sådan:

SQL = "INSERT INTO ordre (kundeid, dato) VALUES ('" & kundeid & "', date())"
Connupdate.Execute(SQL)
Avatar billede listige_luc Praktikant
08. august 2005 - 21:43 #25
Jeg vil helst beholde recordsettet, da det er gennemgående for resten af ASP-siderne, og jeg vil helst ikke ændre for meget på det grundlæggende som egentlig virker, men bare skal tilpasses med et minimum af ændringer.
Avatar billede busschou Praktikant
08. august 2005 - 21:43 #26
funktionen kan stå hvor som helst på siden, og kan evt gemmes i en ekstern funktions fil som du kan includere på alle sider, så er den tilgængelig på alle sider hvor du har behov for den
Du skal bare huske at have # omkring som jeg glemte
Avatar billede nielle Nybegynder
08. august 2005 - 21:44 #27
... eller sådan:

dg=Day(Date())
md=Month(Date())
yyyy=YEAR(Date())

dato = yyyy & "-" & md & "-" & dg

SQL = "INSERT INTO ordre (kundeid, dato) VALUES ('" & kundeid & "', #' & dato & '#)"
Connupdate.Execute(SQL)
Avatar billede busschou Praktikant
08. august 2005 - 21:44 #28
nielle >> fordelen ved at benytte recordset er jo at man ikke nødvendigvis låser hele tabellen for andre brugere imens :o)
Avatar billede nielle Nybegynder
08. august 2005 - 21:45 #29
Enig, men det er jo altså også noget som æder resourser fra webserveren imens.
Avatar billede busschou Praktikant
08. august 2005 - 21:48 #30
nielle >> ok har jeg så ingen ide om, bruger selv connection, men det er også fordi jeg ikke har så vildt mange brugere at det gør noget med den smule kø der kan opstå
Avatar billede listige_luc Praktikant
08. august 2005 - 21:54 #31
Jeg bruger recordsettet, da jeg sender flere data videre til udskriv.asp, hvor jeg så udskriver ordren. Jeg ved endnu ikke hvordan visningen af datoformatet er endnu.
Avatar billede busschou Praktikant
08. august 2005 - 21:55 #32
ok har du fået den til at sætte det ordentlig ind?
Visningen giver sikkert sig selv :o)
Avatar billede listige_luc Praktikant
08. august 2005 - 22:01 #33
mht. til getDate funktionen igen hvor helt præcist skal jeg bruge #?
Avatar billede listige_luc Praktikant
08. august 2005 - 22:05 #34
Dette giver stadig samme fejl.

Function getDate(dato)
  getDate = Year(dato)&"-"&Month(dato)&"-"&Day(dato)
End Function

Set RS = Server.CreateObject("ADODB.Recordset")
Query = "SELECT * FROM ordre order by id"
RS.Open Query, Connupdate, adOpenStatic, adLockOptimistic
RS.AddNew
RS("kundeid") = kundeid
RS("dato") = getDate(Now())
RS.Update
RS.Close
Set RS = Nothing

Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][ODBC Microsoft Access-driver] Handlingen skal bruge en opdaterbar forespørgsel.
Avatar billede busschou Praktikant
08. august 2005 - 22:05 #35
i princippet behøves du ikke gøre det i funktionen men her
RS("dato") = "#getDate(Now())#"
Det vil sige
Jeg har ikke erfaring med at gøre det på den måde, men normalt skal de omkring og jeg tror det må være sådan for det svarer til
RS("dato") = "#2005-08-08#"
Avatar billede busschou Praktikant
08. august 2005 - 22:08 #36
jeg ved ikke hvorfor du får den fejl desværre måske nielle ved det
Avatar billede listige_luc Praktikant
08. august 2005 - 22:10 #37
Hmm...virker desværre heller ikke og giver samme fejl. Småændringer ved det resulterer i en syntaksfejl. Jeg vil sove på det og se på det med friske øjne imorgen på et tidspunkt.
Avatar billede nielle Nybegynder
08. august 2005 - 22:11 #38
Når du åbner dit recordset med adOpenStatic bliber det readonly. Prøv med adOpenDynamic i stedet.
Avatar billede listige_luc Praktikant
09. august 2005 - 17:19 #39
Nu virker det. Dette er hvad jeg har brugt:

dg=Day(Date())
md=Month(Date())
yyyy=YEAR(Date())
dato = yyyy&"-"&md&"-"&dg

Dette virker perfekt og lige som jeg vil have det. Det var selvfølgelig ikke der hvor fejlen lå, men i mit bibliotek på den lokale webserver. Jeg havde glemt at give skriveadgang...flot! :-) Dette skyldes at jeg arbejder med det på en anden computer. Det er så tåbeligt, når det er noget så banalt og grundlæggende, som bare skal være iorden.

busschou --> jeg har benyttet dit forslag, så smid et svar. :-)

nielle --> tak for de mange gode forslag og redegørelser.
Avatar billede busschou Praktikant
09. august 2005 - 17:51 #40
oki doki, glad jeg kunne hjælpe og godt det virker :o)
Avatar billede nielle Nybegynder
09. august 2005 - 20:09 #41
Takker for tak. Det er altid rart få at vide at ens hjælp værdsættes :^)
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