Avatar billede Slettet bruger
13. september 2006 - 18:54 Der er 28 kommentarer og
1 løsning

Kald en funktion inde i en sætning

Hvordan kalder man en funktion inde midt i en ASP-sætning.

Normalt kalder man på denne måde:

<% kaldfunktion rs("enværdi") %>

Men i mit tilfælde skal jeg bruge den inde i en SQL-sætning, altså felt1 skal kalde en funktion for at finde det tal der skal søges efter, hvordan kan man lave det ?

strSQL = "Select * from tabel where felt1=ettal AND felt2=ettal"
Avatar billede nielle Nybegynder
13. september 2006 - 19:00 #1
strSQL = "Select * from tabel where felt1=" & kaldfunktion(rs("enværdi")) & " AND felt2=ettal"
Avatar billede Slettet bruger
13. september 2006 - 19:29 #2
Det har jeg prøvet, jeg får bare denne fejl:

Der er en syntaksfejl, fordi der mangler en operator. i forespørgselsudtrykket "catType= AND catArea=2".

Min SQL:

strSQL = "Select * from categories where catType=" & AreaCode(Session("pagearea")) & " AND catArea=2 order by catTitle"
Avatar billede nielle Nybegynder
13. september 2006 - 19:31 #3
Prøv at udskrive din SQL-sætning før at du udføre den. Hvordan ser den ud?
Avatar billede Slettet bruger
13. september 2006 - 19:43 #4
Udskrive SQL-sætning før den bliver udført.....!?
Hvordan gør man lige det? Beklager hvis jeg spørger lidt dumt...
Avatar billede nielle Nybegynder
13. september 2006 - 19:50 #5
Sådan:

strSQL = "Select * from categories where catType=" & AreaCode(Session("pagearea")) & " AND catArea=2 order by catTitle"

Response.Write "DEBUG: " & strSQL & "<br>"

Set rs = Conn.Execute(strSQL)
Avatar billede Slettet bruger
13. september 2006 - 21:39 #6
Jeg får bare fejlen:

Der er en syntaksfejl, fordi der mangler en operator. i forespørgselsudtrykket "catType= AND catArea=2".

Men hvis jeg fjerner " & AreaCode(Session("pagearea")) & " og feks skriver 0 i stedet for, så forsvinder fejlen og den udskriver hele linien som du bad om.
Avatar billede nielle Nybegynder
13. september 2006 - 21:42 #7
Får du ikke udskrevet noget i DEBUG-sætningen?
Avatar billede Slettet bruger
13. september 2006 - 21:50 #8
Nej, den laver jo fejl pga. function forspørgslen....
Avatar billede Slettet bruger
13. september 2006 - 21:56 #9
Må hellere lige sige at den function jeg kalder med AreaCode(Session("pagearea")) den virker, har testet den uden for SQL-sætningen.
Avatar billede nielle Nybegynder
13. september 2006 - 21:57 #10
Hvad er den eksakte ordlyd af din fejlbesked?
Avatar billede nielle Nybegynder
13. september 2006 - 21:57 #11
Og hvordan ser koden for AreaCode() ud?
Avatar billede Slettet bruger
13. september 2006 - 21:59 #12
Fejlbesked:
Microsoft JET Database Engine (0x80040E14)
Der er en syntaksfejl, fordi der mangler en operator. i forespørgselsudtrykket "catType= AND catArea=2".
/GH_Community_0.1/includes/categories_inc.asp, line 32


Og function:

Function AreaCode(AreaID)
sql = "select * from types where tyName='" & AreaID & "'"
Set rsArea = ConnMain.Execute(sql)
If not rsArea.EOF OR not rsArea.BOF Then
Response.Write rsArea("tyID")
End If
End Function
Avatar billede nielle Nybegynder
13. september 2006 - 22:02 #13
Du skal rette din AreaCode til:

Function AreaCode(AreaID)
    sql = "select * from types where tyName='" & AreaID & "'"
    Set rsArea = ConnMain.Execute(sql)
    If not rsArea.EOF OR not rsArea.BOF Then
        AreaCode = rsArea("tyID")
    Else
        AreaCode = "XXX"
    End If
End Function
Avatar billede nielle Nybegynder
13. september 2006 - 22:04 #14
Hvis du laver en Vis Kilde på din side, ville du have set at DEBUG-sætningen faktisk blev udskrevet. Fejlbeskeden kommer nemlig først lidt efter, nemlig når du sender SQL'en til databasen.
Avatar billede Slettet bruger
13. september 2006 - 22:05 #15
Ja, ved godt der er en "fejl" der, men der vil altid være en værdi til det søgte AreaID.
Så det er ikke det der er fejlen.

