webForumDet fria alternativet

Söka i databasen

ASP

14 svar · 289 visningar · startad av Bjarne A

Medlem sedan feb. 2001151 inlägg
Frågan#1

Hej!
Jag har en databas med serienummer, modell, tillverkningsår mm
och ett formulär där jag skriver in posterna till databasen

Nu skulle jag vilja hämta hela posten (serienummer, modell, tillverkningsår mm)
som tillhör ett visst serienummer, dvs öka i databasen.

Om man inte hittar rätt serienummer skall man komma till en "errorsida.asp"

Hur kan man fixa detta??

En tacksam nybörjare

Medlem sedan apr. 200165 inlägg
#2

öppna DB släng in alla serie nummer i ett recordset. sedan loopar du detta och jämför mot din request.form("serie")

något sånt här blir det

'efter att ha öppnat db med alla serienr

do until recordset.eof
if recordset("serienr") = request.form(serienr") then
response.redirect ("error.asp")
else
gör det du skall
end if

OBS för att resposne.redirect skall fungera måste du sätt överst på sidan (japp allra överst) <%response.buffer=true%>

gör så här! serie nummret kommer ju från ett formulär!

------------------
crack the liar´s smile

Medlem sedan dec. 2000596 inlägg
#3

öööh?
Med din kod så kommer man väl till error-sidan om den hittar serienumret.

Ska väl vara

if recordset("serienr") <> request.form(serienr") then
response.redirect ("error.asp")

eller?

------------------
Olle: Pappa, jag har fått en sticka i fingret...
Pappa: Nämen Olle, hur många gånger har jag sagt åt dig att du inte får klia dig i huvudet.

Medlem sedan apr. 200118 inlägg
#4

ehm. om jag har fattat det hela rätt så vill du plocka ut ett fält ur databasen där serienummret är det samma som det som skrivs in i formuläret?

isåfall vore det väl lättast att använda sig av en SQL-sträng. Typ:

SQL = "SELECT * FROM tabell WHERE serie = " & Request.Form("serie")
set rs = connection.execute(SQL)

if rs.EOF Then
Response.Redirect("error.asp")
Else
' gör det som skall ske ifall posten fanns
End if

men, jag kan ju också ha förstått det hela fel....

------------------
There is always
something more to do

Medlem sedan feb. 2001151 inlägg
#5

Tack det borde ju funka, det blir som ett lösenord.
Men hur kan man få det att skriva ut just den posten som
innehåller serienummret som man har skrivit in.

Det som händer efter else "gör det du skall"

Medlem sedan jan. 20011 140 inlägg
#6

Oj, fixade det.

[Redigerat av streetrobban den 14 apr 2001]

Medlem sedan apr. 200118 inlägg
#7

jaa. det borde väl bara vara att skriva ut det som vanligt (eller menar du att det skall vara nått speciellt?). typ:

.... 
else %>
hejsan hoppsan: <%= rs("modell") 'osv...
<%
End If
%>

typ...

(OOPs, glömde slutet på KOD-grejjen :)
------------------
There is always
something more to do

[Redigerat av john_samuel den 15 apr 2001]

Medlem sedan feb. 2001151 inlägg
#8

Det vill inte funka
Jag har en databas med namn "db.mdb" sökväg:c:\inetpub\wwwroot\databas\db.mdb
och en tabell med namn "test"
Jag har kolumer med namn serie, modell, year och text
Och "adovbs.inc" på plats
Måsta den vara med?

Jag skickar ett serienummer med denna sida:

<html>

<form method="POST" action="b.asp">

Namn: <input type="text" size="30" name="serie"><br>

<input type="submit" value="Skicka!">
<input type="reset" value="Radera">

</form>

</html>

Och trodde det skulle kunna ta imot av "b.asp" enligt nedan

<html>

<!-- #include virtual="/databas/adovbs.inc" -->

<%	Set Connect = Server.CreateObject("ADODB.Connection")
	Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\databas\db.mdb" 
	RecSet.Open Uppdatera, Connect, adOpenStatic, adLockOptimistic 
	Set RecSet = Server.CreateObject("ADODB.Recordset")
%>

<%
SQL = "SELECT * FROM test WHERE serie = " & Request.Form("serie")
set rs = connection.execute(SQL) 
if rs.EOF Then
Response.Redirect("error.asp")
Else %>

Dessa uppgifter finns på maskinen med ditt serienummer<BR>
<%RecSet("modell")%><BR>
<%RecSet("year")%><BR>
<%RecSet("text")%><BR>

<%End if %>

<%Connect.Close %>

</html>

Men det vill sig inte någon som vet vad alla felen är

Tack

Medlem sedan dec. 200012 464 inlägg
#9

Jag skrev om lite. Om man inte hittade något så stängs aldrig connection. Du hämtar data till rs men skriver recset sedan, ändrade det också.

<html>
<!-- #include virtual="/databas/adovbs.inc" -->

<% Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\databas\db.mdb" 

SQL = "SELECT * FROM test WHERE serie = " & Request.Form("serie")
set rs = connection.execute(SQL) 
found = not rs.eof
if found then
%>
  
Dessa uppgifter finns på maskinen med ditt serienummer<BR>
<%= RS("modell")%><BR>
<%= RS("year")%><BR>
<%= RS("text")%><BR>

<%
End if
rs.close
set rs = nothing
Connect.Close
set connect = nothing
if not found then
   response.redirect "error.asp"
end if
%>

</html>

En sak som jag undrar är vilken datatyp kolumnen serie är. Om den är av typen character så skall sökvärdet omges av '

Vad får du för fel nu?

------------------
essentitia preter non sans multiplicandum

[Redigerat av LarsG den 17 apr 2001]

Medlem sedan feb. 2001151 inlägg
#10

Alla kolumerna är av typen PM (memmo)
och jag får ett felemedelande :

Körningsfel i Microsoft VBScript fel '800a01a8'

Objekt krävs.: ''

/databas/b.asp, rad 7

//Bjarne

Medlem sedan juni 200032 967 inlägg
#11

ok, då är det ett objekt du försöker använda, som du kallar för någonting annat än när du skapade det.

vilken är rad 7?
hur ser hela din kod ut nu?

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
all your base are belong to us!</A>

Medlem sedan dec. 200012 464 inlägg
#12

Såg det nu. Du skapar ett connectionobjekt som heter connect men sedan så anväder du connection. Ändra så att det blir connect överallt.

------------------
essentitia preter non sans multiplicandum

Medlem sedan feb. 2001151 inlägg
#13

Om jag inte ändrar Server.CreateObject("ADODB.connection")
till connect för det skall man väll inte ?

<html>
<!-- #include virtual="/databas/adovbs.inc" -->
<% Set connect = Server.CreateObject("ADODB.connection")
connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\databas\db.mdb" 

SQL = "SELECT * FROM test WHERE serie = " & Request.Form("serie")
set rs = connect.execute(SQL) 
found = not rs.eof
if found then
%>

Dessa uppgifter finns på maskinen med ditt serienummer<BR>
<%= RS("modell")%><BR>
<%= RS("year")%><BR>
<%= RS("text")%><BR>

<%
End if
rs.close
set rs = nothing
connect.Close
set connect = nothing
if not found then
response.redirect "error.asp"
end if
%>

</html>

så får jag felmedelande:

Microsoft OLE DB Provider for ODBC Drivers fel '80040e07'

[Microsoft][Drivrutin för ODBC Microsoft Access] Typblandningsfel i villkorsuttryck.

/databas/b.asp, rad 7

rad 7 = set rs = connect.execute(SQL)

om jag även ändrar till Server.CreateObject("ADODB.connect")
får jag medelandet:

Serverobjekt fel 'ASP 0177 : 800401f3'

Server.CreateObject misslyckades

/databas/b.asp, rad 3

800401f3

//Bjarne

Medlem sedan juni 200032 967 inlägg
#14

Om jag inte ändrar Server.CreateObject("ADODB.connection")
till connect för det skall man väll inte ?

nix! :)

felmeddelandet du får beror förmodligen på att (antar jag) serie är av typen text i tabellen?

då ska frågan se ut så här:

SQL = "SELECT * FROM test WHERE serie = '" & Request.Form("serie") & "'"

mvh,

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
all your base are belong to us!</A>

Medlem sedan feb. 2001151 inlägg
#15

Jipppi !!!!!

Nu funkar det
Tack alla
(det är pg av sådanna här forum Sverige ligger i topp i IT världen)

253 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)