Toon posts:

[ASP] Een fout in mijn search engine???

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hey!

Ik krijg de volgende melding:
'The connection cannot be used to perform this operation. It is either closed or invalid in this context.'

De search engine heb ik letterlijk ge-copy-pasted van 4guysfromrolla. Alleen de tabelnaam heb ik aangepast.

Hieronder allereerst mijn datastore include die open ik aan het begin van de pagina:
<%
Dim conntemp,dbpath,sqlString, objRS
'SQL
set conntemp=server.createobject("adodb.connection")
conntemp.Open "Provider=SQLOLEDB;SERVER=ALLMIGHTY;UID=sa;PWD=;Database=zoujewelwillenwetenhe"
%>

<%
'start tonen lijst met deelnemers
if request.querystring("status") <> "results" then
response.write "<font class=black09>Geef hieronder de achternaam van de persoon in die u zoekt. De lijst is gesorteerd op alfabetische volgorde van woonplaats.<BR><BR></font>"
response.write "<font class=black09><b>Achternaam:</b></font>       <input type=text name=txtSearchString><BR>"
response.write "<BR><input type=submit value=   Zoek   >"
else

dim DefaultBoolean, RecordsPerPage, ID, adForwardOnly
'Set these up to your preference
DefaultBoolean = "AND"
RecordsPerPage = 10

'Get our form variable
Dim strSearch
strSearch = Request.form("txtSearchString")

'Get our current ID. This let's us know where we are Dim ID
ID = Request.QueryString("ID")

'Set up our SQL Statement
Dim strSQL, tmpSQL
strSQL = "SELECT * FROM NAWBezoeker WHERE "
tmpSQL = "(Description LIKE "

'OK, we need to parse our string here
Dim Pos
Pos = 1
While Pos > 0
Pos = InStr(1, strSearch," ")
If Pos = 0 Then
'We have hit the end
tmpSQL = tmpSQL & "'%" & strSearch & "%')"
Else
tmpSQL = tmpSQL & "'%" & Mid(strSearch,1,Pos) & "%' " & DefaultBoolean & " Description LIKE "
strSearch = Mid(strSearch,Pos+1,len(strSearch))
End If
Wend

'Now, we've got to make sure we only get the right records
strSQL = strSQL & tmpSQL & " AND ArticleURLID > " & ID
strSQL = strSQL & " ORDER BY ID" 'Important!

'Make our Recordset variable and get the results
Dim rsResults
Set rsResults = Server.CreateObject("ADODB.Recordset")

'Get the right number of records per page
rsResults.MaxRecords = RecordsPerPage

'Set our recordset properties (include ADOVBS.inc for the constant definitions!)
rsResults.CursorType = adForwardOnly

'Get our data
rsResults.Open strSQL

'OK, we've got the data, let's display it in HTML
'First, though, let's get the total number of records
Dim rsTotalRecords
strSQL = "SELECT COUNT(*D FROM NAWBezoeker WHERE " & tmpSQL
Set rsTotalRecords = conntemp.Execute(strSQL)

'We also need the max ID value for our search Dim rsMaxID
strSQL = "SELECT MAX(ArticleURLID) FROM ArticleURL WHERE " & tmpSQL
Set rsMaxID = conntemp.Execute(strSQL)

'HIER GAAN WE DE RESULTATEN TONEN!
if rsResults.EOF then 'No matches found
%>

No matches found! Try broadening your search criteria.<P>
<A HREF="SearchStart.htm">Return to Search</A>

<%
Else
Dim iCurrentID
While Not rsResults.EOF
iCurrentID = rsResults("ArticleURLID") %>
<A HREF="<%=rsResults("URL")%>"> <%=rsResults("Title")%></A>
<%=rsResults("Description")%>
<% rsResults.MoveNext
Wend %>
<P>
<%=rsTotalRecords(0)%> Found!<BR>
<%
if iCurrentID < rsMaxID(0) then %>
<!-- We have at least another record... -->
<FORM METHOD=POST ACTION="Search.asp?ID=<%=iCurrentID%>">
<INPUT TYPE=HIDDEN NAME="txtSearchString" VALUE="<%=Request.form("strSearchString")%>">
<INPUT TYPE=SUBMIT VALUE="Next">
</FORM>
<%
end if
end if
end if
%>

Wie kan mij helpen met het oplossen van deze foutmelding?
Ik weet niet wat ik fout doe...

Verwijderd

verander deze
code:
1
2
'Get our data
rsResults.Open strSQL

een in
code:
1
2
'Get our data
rsResults.Open strSQL, conntemp

