webForumDet fria alternativet

Skulle gärna vilja ha själp med några saker! [Angående byte från tal till text!]

ASP

56 svar · 992 visningar · startad av trexter.com

Medlem sedan apr. 20021 203 inlägg
Frågan#1

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!

:)

Medlem sedan juli 20003 825 inlägg
#2

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

Medlem sedan juli 20003 825 inlägg
#3

"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!

Medlem sedan dec. 200012 464 inlägg
#4

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.

Medlem sedan juli 20003 825 inlägg
#5

2. Förlåt mig! Jag läser slarvigt!

"... WHERE orderID = '" & TheArray(i) & "' ""

- inga enklelfjumpar vid fråga om siffror, ID!

Medlem sedan dec. 200012 464 inlägg
#6

Ja, det gör du. Han hade bytt datatyp för orderId från tal till text.

Medlem sedan juli 20003 825 inlägg
#7

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?

Medlem sedan apr. 20021 203 inlägg
#8

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?

:)

Medlem sedan dec. 200012 464 inlägg
#9
response.write "Debug: Thestring = " & TheString & "<br>"
Medlem sedan apr. 20021 203 inlägg
#10

LarsG skrev:

response.write "Debug: Thestring = " & TheString & "<br>"

Oj, jag missförstod nog vad du menade. Men tack i alla fall!

:)

Medlem sedan apr. 20021 203 inlägg
#11

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

:)

Medlem sedan apr. 20021 203 inlägg
#12

Hmm...

Jag skrev ut QueryStringen och även där fanns värdet med, det här börjar gå över mitt förstånd!

:)

Medlem sedan apr. 20021 203 inlägg
#13

... ser att många är online och ger därför tråden ett tredje ;) försök genom att svara!

:)

Medlem sedan maj 2001156 inlägg
#14

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

Medlem sedan apr. 20021 203 inlägg
#15

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... )

:)

Medlem sedan juni 200032 967 inlägg
#16

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,

Medlem sedan juni 200032 967 inlägg
#17

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,

Medlem sedan dec. 200012 464 inlägg
#18

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
Medlem sedan apr. 20021 203 inlägg
#19

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!

:)

Medlem sedan juni 200032 967 inlägg
#20

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? ;)

260 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)