Avatar billede sitemaster Nybegynder
18. oktober 2002 - 20:31 Der er 10 kommentarer og
1 løsning

oprette ny bruger i database, men kun hvis han ikke eksistere

Troede at jeg kunne bruge "on error resume next" men det virker ikke.

Jeg har en database hvor en bruger selv skal kunne oprette sig, det virker udemærket, men hvis brugeren er i databasen i forvejen går det galt, jeg får følgende fejl.

Microsoft OLE DB Provider for ODBC Drivers error '80040e2f'

[Microsoft][ODBC Microsoft Access Driver] The changes you requested to the table were not successful because they would create duplicate values in the index, primary key, or relationship. Change the data in the field or fields that contain duplicate data, remove the index, or redefine the index to permit duplicate entries and try again.

jeg har sat "tlf" til primær nøgle i databasen, men hvis jeg bruger "on error resume next" går den bare videre som om der ikke er nogle fejl.

Hvad gør jeg galt.
Avatar billede pfp Nybegynder
18. oktober 2002 - 20:42 #1
Du laver bare et lille tjek først.

If ot rs.eof or rs.bof then
- opret bruger -
  else
Response.Write "Brugeren eksisterer allerede i databasen."
End if
Avatar billede pfp Nybegynder
18. oktober 2002 - 20:42 #2
hov ot skulle selfølgelig være not
Avatar billede no_doubt Nybegynder
18. oktober 2002 - 20:42 #3
Avatar billede sitemaster Nybegynder
18. oktober 2002 - 21:05 #4
Her kommer lige mit ASP
har sat det ind du skrev pfp men den samme fejl kommer alligevel,
har skisme nok placeret det lidt forkert. :-)

<%
'Åbner connection til databasen
   
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../log/bruger.mdb")

'Hvis brugeren har submittet formularen
    if Request.ServerVariables("REQUEST_METHOD") = "POST" then
   
'Tjecker om felterne er udfyld
    if (Request.Form("tlf") <> "" AND Request.Form("fornavn") <> "" AND Request.Form("efternavn") <> "" AND Request.Form("adresse") <> "" AND Request.Form("postnr") <> "" AND Request.Form("by") <> "" AND Request.Form("land") <> "" AND Request.Form("e-mail") <> "") then

'Tilføjer brugeren til databasen
    Set rs = Server.CreateObject("ADODB.Recordset")
    strSQL = "select * from nyheder"
    rs.Open strsql, conn, 1, 3

If not rs.eof or rs.bof then

'Tilføjer brugeren til databasen og sender ham/hende til login siden
    rs.AddNew
    rs("tlf") = Server.HTMLEncode(Request("tlf"))
    rs("fornavn") = Server.HTMLEncode(Request("fornavn"))
    rs("efternavn") = Server.HTMLEncode(Request("efternavn"))
    rs("adresse") = Server.HTMLEncode(Request("adresse"))
    rs("postnr") = Server.HTMLEncode(Request("postnr"))
    rs("by") = Server.HTMLEncode(Request("by"))
    rs("land") = Server.HTMLEncode(Request("land"))
    rs("fax") = Server.HTMLEncode(Request("fax"))
    rs("e-mail") = Server.HTMLEncode(Request("e-mail"))
    rs("priverhverv") = Server.HTMLEncode(Request("priverhverv"))
    rs("kontaktperson") = Server.HTMLEncode(Request("kontaktperson"))
    rs.update
   
    Response.Write("<strong><font color='red'>Du har sendt formen!</font></strong>")

    rs.Close
    set rs = nothing
    conn.close

    else
    Response.Write("<strong><font color='red'>Du mangler at udfylde felter!</font></strong>")
    end if

Response.Write "Brugeren eksisterer allerede i databasen."
End if

    end if
%>
Avatar billede sitemaster Nybegynder
18. oktober 2002 - 21:13 #5
har sat den "else" ind lige over Response.Write "Brugeren eksisterer allerede i databasen." men samme fejl
Avatar billede erikjacobsen Ekspert
18. oktober 2002 - 21:41 #6
strSQL = "select * from nyheder where tlf='" & Server.HTMLEncode(Request("tlf")) & "'"
Avatar billede sitemaster Nybegynder
18. oktober 2002 - 21:54 #7
nu ser min kode sådan ud

