Du kan ju sätta "properties" i Access so att det blir "No duplicates" ligger under "indexed" i design läge.
Men det finns nog något bättre, kan inte asp.
19 svar · 359 visningar · startad av Gimbo
Hejsan hur gör man med denna kod för att se om email adressen i databasen finns redan, dvs så att man inte kan posta två inlägg med samma email??
<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("databsen.mdb")
%>
<%
Set RecSet = Server.CreateObject("ADODB.Recordset")
Addera = "SELECT * FROM bekrafta"
RecSet.Open Addera, Connect, adOpenStatic, adLockOptimistic
RecSet.AddNew
RecSet("eNamn") = Request.Form("enamn")
RecSet("fNamn") = Request.Form("fnamn")
RecSet("stad") = Request.Form("stad")
RecSet("mail") = Request.Form("mail")
RecSet("info") = Replace(Server.HTMLEncode(Request.Form("info")), chr(13), "<BR>", 1)
RecSet("datum") = Request.Form("datum")
RecSet("ip") = Request.Form("ip")
RecSet.Update
RecSet.Close
Connect.Close
Set Connect = Nothing
Response.Write "du är inlagd i databasen"
%>
Du kan ju sätta "properties" i Access so att det blir "No duplicates" ligger under "indexed" i design läge.
Men det finns nog något bättre, kan inte asp.
Detta kanske kan fungera:
<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("databsen.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset")
Addera = "SELECT * FROM bekrafta where mail ='" & Request.Form("mail") & "'"
RecSet.Open Addera, Connect, adOpenStatic, adLockOptimistic
If RecSet.EOF then
RecSet.AddNew
RecSet("eNamn") = Request.Form("enamn")
RecSet("fNamn") = Request.Form("fnamn")
RecSet("stad") = Request.Form("stad")
RecSet("mail") = Request.Form("mail")
RecSet("info") = Replace(Server.HTMLEncode(Request.Form("info")), chr(13), "<BR>", 1)
RecSet("datum") = Request.Form("datum")
RecSet("ip") = Request.Form("ip")
RecSet.Update
Response.Write "Du är inlagd i databasen"
Else
Response.Write "Du fanns redan i databasen"
End If
RecSet.Close
Connect.Close
Set Connect = Nothing
%>
Det fungerade den la till en ny post i databsen med samma email ändå, knepigt nu va??
det fungerar inte att ta bort den eller flytta ut den, om jag tar bort den så får jag fel meddelandet:
ADODB.Recordset fel '800a0c93'
Åtgärden som programmet begärt är inte tillåten i det här sammanhanget.
om jag flyttar ut den får jag felmeddelandet:
ADODB.Recordset fel '800a0bcd'
Antingen är BOF eller EOF satt till True, eller så har aktuell post raderats; åtgärden som programmet begärt kräver en aktuell post.
SNälla ngn som kan hjälpa??!!
Jag skulle göra så här istället:
set objC = Server.CreateObject ( "ADODB.Connection" )
set objRS = objC.Execute ( "SELECT mail FROM bekrafta WHERE mail = '" & Request.Form ( "mail" ) & "'" )
If objRS.EOF Then
objC.Execute ( "INSERT INTO bekrafta (eNamn, fNamn, stad, mail, info, datum, ip) VALUES('" & Request.Form ( "enamn" ) & "', '" & Request.Form ( "fnamn" ) & "', '" & Request.Form ( "stad" ) & "', '" & Request.Form ( "mail" ) & "', '" & Request.Form ( "info" ) & "', '" & Request.Form ( "datum" ) & "', '" & Request.Form ( "ip" ) & "'" )
Response.Write "Du är tillagd"
Else
Response.Write "Email upptagen"
End If
objRS.Close
set objRS = Nothing
objC.Close
set objC = Nothing
Mindre och snyggare kod, plus att det är ett snabbare alternativ. :)
men går det inte att göra på något sätt så att jag lägger till posterna i databasen på det sättet jag gör, dvs med recset??
SPiNs variant är helt klart att föredra.
det fungerar inte, så här ser min kod för att lägga in posten i databasen:
<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("databasen.mdb")
%>
<%
set objC = Server.CreateObject ( "ADODB.Connection" )
set objRS = objC.Execute ( "SELECT mail FROM bekrafta WHERE mail = '" & Request.Form ( "mail" ) & "'" )
If objRS.EOF Then
objC.Execute ( "INSERT INTO bekrafta (eNamn, fNamn, stad, mail, info, datum, ip) VALUES('" & Request.Form ( "enamn" ) & "', '" & Request.Form ( "fnamn" ) & "', '" & Request.Form ( "stad" ) & "', '" & Request.Form ( "mail" ) & "', '" & Request.Form ( "info" ) & "', '" & Request.Form ( "datum" ) & "', '" & Request.Form ( "ip" ) & "'" )
Response.Write "Du är tillagd"
Else
Response.Write "Email upptagen"
End If
objRS.Close
set objRS = Nothing
objC.Close
set objC = Nothing
%>
jag får felmeddelandet:
ADODB.Connection fel '800a0e78'
Åtgärden som programmet begärt är inte tillåten om objektet är stängt.
<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("databasen.mdb")
%>
<%
set objRS = connect.Execute ( "SELECT mail FROM bekrafta WHERE mail = '" & Request.Form ( "mail" ) & "'" )
If objRS.EOF Then
objC.Execute ( "INSERT INTO bekrafta (eNamn, fNamn, stad, mail, info, datum, ip) VALUES('" & Request.Form ( "enamn" ) & "', '" & Request.Form ( "fnamn" ) & "', '" & Request.Form ( "stad" ) & "', '" & Request.Form ( "mail" ) & "', '" & Request.Form ( "info" ) & "', '" & Request.Form ( "datum" ) & "', '" & Request.Form ( "ip" ) & "'" )
Response.Write "Du är tillagd"
Else
Response.Write "Email upptagen"
End If
objRS.Close
set objRS = Nothing
connect.Close
set connect = Nothing
%>
Du har blandat ihop dina variabelnamn
LarsG, det fungerar fortfarande inte, lr nu fungerar en del utav koden, dvs när jag knappar in samma mail så skriver den ut att email adressen är upptagen men när jag skriver in en email som inte finns i databasen så får jag detta felmeddelande:
Körningsfel i Microsoft VBScript fel '800a01a8'
Objekt krävs.: 'objC'
men det finns ju ingen objC i koden som larsG gav mig??
okej jag va blind som inte såg det där, måste fixa glasögon för mycket dator sittande verkar det som, men det fungerar fortfarande INTE, jag får följande felmeddelande nu:
Microsoft OLE DB Provider for ODBC Drivers fel '80040e14'
[Microsoft][Drivrutin för ODBC Microsoft Access] Syntaxfel i INSERT INTO-uttryck.
tabellarna i databasen och allt stämmer överens med det som står i satsen, I dont get it??
connect.Execute "INSERT INTO bekrafta (eNamn, fNamn, stad, mail, info, [datum], ip) " & _
" VALUES('" & Request.Form ( "enamn" ) & "', '" & Request.Form ( "fnamn" ) & "', '" & _
Request.Form ( "stad" ) & "', '" & Request.Form ( "mail" ) & "', '" & Request.Form ( "info" ) & _
"', #" & Request.Form ( "datum" ) & "#, '" & Request.Form ( "ip" ) & "')"
tack lars och alla andra det fungerade, men en fråga lars, vad var felet med insert grejen?? förrutom att ett datum skall innehålla detta tecken #??
Det räcker att # saknas ;)
Sen så var det en avslutande parentes som saknades.
Ordet DATUM kan ställa till problem om man har en svensk access, har jag hört, och därför satte jag det inom []