1. Alltid brädgårdar vid fråga om datum, #.
2. Allt som kommer i request strängen blir till text. Använd CDate(Request.Form("from"))
CDate = Convert to Date
56 svar · 990 visningar · startad av trexter.com
Jag vet att jag frågat detta en gång förrut men tyvärr fick jag inga svar som hjälpte mig och hoppas nu på ett andra försök.
Jag har börjat närma mig slutet på ett mindre projekt och har insett att jag måste byta en viss kolumm (orderID) från tal till text vilket har lett till vissa komplikationer (det är inte säkert att alla fel beror på bytet). Nedan finns den felaktiga koden och tillhörande felmeddelande.
Jag är tacksam om författarna till svaren är nästan helt säkra på
om deras kod är korrekt ty jag börjar få ont om tid och det vore
trevligt om jag kunde få det här överstökat kvickt utan att prova
så mycket.
1.
Find = "SELECT * FROM orders WHERE orderDate BETWEEN '" &
Request.Form("from") & "' AND '" & Request.Form("to") & "' "
---
Data type mismatch in criteria expression.
2.
' databaskoppling
If Request.QueryString("Way") = "sent" Then
TheString = Request.Form("orderID")
TheArray = Split(TheString,",")
For i = 0 To Ubound(TheArray)
Sent = "UPDATE orders SET Sent = #" & Date & "#
WHERE orderID = '" & TheArray(i) & "' "
Connect.Execute(Sent)
Next
End If
'stänger databasen
---
Jag får inget felmeddelande men datumet läggs inte in i
databasen. Jag har fått ett tips om att byta ut Date mot Now men
det hjälpte inte, möjligt att jag gjorde det på fel sätt...
Tack på förhand!
MVH Trexter.com!
:)
1. Alltid brädgårdar vid fråga om datum, #.
2. Allt som kommer i request strängen blir till text. Använd CDate(Request.Form("from"))
CDate = Convert to Date
"Data type mismatch in criteria expression. "
Detta betyder att det är olika datatyper i frågan mot vad det borde vara.
"Jag får inget felmeddelande men datumet läggs inte in i
databasen. Jag har fått ett tips om att byta ut Date mot Now men
det hjälpte inte, möjligt att jag gjorde det på fel sätt..."
Det är okej. Det är inte fel i den ändan!
Om Orderdate är av typen datetime och du använder Access 2000 eller äldre
Find = "SELECT * FROM orders WHERE orderDate BETWEEN #" &
Request.Form("from") & "# AND #" & Request.Form("to") & "#"
Om det inte uppdateras i tabellen så beror det enbart på att TheString är tom eller innehåller värden som inte finns i tabellen. Det har inget med om du använder date eller now att göra.
Kontrollera hur TheString får sitt värde och verifiera att dessa finns med i din tabell.
2. Förlåt mig! Jag läser slarvigt!
"... WHERE orderID = '" & TheArray(i) & "' ""
- inga enklelfjumpar vid fråga om siffror, ID!
Ja, det gör du. Han hade bytt datatyp för orderId från tal till text.
He... OK, miss från min sida!
Vem har givit dig rådet att kåda så risig kod?? orderID är en räknar! Eller borde vara det i alla fall! :-)
Det tragiska med att hålla på och ändra sånna här grejer är att när du senare ska redigera i din kod så blir du galen på felaktiga kolumnamn!
Varför måste orderID vara text?
LarsG skrev:
Kontrollera hur TheString får sitt värde och verifiera att dessa finns med i din tabell.
Hur skulle en sådan verifiering kunna se ut?
:)
response.write "Debug: Thestring = " & TheString & "<br>"
LarsG skrev:
response.write "Debug: Thestring = " & TheString & "<br>"
Oj, jag missförstod nog vad du menade. Men tack i alla fall!
:)
Jo då! Värdet fanns med i strängen men det skrivs bara ut om jag har det och Response.End o v a n f ö r If Request.Query-yada-yada... så jag funderar på om det inte kan vara så att scriptet inte hittat värdet i QueryStringen och därför hoppar över hela inmatningen?! I formuläret på föregående sida skriver jag:
<form ACTION="modifydb.asp?Way=sent" method="post" name="sent">
:)
Hmm...
Jag skrev ut QueryStringen och även där fanns värdet med, det här börjar gå över mitt förstånd!
:)
Kör du mot SQL-server så töms innehållet i RS när du läst ut det första gången.
Lägg värdet i en variabel först, om du måste anropa flera ggr.
variabel=Request.Query-yada-yada
Är datumen lagrade i datumformat i databasen eller kanske rentav som text?
David
wazid skrev:
Kör du mot SQL-server så töms innehållet i RS när du läst ut det första gången.
Lägg värdet i en variabel först, om du måste anropa flera ggr.
variabel=Request.Query-yada-yadaÄr datumen lagrade i datumformat i databasen eller kanske rentav som text?
David
Jag kör mot Access, samma där?
Jo... de var lagrade som text! Har det någonting med saken att göra? Jag bytte till Datum/Tid nu. Vilka förändringar ska göras i koden? (Men måste jag göra det byet egentligen? Vill helst inte... )
:)
Jag kör mot Access, samma där?
Om du använder Memo/PM-fält i Access, eller Text-fält i SQL Server.
Jo... de var lagrade som text! Har det någonting med saken att göra? Jag bytte till Datum/Tid nu. Vilka förändringar ska göras i koden?
Ja! Datum ska lagras som datum, tal som tal och text som text! Det finns ingen anledning att lagra det som något annat än det är.
Mvh,
i SQL-frågan ska då datumvärden ha # runt sig om databasen är tidigare än Access 2000. Annars går det bra med apostrofer runt värdet.
Mvh,
Lägg till en utskrift på SQL-satsen för att se om den ser rätt ut.
If Request.QueryString("Way") = "sent" Then
TheString = Request.Form("orderID")
TheArray = Split(TheString,",")
For i = 0 To Ubound(TheArray)
Sent = "UPDATE orders SET Sent = #" & Date & "# WHERE OrderID = '" & TheArray(i) & "' "
response.write "SQL:> " & sent
response.end
Connect.Execute Sent
Next
End If
Ok Anders, jag ska testa det där sedan (sitter vid fel dator). Se till att kolla till denna tråden i övermorgon (först då jag kan testa)! Ok?
Och förresten, din signatur, vad betyder den? "Någonting kon..."
---
Tack på förhand, hör av mig i övermorgon om jag stöter på något fel!
:)
Det finns nog folk som kollar denna tråd i övermorgon. :-)
- - - - - - -
Värstans vad mycket prat om mina signaturer idag! ;)
Fetchez la vache! är franska och betyder Hämta kon!. Klassiskt filmcitat från Monty Python and the Holy Grail. Un cadeau? ;)