<%
'Åbner connection til databasen
   
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../log/bruger.mdb")

'Hvis brugeren har submittet formularen
    if Request.ServerVariables("REQUEST_METHOD") = "POST" then
   
'Tjecker om felterne er udfyld
    if (Request.Form("tlf") <> "" AND Request.Form("fornavn") <> "" AND Request.Form("efternavn") <> "" AND Request.Form("adresse") <> "" AND Request.Form("postnr") <> "" AND Request.Form("by") <> "" AND Request.Form("land") <> "" AND Request.Form("e-mail") <> "") then

'Tilføjer brugeren til databasen
    Set rs = Server.CreateObject("ADODB.Recordset")
'    strSQL = "select * from nyheder"
    strSQL = "select * from nyheder where tlf='" & Server.HTMLEncode(Request("tlf")) & "'"
    rs.Open strsql, conn, 1, 3

If Not rs.eof or rs.bof then

'Tilføjer brugeren til databasen
    rs.AddNew
    rs("tlf") = Server.HTMLEncode(Request("tlf"))
    rs("fornavn") = Server.HTMLEncode(Request("fornavn"))
    rs("efternavn") = Server.HTMLEncode(Request("efternavn"))
    rs("adresse") = Server.HTMLEncode(Request("adresse"))
    rs("postnr") = Server.HTMLEncode(Request("postnr"))
    rs("by") = Server.HTMLEncode(Request("by"))
    rs("land") = Server.HTMLEncode(Request("land"))
    rs("fax") = Server.HTMLEncode(Request("fax"))
    rs("e-mail") = Server.HTMLEncode(Request("e-mail"))
    rs("priverhverv") = Server.HTMLEncode(Request("priverhverv"))
    rs("kontaktperson") = Server.HTMLEncode(Request("kontaktperson"))
    rs.update
   
    Response.Write("<strong><font color='red'>Du har sendt formen!</font></strong>")

    rs.Close
    set rs = nothing
    conn.close

    else
    Response.Write("<strong><font color='red'>Du mangler at udfylde felter!</font></strong>")
    end if

else
Response.Write "Brugeren eksisterer allerede i databasen."
End if

    end if
%>

men nu kommer der en ny fejl.

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

[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.

/test/bruger/opret.asp, line 40

line 40 er rs.Open strsql, conn, 1, 3
Avatar billede erikjacobsen Ekspert
18. oktober 2002 - 22:55 #8
Nå da da. Du har måske lagt dit telefon nummer som en integer
i databasen. Det er en klassisk begynderfejl.
  1) Det er IKKE en integer, da du aldrig skal regne på den
  2) Den kan indeholde meget andet end cifre "11111111/22222222"
    hvis en bruger vil angive 2, eller "11111111-333" hvis med
    lokalnummer, eller "+46 11111111" hvis fra udlandet
  3) Når du laver en HTML encode på den, mener du jo heller ikke
    det er et tal.

Men ok da. Prøv så:
strSQL = "select * from nyheder where tlf=" & Request("tlf")
Avatar billede sitemaster Nybegynder
18. oktober 2002 - 23:15 #9
nu fatter jeg sgu minus.

jeg ville dele de 200 point mellem jer alle 3, men pfp fik dem alle sammen, og erikjacobsen som jeg ville have givet 100 point var slet ikke på min liste.

Hvis jeg kan give jeg point på en anden måde så skriv lige tilbage så får i de point, for ret skal sgu være ret.

PS: har rettet If not rs.eof or rs.bof then til If rs.eof or rs.bof then
så virker det.
Avatar billede erikjacobsen Ekspert
18. oktober 2002 - 23:19 #10
Glem det - jeg samler ikke på ligegyldige point
Avatar billede pfp Nybegynder
18. oktober 2002 - 23:30 #11
Pointene har heller ikke min største interesse. Så hvis det er nogle involverede i dette som er interesseret i point, kan jeg sagtens overføre dem.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester