webForumDet fria alternativet

Vad är det för fel...???

ASP

3 svar · 313 visningar · startad av devotion

Medlem sedan jan. 20013 582 inlägg
Frågan#1

Hej!
Håller på och gör en CD-databas. Har skrivit lite kod som jag inte får att fungera... Funktionen ska i a f vara så här:
När man registrerar en ny skiva vill jag att scriptet kollar om artisten finns med i tabellen artist. Finns artisten med ska Recordsetet bara returnera artist_id. Finns artisten inte med ska artisten läggas till som en ny post.

Eftersom tabellerna relarterar till varandra ska det aktuella artist_id läggas in i tabellen album, där även annan albuminfo ska läggas in. Låter det krångligt?? Skicka i alla fall med koden:

 
<%@ Language = VBScript %>
<% Option Explicit %>
<!--#include virtual="\adovbs.inc"-->

<%
Dim objConn

Set objConn = Server.CreateObject("ADODB.Connection")

objConn.ConnectionString =  "DSN=mydb"
objConn.Open

Dim strAlbum_namn
Dim strArtist_namn

strAlbum_namn = Request.Form("album_namn")
strArtist_namn = Request.Form("artist_namn")

Dim strSQL
Dim strSQL2
Dim strSQL3
Dim strSQL4
Dim objRS
Dim objRS2
Dim objRS3
Dim objRS4

Set objRS = Server.CreateObject("ADODB.Recordset")
Set objRS2 = Server.CreateObject("ADODB.Recordset")
Set objRS3 = Server.CreateObject("ADODB.Recordset")
Set objRS4 = Server.CreateObject("ADODB.Recordset")

strSQL = "SELECT artist_name FROM artist WHERE artist_name = '" & strArtist_namn & "'"
objRS.Open strSQL, objConn, adOpenDynamic, adLockPessimistic, adCMDText
If objRS.EOF Then

strSQL2 = "INSERT INTO artist(artist_name) VALUES('" & strArtist_namn & "')"
objRS2.Open strSQL2, objConn, adOpenDynamic, adLockPessimistic, adCMDText

Else

strSQL3 = "SELECT artist_id FROM artist WHERE artist_name = '" & strArtist_namn & "'"

objRS3.Open strSQL3, objConn, adOpenDynamic, adLockPessimistic, adCMDText

Dim artist_id

artist_id = objRS3("artist_id")
Response.Write("artist_id")
End If

strSQL4= "INSERT INTO album(album_name, artist_id) Values('" & strAlbum_namn & "', '" & artist_id & "')"
objRS4.Open strSQL4, objConn, adOpenDynamic, adLockPessimistic, adCMDText

objRS.Close
objRS2.Close
objRS3.Close
objRS4.Close
objConn.Close
Set objRS = Nothing
Set objRS2 = Nothing
Set objRS3 = Nothing
Set objRS4 = Nothing
Set objConn = Nothing

%>

När jag kör scriptet får jag följande felmeddelande:
Feltyp:
ADODB.Recordset (0x800A0E78)
Åtgärden är inte tillåten när objektet är stängt.
/add.asp, line 56

Vad är det för fel???

/Henrik

------------------
Henke

Medlem sedan dec. 19996 721 inlägg
#2

Det beror på at tdu stänger ett recordset som aldrig öppnas (objRS3)

Du behöver inte skapa några recordset när du gör operationer som inte returnerar något (INSERT/UPDATE/DELETE).

<%@ Language = VBScript %>
<% Option Explicit %>
<%
Dim objConn

Set objConn = Server.CreateObject("ADODB.Connection")

objConn.ConnectionString = "DSN=mydb"
objConn.Open

Dim strAlbum_namn
Dim strArtist_namn
Dim artist_id
strAlbum_namn = Request.Form("album_namn")
strArtist_namn = Request.Form("artist_namn")

Dim strSQL
Dim objRS

Set objRS = Server.CreateObject("ADODB.Recordset")

strSQL = "SELECT artist_id,artist_name FROM artist WHERE artist_name = '" & strArtist_namn & "'"
objRS.Open strSQL, objConn, 3, 3
If objRS.EOF Then
	objRS.AddNew
	objRS("artist_name")=strArtist_namn
	objRS.Update
end if
artist_id=objRS("artist_id")

objRS.close

strSQL= "INSERT INTO album(album_name, artist_id) Values('" & strAlbum_namn & "', " & artist_id & ")"

objConn.Execute strSQL

objConn.Close
Set objRS = Nothing
Set objConn = Nothing

%>

[r]artist_id borde vara en räknare, så inga enkelfnuttar runt den....[/r]

[Redigerat av emission den 22 jan 2001]

Medlem sedan jan. 20013 582 inlägg
#3

Hej!
Tackar ödmjukast!! Nu fungerar det perfekt!!!!

/Henrik

------------------
Henke

Medlem sedan dec. 19996 721 inlägg
#4

Gött!

266 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
138 ms — ändringar (db)