/ 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
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")

%>



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

Månedens bedste
Årets bedste
Sidste års bedste