13. september 2006 - 18:54Der 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"
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
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)
Synes godt om
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.
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
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
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.
Synes godt om
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.
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.
Synes godt om
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...
Den burde være der. IIS'en har ikke selv fjernet den.
Synes godt om
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.
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.
Synes godt om
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 :)
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 %>
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å... ;^)
Synes godt om
Ny brugerNybegynder
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.