Avatar billede badal Nybegynder
27. januar 2004 - 10:24 Der er 27 kommentarer og
1 løsning

Retunere noget fra funktion

Jeg har en funktion som udføre en stored procedure. Denne stored procedure finder en UserID som funktionen så skal retunere tilbage. Hvordan implementere jeg lige det?

function checkUser(username, password, license)
    dim userID
    dim userIdReq

    set getsmsstatus = Server.CreateObject("ADODB.Recordset")

    userIdReq="Exec CheckUser " & _
            "@UserID=" & userID & ", " & _
            "@username='" & username & "', " & _
            "@password='" & password & "', " & _         
            "@license='" & license & "'"
    set userIdReq = objConn.Execute(userIdReq)
    if userIdReq.EOF then
        ' retunere userID
    else
        ' retunere -1

end function
Avatar billede nute Nybegynder
27. januar 2004 - 10:42 #1
du lægger til

checkUser = userID

som sidste linje i din funktion

/nute
Avatar billede badal Nybegynder
27. januar 2004 - 10:58 #2
Det er jeg sådan set med på men jeg kan ikke lige overskue hvordan jeg får værdien userID ud.

if userIdReq.EOF then
        ' return userID
        checkUser = userIdReq.UserID
Avatar billede nute Nybegynder
27. januar 2004 - 11:06 #3
userIdReq("UserID")
Avatar billede badal Nybegynder
27. januar 2004 - 11:44 #4
Jeg har stadig problemer med denne stored procedure. Jeg får følgende fejl:
A string literal was expected, but no opening quote character was found.

Jeg forstår fejlmeddelsen som om der mangler en ' tegn. Men kan ikke lige se hvad der er galt.

userIdReq="Exec XML_CheckUser " & _
            "@UserID=" & userID & ", " & _
            "@username='" & username & "', " & _
            "@password='" & password & "', " & _         
            " @license='" & license & "' "
Avatar billede nute Nybegynder
27. januar 2004 - 12:24 #5
hvilken datatype er din UserID kolonne ?
Avatar billede badal Nybegynder
27. januar 2004 - 12:51 #6
det er en integer
Avatar billede nute Nybegynder
27. januar 2004 - 12:58 #7
hmm ... har du prøvet at lave '' omkring din @UserID ?

userIdReq="Exec XML_CheckUser " & _
            "@UserID='" & userID & "', " & _
            "@username='" & username & "', " & _
            "@password='" & password & "', " & _         
            " @license='" & license & "' "
Avatar billede badal Nybegynder
27. januar 2004 - 13:03 #8
Du fik mig lige ind på den rette spor. Jeg havde defineret dim userID. Manglede åbenbart at give den start værdi. userID = -1. Så kan den køre nu.

Nu er det faktisk kun den her del der giver samme fejlmeddelse som tidligere. Kunne det tænkes at fejl at den samme? Jeg er ikke vant til VB.

if userIdReq.EOF then
        ' return userID
        checkUsernamePasswordLicense = userIdReq("UserID")
        else
        ' user not found return -1   
        checkUser = -1
    end if
Avatar billede nute Nybegynder
27. januar 2004 - 13:09 #9
Du har glæmt at lukke din if statement med en "end if". Men jeg ville ha prøvet noget ála:

function checkUser(username, password, license)
    dim userID : userID = -1
    dim userIdReq

    set getsmsstatus = Server.CreateObject("ADODB.Recordset")

    userIdReq="Exec CheckUser " & _
            "@UserID=" & userID & ", " & _
            "@username='" & username & "', " & _
            "@password='" & password & "', " & _         
            "@license='" & license & "'"
    set userIdReq = objConn.Execute(userIdReq)
    if not userIdReq.EOF then
        userID = userIdReq( "UserID" )
    end if
    checkUser = userID
end function

/nute
Avatar billede badal Nybegynder
27. januar 2004 - 13:42 #10
Nute lige et sidste spørgsmål inden du får pointene. Når jeg når til så giver den fejl igen. Jeg har lavet nogle simple data'er. userIdReq.EOF slet ikke indeholder data ellers skal konvertes til INT først.

Jeg har også prøvet med dit eksempel. Den køre hellere ikke. Jeg har testet stored procedure og den fungere. Den retunere en userID som den skal.

if not userIdReq.EOF then
    checkUser = 2
  else
    checkUser = -1
end if
Avatar billede nute Nybegynder
27. januar 2004 - 13:53 #11
hmm ... du lægger ikke din 'execute' i dit recordset objekt:

set getsmsstatus = objConn.Execute(userIdReq)
    if not getsmsstatus.EOF then

alternativt ... har du prøvet at bruge 'open' istedenfor 'execute' ?

kig lidt på denne artikel - mon ikke denne kan hjælpe lidt:
http://activedeveloper.dk/aspdigital/2002013001.asp

/nute
Avatar billede badal Nybegynder
27. januar 2004 - 14:32 #12
Jeg kan stadig ikke finde fejlen. Har prøvet at rette lidt her og der . prøvet på et andet måde. Men d vil ik virke.
Avatar billede nute Nybegynder
27. januar 2004 - 14:41 #13
vil ikke virke ? som i at den ikke returnerer noget ? eller at den kommer med en fejlmeddelelse ?

har du prøvet at bare skrive ud din kolonne *uden* at tjekke om der er resultat i din Query ? (uden 'if getsmsstatus.EOF')

/nute
Avatar billede badal Nybegynder
27. januar 2004 - 14:52 #14
Den kommer med en fejlmeddelse: A string literal was expected, but no opening quote character was found.

