webForumDet fria alternativet

Kontrollera dubbletter?

4 svar · 191 visningar · startad av henrik2001

henrik2001Medlem sedan dec. 2000241 inlägg
#1

Hej!
Jag har strulat till det ganska rejält här, men jag hoppas att någon kan hjälpa mig!
Koden ska kontrollera dubbletter i databasen när man ska lägga in en ny post...

<%
strNamn = Request.Form("NAMN")
strNamn2 = Request.Form("NAMN2")

Set minConn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
MdbFilePath = Server.MapPath("databas.mdb")
minConn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"

' Kolla om det finns en dubblett.
SQL1 = "Select * From TABELL Where NAMN='" & strNamn & "' & " & " NAMN2 ='" & strNamn2 & "'"

rs.Open SQL1, minConn, 1, 2

If rs.EOF Then
' Ingen dubblett hittad...lägg till i databasen.

SQL2 = "Select * From TABELL Where 1=2"

' Rad 30 nedan
rs.Open SQL2, minConn, 1, 2
rs.AddNew

rs("NAMN") = strNamn
rs("NAMN2") = strNamn2

rs.Update
rs.Close

Response.Write "<b>Namnet inlagt i databasen.</b>"

Else
%>

Namnet "<%= strNamn %> <%= strNamn2 %>" finns redan i databasen.
<a href="javascript:history.back(-1)">Tillbaka till lägg-till-formuläret.</a>

<% End If %>

Här är felmeddelandet:

ADODB.Recordset fel '800a0e79'
Åtgärden som programmet begärt är inte tillåten om objektet är öppet.
/set/add2.asp, rad 30

Som sagt...har trasslat till det...
=)

/Henrik

CatZMedlem sedan jan. 20022 440 inlägg
#2

Måste man inte göra 2 olika recordsets dvs rs1 och rs2 ihop med SQL1,2 ?

@ndersMedlem sedan juni 200032 969 inlägg
#3

Förkortning (och förbättring) av din kod:

<%
strNamn = Request.Form("NAMN")
strNamn2 = Request.Form("NAMN2")

Set minConn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
MdbFilePath = Server.MapPath("databas.mdb")
minConn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"

' Kolla om det finns en dubblett.
SQL1 = "Select * From TABELL Where NAMN='" & strNamn & "' & " & " NAMN2 ='" & strNamn2 & "'"

rs.Open SQL1, minConn, 1, 2

If rs.EOF Then
' Ingen dubblett hittad...lägg till i databasen.

[b]SQL2 = "INSERT INTO TABELL (NAMN, NAMN2) VALUES ('" & strNamn & "', '" & strNamn2 & "')"[/b]
minConn.Execute SQL2,,128

Response.Write "<b>Namnet inlagt i databasen.</b>"

Else
%>

Namnet "<%= strNamn %> <%= strNamn2 %>" finns redan i databasen.
<a href="java script:history.back(-1)">Tillbaka till lägg-till-formuläret.</a>

<% End If %>

Om du ska återanvända ett recordset på det sättet du försökte göra, så måste du stänga det först, med rs.close.

Mvh,

pontaMedlem sedan juli 200237 inlägg
#4

Prova med det här... Du kan inte öppna ett redan öppet recordset, det gör du på rad 30...

<%
strNamn = Request.Form("NAMN")
strNamn2 = Request.Form("NAMN2")

Set minConn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
MdbFilePath = Server.MapPath("databas.mdb")
minConn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"

' Kolla om det finns en dubblett.
SQL1 = "Select * From TABELL Where NAMN='" & strNamn & "' AND NAMN2 ='" & strNamn2 & "'"

rs.Open SQL1, minConn, 1, 2

If rs.EOF Then
' Ingen dubblett hittad...lägg till i databasen.

SQL2 = "INSERT INTO TABELL(NAMN, NAMN2) VALUES('" & strNamn & "','" & strNamn2 & "')"

minConn.Execute SQL2,,128

Response.Write "<b>Namnet inlagt i databasen.</b>"

Else
%>

Namnet "<%= strNamn %> <%= strNamn2 %>" finns redan i databasen.
<a href="java script:history.back(-1)">Tillbaka till lägg-till-formuläret.</a>

<%
End If 
rs.Close%>
henrik2001Medlem sedan dec. 2000241 inlägg
#5

Ok!
Tack för hjälpen, ska testa så fort jag kan!

/Henrik

127 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)