en probeer het nog eens.

Verwijderd

Topicstarter
Ok, weer een stapje verder!

nu de volgende melding...
Microsoft OLE DB Provider for SQL Server (0x80040E14)
Incorrect syntax near the keyword 'ORDER'.

Verwijderd

Topicstarter
Volgens mij is er hier nog iets fout met de ID's die hier gezet worden.
De ID's van de rijen in de tabel heten niet ID, maar NawBID in mijn geval.

Verwijderd

print de SQL-query eens naar je scherm en post deze hier ff, dat doe je hier
code:
1
2
3
4
5
6
'Now, we've got to make sure we only get the right records
strSQL = strSQL & tmpSQL & " AND ArticleURLID > " & ID
strSQL = strSQL & " ORDER BY ID" 'Important! 

'printen van de strSQL
Response.Write strSQL & "<br>"

Verwijderd

Topicstarter
SELECT * FROM NAWBezoeker WHERE (Description LIKE '%zoekaktie%') AND ID > ORDER BY ID

Goede tip dit!

Zou het nu kunnen omdat het ID nog niet gezet is deze niets aangeeft en dus de query in de war raakt?

Verwijderd

Topicstarter
???

Description is dus ook een columnname. Dus description zou een rij uit de tabel zijn waarin hij moet zoeken.
Maar waarom moet hij dan wel alles openen?

Open * FROM...

Verwijderd

1. zoals je zelf al aangaf gebruik je ipv ID NawBID, is dit de naam van je variabele of van het veld in de database?

2. er mist iets in de query, je geeft:
code:
1
SELECT * FROM NAWBezoeker WHERE (Description LIKE '%zoekaktie%') AND ID > ORDER BY ID

Er staat dus dat ID kleiner moet zijn dan niets?? (AND ID > ORDER BY ID) terwijl in de cde staat dat ID kleiner moet zijn dan de variabele ID (ArticleURLID > " & ID).

Ga het daar maar eens zoeken.

Verwijderd

Topicstarter
Heel raar!

Zelfs als ik dit er in bouw doet tie het nog niet...

if len("ID") < 1 then
ID = 1
end if

Je zou toch verwachten dat in ieder geval de QUERY ID < 1 zou moeten zeggen...Maar dat doet tie dus niet...

Verwijderd

Topicstarter
Weer een HEEL stuk verder, maar nu gaat tie op het laatste stuk onderuit.
<%
if iCurrentID < rsMaxID(0) then
%>
<!-- We have at least another record... -->
<FORM METHOD=POST ACTION="Search.asp?ID=<%=iCurrentID%>">
<INPUT TYPE=HIDDEN NAME="txtSearchString" VALUE="<%=Request.form("strSearchString")%>">
<INPUT TYPE=SUBMIT VALUE="Next">
</FORM>
<%
end if
%>

Type mismatch op de: if iCurrentID < rsMaxID(0) then

Deze geeft tie alleen als hij ook daadwerkelijk wat gevonden heeft.

  • Mart!
  • Registratie: Februari 2000
  • Laatst online: 15-09 10:30
if iCurrentID < Cint(rsMaxID(0)) then

Zo convert je de veldwaarde in ieder geval naar een Integer. Dat typecasten in VB-script gaat niet altijd even goed...

Het kan ook zijn dat iCurrentID geen waarde heeft.. Maak iCurrentID eens -1 nadat je em gedimt hebt. Je kan de recordsetwaarde nl. niet vergelijken met een var die nog geen waarde heeft

Verwijderd

Topicstarter
Helaas, zegt tie het nog steeds...

  • Mart!
  • Registratie: Februari 2000
  • Laatst online: 15-09 10:30
Probeer eens voor het if-statement:

response.write "[" & iCurrentID & "][" & rsMaxID(0) & "]"

Dan kun je zien wat er met elkaar wordt vergeleken. Moet nu naar huis, check straks thuis wel ff weer (als je dan nog niet geholpen bent :) )

ps. response.write roelt hard!

Verwijderd

Topicstarter
[][101082]

Dus de eerste is leeg.
Wel raar, want als ik iCurrentID = -1 zet dan
blijft de eerste nog steeds leeg.

Mart! cool dat je zo onwijs helpt!

--------------------

(5 minuten later)

Vaag, nu zegt tie weer [101082][101082]
Hij is dus nu weer gelijk...

Verwijderd

En dan nog dat je inlogged met SA |:( :P

Verwijderd

Topicstarter
Lokaal ja...

Niet online...
Pagina: 1