08. august 2007 - 10:59Der er
34 kommentarer og 1 løsning
Negering i asp!?
Hej..
Jeg har lige flyttet til en ny asp-server, og i den forbindelse gået fra MySQL overtil MsSQL og er stødt på et mærkværdigt problem. Jeg ved ikke om det er noget med serverens opsætning eller noget versions afhængigt, men når jeg prøver at lave en negering virker det ikke og siden fejler...
Jeg har lavet på følgende måder:
if str <> 0 THEN og if NOT str = 0 THEN
... men ingen af dem virker. Er der nogen der kan en forklaring, og eventuelt give et forslag på en tredje måde, som fungerer. Nogen steder kan jeg omgå negeringen, men ikke alle steder, så skal bruge det.
Nej, det virker heller ikke... Synes bare det er mærkeligt, for det virkede fint på min gamle server, og det er nøjagtig de samme filer som jeg bare har flyttet over...
Må hellere lige rette min fejl mht. det format... Det ser sådan her ud:
En fil jobPhase.asp bliver kaldt enten med kommandoen: - jobPhase.asp eller - jobPhase.asp?edit=2 (eksempelvis 2)
Så brugte jeg: if Request.QueryString("edit") <> "" Then
Og det burde vel virke... Prøvede også den du lige lavede.. - if Request.QueryString("edit") & "" <> "" Then
nej, det har intet med databasen at gøre... det er bare en sammenligning på en querystring... det med ms-my var bare for at forklare hvorfor jeg byttede..
Den skriver ingenting... det er sådan en pap-server, som har valgt at skjule alle fejlmeddelelser... Får kun "An error occurred on the server when processing the URL. Please contact the system administrator." Grrr...!!
Det gir' slet ingen mening.. Har heller aldrig oplevet der her før.!
Der er ikke andet for at jeg må i krig med det hele... det er sikkert en eller anden dum ting, som er anderledes.. Det lyder bare mærkeligt når det virkede på den anden server.
Men smide et svar alle sammen, pointene skal I alligevel have for besværet :)
Angående "når man ikke får de sædvanlige fejlbeskeder":
Du vil altid få fejlbeskeder, med mindre at du slår dem fra.
Jeg forslår derfor:
1) Brug altid Option Explicit, som den første kodelinie, dvs der må ikke være noget foran den linie.. Når du bruger Option Explicit, bliver du tvunget til at definere (dim variabelnavn) alle dine variabler. Den kan så fortælle dig, når du laver stavefejl..
2) Fjern "On Error"-linier.. F.eks. On Error Resume Next Den linie fortæller nemlig fortolkeren, at den skal fortsætte med koden, selvom der opstår fejl.
HVIS du bruger "On Error...", hvilket jeg kun kan anbefale til tests og ikke andet, skal du selv checke om der er fejl.
Det gør du med:
if Err.Number <> 0 then Response.Write "Der opstod en fejl:<br>" & Err.Number & " - " & Err.Description end if
Det må være noget andet der fejler, for hvis du laver en eksplicit konvertering af typerne på de værdier du sammenligner, så skal det simpelthen fungere...
Du kan evt. smide Response.Write-sætninger ind i koden på udvalgte steder, så du kan følge med i hvornår fejlene opstår (evt. slå buffering fra på Response-objektet, så teksterne bliver sendt med det samme)...
...og den eksplicitte konvertering var altså at tilføje & "" efter request.querystring("edit") OG anførselstegn omkring 0 (de sidste er lige så vigtigt, for at undgå VBScipt selv skal tolke typer), som nævnt i mit indlæg 08/08-2007 11:17:56...
Jeg har fundet ud af hvor den fejler nu... Det var ikke helt der, men det var tæt på... Det er fordi jeg har lavet to RecordSet fra min database benævnt recTmp og recTmp2 - det er når jeg vil sammenligne disse to det går galt.. også selv om det med response.write kan se de er fuldstændig ens. Begge returnerer tal af typen bigint.
Ex. if recTmp.Fields("id") = recTmp2.Fields("personResponsible") & "" Then
Jeg kan forestille mig at bigint ikke er en type som VBScript kan håndtere (specielt hvis den indeholder værdier der overstiger 2,1 mia (cirka), men det er kun en fornemmelse jeg har :)
Det kan være du lige skal prøve at konvertere til en double i stedet (med CDbl())
if CDbl(recTmp("id")) = CDbl(recTmp2("personResponsible")) Then
Jeg tror det er hen af det rigtige det der... regnede ikke lige med der var så meget forskel... men database mæssig er den eneste forskel netop at nogle nu hedder bigint i stedet for int - så det er nok der fejlen er.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.