Har testet prøvet at sætte den ind.
Avatar billede nielle Nybegynder
13. september 2006 - 22:08 #16
Du skal ikke kun kigge på det der XXX jeg har skrevet. Resten af koden i AreaCode() er også ændret. Nu returnere den en værdi istedet for bare at bruge Response.Write til at skrive den ud. Det er vigtigt at den returnere noget, hvis den skal kunne bruges i din SQL-sætning.
Avatar billede Slettet bruger
13. september 2006 - 22:08 #17
Hvis jeg går ind i Vis Kilde så er der altså ikke nogen debug-sætning (har søgt).
Den går jo direkte til IIS egene fejl-sider...
Avatar billede nielle Nybegynder
13. september 2006 - 22:09 #18
Den burde være der. IIS'en har ikke selv fjernet den.
Avatar billede Slettet bruger
13. september 2006 - 22:21 #19
Nu virker den efter jeg skiftede hele koden ud med den du havde lavet. Men har lige et par spørgsmål til.

AreaCode = "XXX" hvad skal jeg skrive af værdi her, når det den ellers udskriver er tal AreaCode = "0" eller hvad ?

Og så et spørgsmål ang. det der Vis Kilde.
Når min server støder på en fejl, som feks den vi lige har rodet med, så vises der ingen oplysninger fra den side jeg prøvede at udføre, den "redirecter" bare til IIS default fejl-side, men hvis det nu havde foregået på det webhotel jeg har købt, så ville den udskrive siden indtil det sted hvor den løber ind i en fejl og så vil den skrive fejlen der.
Avatar billede nielle Nybegynder
13. september 2006 - 22:27 #20
Jeg ved ikke hvad du bør vælge i stedet for XXX - det afhænger jo fuldt af hvad der giver mening for din situation. Det skal være den værdi der skal bruges når der ikke er oprettet nogen session.

Den fejlbesked du har fået vist er ikke fra IIS'en. Den stammer derimod direkte fra din Access-database. Der er altså ikke blevet rediregeret i det konkrete tilfælde.
Avatar billede Slettet bruger
13. september 2006 - 22:32 #21
Okay, men indeholder ihvertfald ikke den DEBUG-sætning som vi prøvede at udskrive.

Men vi fik da fundet fejlen. Så hvis du lægger et svar så sender jeg point og et mange TAK for hjælpen herfra :)
Avatar billede nielle Nybegynder
13. september 2006 - 22:32 #22
Svar :^)
Avatar billede nielle Nybegynder
13. september 2006 - 22:33 #23
Nu, hvor det altså virker får du så DEBUG'en?
Avatar billede Slettet bruger
13. september 2006 - 22:35 #24
Jep og det er 100% den rigtige sætning den udskriver.
Avatar billede nielle Nybegynder
13. september 2006 - 22:36 #25
Må jeg se din kode som den ser ud nu?
Avatar billede Slettet bruger
13. september 2006 - 22:40 #26
Min sql eller funktion ?
Avatar billede nielle Nybegynder
13. september 2006 - 22:52 #27
Din ASP-kode :^)
Avatar billede Slettet bruger
13. september 2006 - 22:56 #28
Så får du alt det der har noget med det her at gøre...

<%
Function CategoryType(CategoryID)
    sql = "select * from types where tyName='" & CategoryID & "'"
    Set rsCatType = ConnMain.Execute(sql)
    If not rsCatType.EOF OR not rsCatType.BOF Then
        CategoryType = rsCatType("tyID")
    Else
        CategoryType = "0"
    End If
End Function
%>

<%
Function AreaCode(AreaID)
    sql = "select * from types where tyName='" & AreaID & "'"
    Set rsArea = ConnMain.Execute(sql)
    If not rsArea.EOF OR not rsArea.BOF Then
        AreaCode = rsArea("tyID")
    Else
        AreaCode = "0"
    End If
End Function
%>

      <table width="95%" align="center" cellspacing="0" cellpadding="0" border="0">
        <tr>
        <%
        If Request.Querystring("cat") > "" Then
        strSQL = "Select * from categories where catSubID=" & Request.Querystring("cat") & " order by catTitle"
        Else
        strSQL = "Select * from categories where catType=" & categoryType(Request.Querystring("pa")) & " AND catArea=" & AreaCode(Session("pagearea")) & " order by catTitle"
        End If
        Set rsCategories = ConnMain.Execute (strSQL)

        If not rsCategories.EOF OR not rsCategories.BOF Then
        a=0
        Do
        %>

        <% If a = 2 Then %>
        </tr>
        <tr height="5">
          <td></td>
        </tr>
        <tr>
        <% a=0 %>
        <% End If %>

          <td width="49%" valign="top">
            <h5><a href="?pa=<%=Request.Querystring("pa")%>&cat=<%=rsCategories("catID")%>"><% Textcheck rsCategories("catTitle") %></a></h5>
            <h6><% Textcheck rsCategories("catDescription") %></h6>
          </td>
          <% If a = 0 Then %>
          <td width="2%"></td>
          <% End If %>

        <%
        a=a+1
        rsCategories.MoveNext
        Loop While Not rsCategories.EOF
        End If
        %>

        </tr>
      </table>
Avatar billede nielle Nybegynder
14. september 2006 - 06:54 #29
Det var nu lige så meget for at prøve at finde ud af hvorfor at du ikke fik udskrevet din DEBUG når der kom en fejl fra databasen. Men siden at du har fjernet linjen, så... ;^)
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