function checkUser(username, password, customerCode)
    dim userID
    userID = -1

    dim userIdReq
    dim test

    set test = Server.CreateObject("ADODB.Recordset")
   
    userIdReq="Exec XML_CheckUsernamePasswordLicense @UserID=1, @username='Test4', @password='11111', @license='53434344545454' "

    set test = objConn.Execute(userIdReq)

        ' lige her fejler den. Den kommer slet ikke ind test.EOF løkken.
    if test.EOF then
        checkUser = 12
    else
        checkUser = 23
    end if
end function

Med hensyn til at printe ud er det bare Response.write(getsmsstatus.EOF)
Avatar billede nute Nybegynder
27. januar 2004 - 14:57 #15
hmm ... jeg må ærlig indrømme at jeg aldrig har brugt stored procedures sammen med ASP (men java og C#) ... men ... skal du ikke bruge 'Execute' istedenfor 'exec' ?

userIdReq="EXECUTE XML_CheckUsernamePasswordLicense @UserID=1, @username='Test4', @password='11111', @license='53434344545454' "

dessuden ... hvilken linje peger den på når den komme med fejlmeddelelsen ?

/nute
Avatar billede badal Nybegynder
27. januar 2004 - 15:06 #16
Jeg er også mest til at bruge stored procedures i C#. Jeg har prøvet med EXECUTE men det hjælp ikke. Jeg har en lang funktioner lignende i den samme dokument som jeg arbejder på. Har gjort det præcis på samme måde. Det kan også være at fejlen er et helt andet sted.
Avatar billede nute Nybegynder
27. januar 2004 - 15:10 #17
har du gjort noget så simpelt som at lægge et og et parameter på ? start med at hardkode værdierne for userid, username, password og licence ind i din stored procedure og køre din SP uden parametre. hvis det fungerer, så sender du userid med over. på denne måde finder du hurtig ud af hvad der kan være galt. hvis den allerede fejler når du ikke sender nogle parametre med over, så er det jo lidt skummelt :-|

/nute
Avatar billede badal Nybegynder
27. januar 2004 - 15:26 #18
jeg har prøvet at tage værdierne en af gangen. Hvis det skal være helt præcist så får jeg denne fejl. Men denne fejl opstår pga stored procedure. Det øverste er fra siden default.asp

<% @LANGUAGE="VBScript" %>
<%
  Response.Buffer = False
  Response.ContentType = "text/xml"
%>

A string literal was expected, but no opening quote character was found. Error processing resource 'http://localhost/default.asp'. Line 1, Position 26

<font face="Arial" size=2>
-------------------------^
Avatar billede badal Nybegynder
27. januar 2004 - 15:27 #19
Jeg har prøvet at sende værdierne en af gangen. Det har ikke hjulpet særligt meget.
Avatar billede nute Nybegynder
27. januar 2004 - 15:30 #20
AHH !!!! dette er jo ikke en SQL relateret fejl. det er fordi du ikke har "" rundt dine attributter på HTML tags. du skriver til browser som XML, så skal du også skrive valid XML ;-)

prøv eventuelt at fjerne denne linje:

Response.ContentType = "text/xml"

eller skriv alle dine attributter i quotes:

<font face="Arial" size="2">

og ikke
<font face="Arial" size=2>


/nute
Avatar billede badal Nybegynder
27. januar 2004 - 15:54 #21
Det er faktisk det der er mystist for jeg har slet ikke noget html kode i mine asp sider. I default.asp siden er der en lang række "case" hvor der udføres noget kode.
Det samme i mit andet funktion dokument.
Der er en enkelt html side som sender et xml dokument til default.asp siden, som så udfra en værdi i xml dokumentet finder ud af hvilken case den skal udføre. Der retuneres en xml dokument. Så hvordan compileren kan klage over at der mangler et " tegn i default.asp siden forstår jeg ikke helt.
Avatar billede nute Nybegynder
27. januar 2004 - 16:01 #22
det er højst sandsynlig siden der modtager xml'en der brokker sig. hvad hvis du *kun* kører din ASP side for at se om den returnerer fejl ?!

/nute
Avatar billede badal Nybegynder
27. januar 2004 - 16:25 #23
Jeg tror at jeg opgiver det. Men du skal have tak for al den tid du har brugt på at hjælpe mig.
Avatar billede nute Nybegynder
27. januar 2004 - 16:30 #24
øv ... det var da ærgerlig :-( jeg er sikker på at det er en meget lille ting der går galt. men .. det er jo lidt problematisk at sidde her og hjælpe når man ikke har tilgang til det hele, men sådan er det nu engang med et forum.

jeg håber alligevel du kan klare at finde ud af det. jeg tror nok du skal kigge på den XML du får sendt tilbage. det lyder som om scriptet fungerer fint, men det er når du sender XML tilbage det går galt

/nute
Avatar billede badal Nybegynder
30. januar 2004 - 14:00 #25
Hej Nute,
Jeg har fået løst problemet. Nogen gange kan det hjælpe at holde en pause og se på tingene endnu gang. Jeg fandt ud af at fejlen rent faktisk lå i stored procedure. I mit stored procedure bliver der retuneret et userID, dvs. en enkel værdi og ikke en recordset eller resultset. Så derfor kunne jeg ikke bruge test.EOF.
Så jeg kodede mit stored procedure helt om til istedet at bruge parametre og så kørte det.
Her er link til siden der beskriver løsning til problemet:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;190762
Avatar billede nute Nybegynder
30. januar 2004 - 14:52 #26
ahh ... men det er jeg da glad for at høre :) må ærlig indrømme at det overhovedet ikke faldt mig ind at spørge om din SP returnerede et recordset eller kun en værdi :-( men men ... det er da godt at du har fået det opp at køre

/nute
Avatar billede badal Nybegynder
19. maj 2004 - 18:52 #27
svar
Avatar billede nute Nybegynder
21. maj 2004 - 12:08 #28
- 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