Avatar billede n!nja Nybegynder
19. december 2001 - 11:04 Der er 2 kommentarer og
1 løsning

Skriver 2 gange ned i db... hvorfor???

Hej!

Jeg har lavet et asp dokument, hvor det skal være muligt at tilføje poster til en tabel i min db. Men af en eller anden grund tilføjer den 2 poster med det samme indhold - hvorfor?

Min kode ser sådan ud:
----------------------
<% @LANGUAGE = VBScript %>
<%
Option Explicit
Response.Expires = 0
Response.Buffer = True
Dim strConnection, rs, strSQL, objConn, strDato, strNavn, strBeskrivelse
%>

<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">
<HTML>
<HEAD>
<!-- Minus AutoDato -->
    <TITLE>OpretMenu</TITLE>
<META NAME=\"Generator\" CONTENT=\"Stone\'s WebWriter 3\">
<link rel=\"stylesheet\" href=\"../css/ramme_iframe.css\" type=\"text/css\">
<link rel=\"stylesheet\" href=\"../css/form.css\" type=\"text/css\">

<SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript>
    <!--

    function btnSubmit_onclick() {
       
        var TRUE = new Boolean(\"True\")
        var FALSE = new Boolean(\"False\")
       
        blnError = FALSE
        strError = \"Følgende felter mangler at bliver udfyldt før menuen kan indsættes: \\n\\n\"
       
        if (formmenu.dato.value == \"\")
            {
                blnError = TRUE
                strError = strError + \" - Dag\\n\"
            };

        if (formmenu.mm.value == \"\")
            {
                blnError = TRUE
                strError = strError + \" - Måned\\n\"
            };

        if (formmenu.aar.value == \"\")
            {
                blnError = TRUE
                strError = strError + \" - År\\n\"
            };

        if (formmenu.navn.value == \"\")
            {
                blnError = TRUE
                strError = strError + \" - Ret\\n\"
            };
       
        if (formmenu.beskrivelse.value == \"\")
            {
                blnError = TRUE
                strError = strError + \" - Beskrivelse\\n\"
            };           

        if (blnError == TRUE)
            {
                strError = strError + \"\\nIndtast venligst de manglende data.\"
                alert(strError)               
            }
        else
            {
                formmenu.submit()
            };               
       
    }
    //-->
    </SCRIPT>


</HEAD>
<body>


<%
\'tjekker om der er indtastet noget i tekstfelterne
if Request.Form(\"dato\") = \"\" OR Request.Form(\"Navn\") = \"\" OR Request.Form(\"Beskrivelse\") = \"\" then
%>

<table border=\"0\" width=\"100%\" height=\"100%\">
  <tr>
    <td width=\"*\" height=\"*\"></td>
    <td width=\"400\" height=\"200\">
       
            <B>Tilføj menu</B><BR><BR>

            Udfyld nedenstående punkter og klik på knappen <BR>
            \"Tilføj menu\"    for at tilføje en menu til databasen.<BR><BR>
            HUSK - <U>Alle</U> felter skal udfyldes!<BR><BR>

            <form NAME=\"formmenu\" METHOD=\"POST\">

            <TABLE BORDER=\"0\">
            <TR>
                <TD align=\"right\">Dato:</TD>
                <TD>
            <input type=\"date/time\" NAME=\"dato\" maxlength=\"2\" SIZE=\"2\" class=\"text_felt\">
            -
            <INPUT TYPE=\"text\" SIZE=\"2\" MAXLENGTH=\"2\" NAME=\"mm\" class=\"text_felt\">
            -
            <INPUT TYPE=\"text\" SIZE=\"4\" MAXLENGTH=\"4\" NAME=\"aar\" class=\"text_felt\">
            dd-mm-åååå<BR></TD>
            </TR>
            <TR>
                <TD align=\"right\">Ret:</TD>
                <TD>
            <INPUT TYPE=\"text\" SIZE=\"25\" MAXLENGTH=\"45\" NAME=\"navn\" CLASS=\"text_felt\">
            <BR></TD>
            </TR>
            <TR>
                <TD align=\"right\">Beskrivelse:</TD>
                <TD>
            <textarea type=\"memo\" ROWS=\"5\" name=\"beskrivelse\" cols=\"25\" class=\"text_felt\"></textarea>
            <BR></TD>
                </TR>
            <TR>
                <TD></TD>
                <TD>
            <INPUT TYPE=\"submit\" VALUE=\"Tilføj menu\" maxlength=\"20\" ID=btnsubmit NAME=\"btnsubmit\" onclick=\"return btnSubmit_onclick()\" class=\"knap\">
          </TD>
           
    </TR>
            </TABLE>

</td>
    <td width=\"*\" height=\"*\"></td>
  </tr>
  <tr>
    <td width=\"*\" height=\"*\"></td>
    <td width=\"*\" height=\"*\"></td>
    <td width=\"*\" height=\"*\"></td>
  </tr>
</table>

<% else
dim dato, mm, aar

\' lægger indtastede data i variabler
dato = request.form(\"dato\")
mm = request.form(\"mm\")
aar = request.form(\"aar\")

\'tjekker om der kun er indtastet numre
If not IsNumeric(dato) OR not IsNumeric(mm) OR not IsNumeric(aar) then

Response.Write(\"Fejl i indtastet nummer - skal være et tal\")
   
    else

aar = int(aar)
dato = int(dato)
mm = int(mm)
   
\'sammensætter datoen fra tekstfelterne
strDato = dateserial(aar,mm,dato)

strBeskrivelse = Replace(Request.Form(\"beskrivelse\"), \"\'\", \"\")

strNavn = Replace(Request.Form(\"Navn\"), \"\'\", \"\")

\'Databaseforbindelse
Set objConn = Server.CreateObject(\"ADODB.Connection\")
strConnection = \"Provider=Microsoft.Jet.OLEDB.4.0; \" & _   
\"Data Source=\" & Server.Mappath(\"../db/seniornet.mdb\")
objConn.Open strConnection

\'Benytter recordset-objektet til at hente data med
Set rs = Server.Createobject(\"ADODB.Recordset\")

\' skriver ned i db
strSQL = \"INSERT INTO menu (\"

strSQL = strSQL & \"Dato, \"
strSQL = strSQL & \"Navn, \"
strSQL = strSQL & \"Beskrivelse) \"

strSQL = strSQL & \"values( \"

strSQL = strSQL & \"\'\" & strDato & \"\', \"
strSQL = strSQL & \"\'\" & strNavn & \"\', \"
strSQL = strSQL & \"\'\" & strBeskrivelse & \"\')\"

objConn.Execute(strSQL)
   
Response.write \"<CENTER>\" & \"Menuen er tilføjet\" &  \"<BR><BR>\"

Response.write \"<a href=\'opretmenu.asp\'>\" & \"Tilføj flere menuer\" & \"</a>\"

\' Luk databaseforbindelse
objConn.Close
Set objConn = Nothing

end if
end if
%>       

</BODY>
</HTML>
----------------------------
Mvh - N!NJA
Avatar billede zeptic Nybegynder
19. december 2001 - 11:25 #1
hvad sker der hvis du laver en
  rs.open strSQL, objConn,1,3
i stedet for
  objConn.Execute(strSQL)
Avatar billede n!nja Nybegynder
19. december 2001 - 12:05 #2
Så virker det fint... :-)

Hvad er forskellen på de to linier? Eller rettere sagt hvad gør din linie helt præcist?

Tusind tak for hjælpen - N!NJA
Avatar billede zeptic Nybegynder
19. december 2001 - 13:01 #3
Jeg har læst et-eller-andet sted, at conn.Execute udføres direkte på db serveren og rs.Open behandles af driveren inden det sendes til db severen således at bl.a. flere identiske kald kan udføres hurtigere (de caches).

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