/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Insert dato virker ikke
Fra : Finn


Dato : 27-11-02 12:45

jeg har et felt med dato-format i en Access DB, men uanset hvordan jeg
næsten skriver min insert får jeg fejl

Har bl.a. prøvet denne:

strSQL = "Insert into T_Dagbog (dato,besked) "

strSQL = strSQL & "values ('" & Request.Form(#dato#) & "', "
strSQL = strSQL & "'" & Request.Form("besked") & "')"

men hvor er fejlen ?
(Hvis # erstattes af " i et tekstfelt er det OK, men det er jo ikke
meningen)
Håber nogen kan finde min fejl. Tak



 
 
Jens Gyldenkærne Cla~ (27-11-2002)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 27-11-02 13:05

Finn skrev:

> strSQL = strSQL & "values ('" & Request.Form(#dato#) & "', "

Når du bruger Request.Form skal du _altid_ benytte anførselstegn -
alle variabler i asp er af typen variant, så det gør ingen forskel
her om dit datofelt indeholder en dato eller en tekst.

Når du sætter datoen ind i en sql-sætning skal du så sætte #
omkring. Det vil sige:

strSQL = strSQL & "values (#" & Request.Form("dato") & "#, ...


> Håber nogen kan finde min fejl. Tak

En helt anden ting er at det er en meget dårlig idé at sende
brugerinput ubehandlet til en database. Datoen kan være ugyldig, og
dine tekstfelter kan indeholde ' (enkelt anførselstegn) som kan få
sqlsætningen til at fejle - eller værre endnu, give et helt andet
resultat end du forventer.

Læg dine formvariable over i asp-variable først og lav validering
inden du kører sqlsætningen - det kan godt betale sig.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Finn (27-11-2002)
Kommentar
Fra : Finn


Dato : 27-11-02 13:47

>
> strSQL = strSQL & "values (#" & Request.Form("dato") & "#, ...

giver denne fejl:

[Microsoft][ODBC Microsoft Access Driver] Syntax error in date in query
expression '#27.11.2002#'.

Værdien fra Req.form er denne:
<input type="text" name="dato" size="10" value="<% Response.Write
Day(Date()) & "." & Month(Date()) & "." & Year(Date())%>">



Jens Gyldenkærne Cla~ (27-11-2002)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 27-11-02 14:04

Finn skrev:

> [Microsoft][ODBC Microsoft Access Driver] Syntax error in date
> in query expression '#27.11.2002#'.

#27-11-2002# eller #11-27-2002# vil formentlig virke. Det er noget
uheldigt at formatet "xx-yy-z" både kan opfattes som "dd-mm-
yyyy" og som "mm-dd-yyyy". Du kan slippe for at tænke på
datoformatet hvis du bruger funktionen DateSerial til at lave
datoen. Den benytter formatet Dateserial(yyyy, mm, dd).

> Værdien fra Req.form er denne:
> <input type="text" name="dato" size="10" value="<%
> Response.Write Day(Date()) & "." & Month(Date()) & "." &
> Year(Date())%>">

Hov - hvis du bare skal indsætte dags dato i databasen kan du
slippe meget, meget lettere om det.
Det letteste er at definere standardværdien for feltet til Now() -
så behøver du slet ikke at medtage feltet i din insert-
forespørgsel.
Du kan også benytte funktionen Now() i selve insertsætningen:

INSERT INTO tabelnavn (datofelt) VALUES (Now())
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Finn (27-11-2002)
Kommentar
Fra : Finn


Dato : 27-11-02 14:18


"Jens Gyldenkærne Clausen" skrev
>
> #27-11-2002# eller #11-27-2002# vil formentlig virke.
Hvis jeg skriver datoen direkte i databasen er formatet det samme som i mit
input felt
men jeg kan lege lidt med det.

> Det letteste er at definere standardværdien for feltet til Now() -

Jeg har anvendt Now() men syntes at det er rart man kan ændre datoen før
inputtet.
Fordelen ved mit valg var at brugeren kunne se formatet og kunne nøjes med
at ændre den del af datoen der var forkert. (Mest dagen) Jeg har en asp fil
der danner felterne til input og dereftet submitter til mit INSERT



Jens Gyldenkærne Cla~ (27-11-2002)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 27-11-02 14:30

Finn skrev:

>> #27-11-2002# eller #11-27-2002# vil formentlig virke.

> Hvis jeg skriver datoen direkte i databasen er formatet det
> samme som i mit input felt

Det kan du desværre ikke bruge til ret meget. Access definerer
visninger på tabeller som afgør hvordan det ser ud når du åbner
tabellen direkte. Men når du indsætter data via sql bruges
visningsformatet ikke.

> men jeg kan lege lidt med det.

Prøv evt. at lave en forespørgsel der indsætter eller opdaterer en
dato, og skift så til sql-visning for at se hvordan den står dér.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jesper Stocholm (27-11-2002)
Kommentar
Fra : Jesper Stocholm


Dato : 27-11-02 15:21

Jens GyldenkærneClausen wrote in
dk.edb.internet.webdesign.serverside.asp:


> Du kan også benytte funktionen Now() i selve insertsætningen:
>
> INSERT INTO tabelnavn (datofelt) VALUES (Now())

INSERT INTO tabelnavn (datofelt) VALUES ('" & Now() & "'')"

?

Mig bekendt kender hverken mySQL, MS Access eller MS SQL til
kommandoen Now(), og med dit forslag vil Now() skulle fortolkes af
datalaget (fx Access) og ikke applikationslaget (her ASP).

... jeg kan self tage fejl, men jeg undrede mig lidt over det.



/Jesper Stocholm
http://stocholm.dk
Svar til gruppen og ikke til mig privat !


--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Jens Gyldenkærne Cla~ (27-11-2002)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 27-11-02 16:27

Jesper Stocholm skrev:

>> INSERT INTO tabelnavn (datofelt) VALUES (Now())
>
> INSERT INTO tabelnavn (datofelt) VALUES ('" & Now() & "'')"

Nej (jeg skal dog ikke afvise at det vil virke på den måde).

> Mig bekendt kender hverken mySQL, MS Access eller MS SQL til
> kommandoen Now(), og med dit forslag vil Now() skulle
> fortolkes af datalaget (fx Access) og ikke applikationslaget
> (her ASP).

Ja - Now forstås af Access, i hvert fald hvis jeg kører funktionen
direkte i Access. Jeg har ikke prøvet at køre det fra en webside -
men jeg mener at den skulle være god nok.
Funktionen er databasespecifik, så den virker ikke udenfor Access -
men nu var det også Access det drejede sig om.
(I MSSQL hedder den tilsvarende funktion GETDATE() - den kan så
vidt vides bruges på præcis samme måde).
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jesper Stocholm (27-11-2002)
Kommentar
Fra : Jesper Stocholm


Dato : 27-11-02 16:36

Jens Gyldenkærne Clausen wrote :

> Jesper Stocholm skrev:

>> INSERT INTO tabelnavn (datofelt) VALUES ('" & Now() & "'')"
>
> Nej (jeg skal dog ikke afvise at det vil virke på den måde).



>> Mig bekendt kender hverken mySQL, MS Access eller MS SQL til
>> kommandoen Now(), og med dit forslag vil Now() skulle
>> fortolkes af datalaget (fx Access) og ikke applikationslaget
>> (her ASP).
>
> Ja - Now forstås af Access, i hvert fald hvis jeg kører funktionen
> direkte i Access. Jeg har ikke prøvet at køre det fra en webside -
> men jeg mener at den skulle være god nok.

fair nok ... :)

> Funktionen er databasespecifik, så den virker ikke udenfor Access -
> men nu var det også Access det drejede sig om.
> (I MSSQL hedder den tilsvarende funktion GETDATE() - den kan så
> vidt vides bruges på præcis samme måde).

ok ... jeg var ikke klar over, at Now() blev forstået af Access, men jeg
var ganske klar over, at det fx hedder fx GetDate() i andre RDBMS'er.



--
Jesper Stocholm
http://stocholm.dk
Ny FAQ for dk.edb.internet.webdesign.serverside.asp
se http://asp-faq.dk

Jørn Andersen (28-11-2002)
Kommentar
Fra : Jørn Andersen


Dato : 28-11-02 00:58

On Wed, 27 Nov 2002 16:27:26 +0100, Jens Gyldenkærne Clausen
<jens@gyros.invalid> wrote:

>> Mig bekendt kender hverken mySQL, MS Access eller MS SQL til
>> kommandoen Now(), og med dit forslag vil Now() skulle
>> fortolkes af datalaget (fx Access) og ikke applikationslaget
>> (her ASP).
>
>Ja - Now forstås af Access, i hvert fald hvis jeg kører funktionen
>direkte i Access. Jeg har ikke prøvet at køre det fra en webside -
>men jeg mener at den skulle være god nok.

Det kan jeg bekræfte - jeg plejer at bruge den, så man slipper for at
tænke på dato-formatet.


Hvilket leder frem til en af mine "yndlings-teser":
"Den mest udbredte årsag til datoproblemer i ASP er, at man glemmer at
skelne mellem dato-*værdier* og dato-*formater*."


I Access er problemet normalt let at løse ved at bruge (Access's)
DateSerial- og TimeSerial-funktioner, så er man uafhængig af om Access
og VB Script bruger samme format.

Brug fx denne funktion til at indsætte dato-værdier i SQL-strengen.
<%
' -- DateToSql start --
Function DateToSql(Value)
DateToSql = "DateSerial(" & Year(Value) & ", " & _
Month(Value) & ", " & _
Day(Value) & ") + " & _
"TimeSerial(" & Hour(Value) & ", " & _
Minute(Value) & ", " & _
Second(Value) & ")"
End Function
' -- DateToSql slut --
%>

Bruges fx således:
... VALUES (" & DateToSql(datDato) & ", ...
- hvor datDato er en gyldig dato/tidsangivelse.

NB: Virker kun i MS Access, men der er sikkert lignende muligheder i
andre systemer.




Good luck!

--
Jørn Andersen,
Brønshøj

N/A (27-11-2002)
Kommentar
Fra : N/A


Dato : 27-11-02 14:18



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408937
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste