Avatar billede marvinq Nybegynder
08. august 2007 - 10:59 Der 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.

Takker på forhånd!

/MHQ
Avatar billede marvinq Nybegynder
08. august 2007 - 11:05 #1
Glemte lige...

!= .. denne virker naturligvis heller ikke.

Kan kun se det skulle være en fejl på asp-delen.

/MHQ
Avatar billede softspot Forsker
08. august 2007 - 11:09 #2
Har du også skiftet sprog (f.eks. fra PHP til VBScript)?

I VBScript findes der en funktion som hedder Str og det er derfor ikke nogen god idé at bruge det navn som identificer. Prøv evt at vælge et andet.

En anden ting der kan være galt er typen af variablen. Stemmer indholdet af variablen overens med det du sammenligner med?
Avatar billede marvinq Nybegynder
08. august 2007 - 11:14 #3
Nej, jeg brugte både før og nu asp, så der har jeg ikke ændret noget...

str er bare en "dummy"... Et eksempel er...

if Request.QueryString("edit") <> 0 Then

/MHQ
Avatar billede softspot Forsker
08. august 2007 - 11:17 #4
Prøv med

if Request.QueryString("edit") & "" <> "0" Then
Avatar billede nielle Nybegynder
08. august 2007 - 11:22 #5
Hvor er det du mener at skiftet MySQL -> MS SQL kommer ind? Er det fordi at din streng er noget du har hentet fra datbasen, eller hvad?
Avatar billede marvinq Nybegynder
08. august 2007 - 11:25 #6
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

men den virker heller ikke. :-/

/MHQ
Avatar billede marvinq Nybegynder
08. august 2007 - 11:26 #7
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..

/MHQ
Avatar billede nielle Nybegynder
08. august 2007 - 11:27 #8
Hvad giver dette:

str1 = "abc"

If str1 <> "abc"
    Response.Write "Forskellig strenge"
Else
    Response.Write "Identiske strenge"
End If
Avatar billede nielle Nybegynder
08. august 2007 - 11:28 #9
Tilføg selv den manglende Then
Avatar billede marvinq Nybegynder
08. august 2007 - 11:33 #10
Ja, den giver jo selvfølgelig "Identisk strenge - nu er jeg da endnu mere forvirret... Kan det være min querystring der fucker op så ??

/MHQ
Avatar billede nielle Nybegynder
08. august 2007 - 11:34 #11
Du kan jo prøve at udskrive den for at se hvad den egentlig indeholder:

Response.Write "DEBUG: [" & Request.QueryString("edit") & "]"
Avatar billede marvinq Nybegynder
08. august 2007 - 11:40 #12
Det virker også som det skal...

Kan det være sammenligningen med den tomme streng??? Nogle gode idé !!???

/MHQ
Avatar billede nielle Nybegynder
08. august 2007 - 11:43 #13
Hvad udskriver den?

Der burde ikke være noget problem med at sammenligne med tomme strenge.
Avatar billede marvinq Nybegynder
08. august 2007 - 11:46 #14
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.!

/MHQ
Avatar billede nielle Nybegynder
08. august 2007 - 11:48 #15
Den burde da skrive noget, om ikke andet så:

DEBUG: []

Er du sikker på at linjen overhovedet bliver kaldt?
Avatar billede marvinq Nybegynder
08. august 2007 - 11:49 #16
Ja, den er god nok, skriver også debug[2]... men jeg fatter det sq ikke...

Det må og kan kun være et andet sted fejlen ligger... prøver lige at debugge mig igennem lortet.

/MHQ
Avatar billede nielle Nybegynder
08. august 2007 - 11:50 #17
Så står det vel "2" i Request.QueryString("edit")?
Avatar billede marvinq Nybegynder
08. august 2007 - 11:51 #18
ja
Avatar billede marvinq Nybegynder
08. august 2007 - 11:52 #19
fejlen må ligge et andet sted.. det er bare svært at fange, når man ikke får de sædvanlige fejlbeskeder
Avatar billede thesurfer Nybegynder
08. august 2007 - 11:52 #20
Det virker som om, at du prøver på at samligne et tal med en streng..

Hvis du gør det, skal du enten konverterer tallet til en streng, eller konverterer strengen til et tal..

Jeg vil anbefale tal-til-string..

F.eks. med "" & tal eller CStr(tal)
Avatar billede nielle Nybegynder
08. august 2007 - 11:52 #21
Men så virker det jo som det skal, eller hvad?
Avatar billede marvinq Nybegynder
08. august 2007 - 12:00 #22
Jeg fatter det ikke... men lige det må virker...

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

Takker

/MHQ
Avatar billede thesurfer Nybegynder
08. august 2007 - 12:04 #23
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
Avatar billede marvinq Nybegynder
08. august 2007 - 12:06 #24
okay cool... det kunne være jeg lige skulle prøve mig ad med det !

takker

/MHQ
Avatar billede softspot Forsker
08. august 2007 - 13:04 #25
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)...
Avatar billede softspot Forsker
08. august 2007 - 13:06 #26
...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...
Avatar billede marvinq Nybegynder
08. august 2007 - 13:27 #27
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

/MHQ
Avatar billede marvinq Nybegynder
08. august 2007 - 13:28 #28
... og har prøvet at konvertere dem til streng-variabler.

e.g.:
if recTmp.Fields("id") & "" = recTmp2.Fields("personResponsible") & "" Then

/MHQ
Avatar billede marvinq Nybegynder
08. august 2007 - 13:45 #29
men det hjælper stadig ikke... behandles det ikke ens alle steder??

//MHQ
Avatar billede softspot Forsker
08. august 2007 - 14:10 #30
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
Avatar billede marvinq Nybegynder
08. august 2007 - 14:23 #31
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.

/MHQ
Avatar billede marvinq Nybegynder
08. august 2007 - 14:27 #32
BINGO!!

Der var fejlen!! Puha... det var godt. Var ved at blive sindssyg!

Mange mange tak for hjælpen. Det kunne jeg have bøvlet med længe!

Smid et svar !

/MHQ
Avatar billede softspot Forsker
08. august 2007 - 14:28 #33
Velbekomme :)
Avatar billede softspot Forsker
08. august 2007 - 14:31 #34
Tak for point :)
Avatar billede marvinq Nybegynder
08. august 2007 - 14:49 #35
det er mig der takker
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester