|
| Dato i access db Fra : Privathospitalet Ham~ |
Dato : 23-04-04 11:49 |
|
Hej
Jeg har en form, hvor der udfyldes nogle tekst felter, samt 3 dato felter.
Alt fungere fint hvis dato felterne er udfyldt. Hvis dato felterne ikke er
udfyldt virker det ikke. Dato felterne i DB er ikke obligatoriske.
Nedenfor er det kode der håndterer datoerne.
Venligst
Gunnar
kodeudsnit start:
'Dato formatering:
Function FormatDato(theDate)
FormatDato = month(thedate) & "-" & day(thedate) & "-" & year(thedate)
End Function
DIM afvistdato, hdato, tilbdato
IF LEN(request.form("henvisdato")) > 0 THEN
hdato = request.form("henvisdato")
hdato = FormatDato(hdato)
Else
hdato = Null
End if
IF LEN(request.form("afvist")) > 0 THEN
afvistdato = request.form("afvist")
afvistdato = FormatDato(afvistdato)
Else
afvistdato = Null
End if
IF LEN(request.form("tilbagetrukket")) > 0 THEN
tilbdato = request.form("tilbagetrukket")
tilbdato = FormatDato(tilbdato)
Else
tilbdato = Null
END IF
Kodeudsnit slut !
| |
Jens Gyldenkærne Cla~ (23-04-2004)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 23-04-04 14:16 |
|
Privathospitalet Hamlet skrev:
> Hvis dato felterne ikke er udfyldt virker det ikke.
*Hvordan* virker det ikke? Får du en asp-fejl - hvis ja, så
hvilken?
Læs evt. < http://asp-faq.dk/article/?id=41>
> IF LEN(request.form("henvisdato")) > 0 THEN
> hdato = request.form("henvisdato")
> hdato = FormatDato(hdato)
> Else
> hdato = Null
> End if
Hvis der ikke er angivet en dato i formen, bliver din datovariabel
formentlig sat til Null - det er fint nok.
Men spørgsmålet er hvordan du håndterer datovariablen i forhold til
dit sql-kald. Hvis du fx skriver noget i retning af:
sql = "INSERT INTO tabel (datofelt) VALUES (" & hdato & ")"
- så vil der ikke stå noget i parentes 2 hvis hdato er Null. Hvis
du i stedet sætter hdato = "Null", så vil ovenstående insert
fungere.
NB: Din datoformateringsfunktion kan give fejl hvis opsætningen på
serveren ændres. Du skriver:
> Function FormatDato(theDate)
> FormatDato = month(thedate) & "-" & day(thedate) & "-" &
> year(thedate)
> End Function
Der er to potentielle problemer. For det første kræver din kode at
"theDate" opfattes korrekt som en dato-værdi i vbscript. For det
andet kan den tekstrepræsentation af datoen som funktionen leverer
fortolkes forkert af databasen. Det sidste problem kan løses ved at
lade funktionen returnere en kald til Access-funktionen DateSerial
- fx som her:
Function DateToSql(Value)
If isDate(Value) Then
DateToSql = "DateSerial(" & Year(Value) & ", " & _
Month(Value) & ", " & _
Day(Value) & ") "
Else
DateToSql = "Null"
End If
End Function
Funktionen her returnerer en dato-repræsentation der kan bruges
direkte i Access - uanset om datoen er null eller en reel dato.
Man kan blot skrive:
sql = "INSERT INTO Tabel (datofelt) VALUES (" & _
DateToSql(datovar) & ")"
Med hensyn til det første problem, kan det elimineres på
forskellige måder - enten ved at lade separate bokse til de tre
datodele eller fx ved at bruge tekstfunktioner til at splitte
datoen i tre dele.
--
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
| |
Privathospitalet Ham~ (23-04-2004)
| Kommentar Fra : Privathospitalet Ham~ |
Dato : 23-04-04 16:14 |
|
> *Hvordan* virker det ikke? Får du en asp-fejl - hvis ja, så
> hvilken?
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria
expression.
/Amtspatient/admin/opret2.asp, line 39
Linie 39: Set rs = Conn.Execute (sql)
sql strengen ser sådan ud:
Insert Into patient(CPR, Fornavn, Efternavn, AMT, Andet, Speciale, Diagnose,
Henvisdato, Afvist, Tilbagetrukket) Values
('112233-4455','_AAAA','BBCCDDEE','Bornholms
Amt','Andet','Speciale','Diagnose','DateSerial(1, 4, 2004) ','DateSerial(2,
4, 2004) ','Null')
Har ændret koden til, men nu virker den hverken ved alle datoer udfyldt
eller ellers. Jeg tror jeg har misforstået dit råd:
<% response.buffer = true
strDSN = "DRIVER={Microsoft Access Driver
(*.mdb)};DBQ="&Server.MapPath("../Amtspatient.mdb")
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open strDSN
DIM afvistdato, hdato, tilbdato
Function DateToSql(Value)
If isDate(Value) Then
DateToSql = "DateSerial(" & Day(Value) & ", " & _
Month(Value) & ", " & _
Year(Value) & ") "
Else
DateToSql = "Null"
End If
End Function
hdato = request.form("henvisdato")
hdato = DateToSql(hdato)
afvistdato = request.form("afvist")
afvistdato = DateToSql(afvistdato)
tilbdato = request.form("tilbagetrukket")
tilbdato = DateToSql(tilbdato)
sql = "Insert Into patient(CPR, Fornavn, Efternavn, AMT, Andet, Speciale,
Diagnose, Henvisdato, Afvist, Tilbagetrukket) Values ('"
sql = Sql & request.form("CPR") & "','"
sql = sql & request.form("Fornavn") & "','"
sql = sql & request.form("Efternavn") & "','"
sql = sql & request.form("AMT") & "','"
sql = sql & request.form("Andet") & "','"
sql = sql & request.form("Speciale") & "','"
sql = sql & request.form("Diagnose") & "','"
sql = sql & hdato & "','"
sql = sql & afvistdato & "','"
sql = sql & tilbdato & "')"
'response.write sql
'response.end
Set rs = Conn.Execute (sql)
Conn.Close
response.redirect ("admin.asp")
%>
| |
Jens Gyldenkærne Cla~ (23-04-2004)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 23-04-04 16:43 |
|
Privathospitalet Hamlet skrev:
> [Microsoft][ODBC Microsoft Access Driver] Data type mismatch
> in criteria expression.
Fejlen betyder at du forsøger at indsætte en datatype der ikke
passer til det felt den skal indsættes i.
> sql strengen ser sådan ud:
> Insert Into patient(CPR, Fornavn, Efternavn, AMT, Andet,
> Speciale, Diagnose, Henvisdato, Afvist, Tilbagetrukket) Values
> ('112233-4455','_AAAA','BBCCDDEE','Bornholms
> Amt','Andet','Speciale','Diagnose','DateSerial(1, 4, 2004)
> ','DateSerial(2, 4, 2004) ','Null')
Der skal ikke anførselstegn om DateSerial - og heller ikke om Null.
DateSerial er en funktion der håndteres af Access - men det sker
ikke når du putter den i anførselstegn - så er det bare en
tekstværdi. Null er tilsvarende en specialværdi der heller ikke
skal i anførselstegn.
Der er en fejl mere i din nye kode - rækkefølgen af argumenter til
DateSerial er omvendt - årstallet først, derefter måneden og til
sidst dagen. Altså fx DateSerial(2004, 4, 23) for d. 23. april
2004.
> sql = sql & request.form("Diagnose") & "','"
> sql = sql & hdato & "','"
> sql = sql & afvistdato & "','"
> sql = sql & tilbdato & "')"
Linjerne herover skal rettes til så der ikke kommer anførselstegn
(' - plinger) omkring de tre datovariable.
Og så skal din funktion DateToSql rettes så argumentrækkefølgen
bliver år - måned - dag (se evt. originalen i mit forrige indlæg).
--
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
| |
Privathospitalet Ham~ (26-04-2004)
| Kommentar Fra : Privathospitalet Ham~ |
Dato : 26-04-04 13:00 |
|
klip:
> Der skal ikke anførselstegn om DateSerial - og heller ikke om Null.
klip:
>årstallet først, derefter måneden og til sidst dagen. Altså fx
DateSerial(2004, 4, 23) for d. 23. april
2004.
Hej Jens
1000 tak for suveræn hjælp. Jeg er meget taknemmelig.
Med venlige og taknemmelige hilsner, Gunnar
Koden der virker:
<% response.buffer = true
strDSN = "DRIVER={Microsoft Access Driver
(*.mdb)};DBQ="&Server.MapPath("../Amtspatient.mdb")
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open strDSN
DIM afvistdato, hdato, tilbdato
Function DateToSql(Value)
If isDate(Value) Then
DateToSql = "DateSerial(" & Year(Value) & ", " & _
Month(Value) & ", " & _
Day(Value) & ") "
Else
DateToSql = "Null"
End If
End Function
hdato = request.form("henvisdato")
hdato = DateToSql(hdato)
afvistdato = request.form("afvist")
afvistdato = DateToSql(afvistdato)
tilbdato = request.form("tilbagetrukket")
tilbdato = DateToSql(tilbdato)
sql = "INSERT INTO patient(CPR, Fornavn, Efternavn, AMT, Andet, Speciale,
Diagnose, Henvisdato, Afvist, Tilbagetrukket) VALUES ('"
sql = Sql & request.form("CPR") & "','"
sql = sql & request.form("Fornavn") & "','"
sql = sql & request.form("Efternavn") & "','"
sql = sql & request.form("AMT") & "','"
sql = sql & request.form("Andet") & "','"
sql = sql & request.form("Speciale") & "','"
sql = sql & request.form("Diagnose") & "',"
sql = sql & hdato & ","
sql = sql & afvistdato & ","
sql = sql & tilbdato & ")"
'response.write sql
'response.end
Set rs = Conn.Execute (sql)
Conn.Close
response.redirect ("admin.asp")
%>
| |
|
|