Avatar billede vipdk Nybegynder
12. juli 2002 - 13:39 Der er 4 kommentarer og
2 løsninger

tjek poster inden indskriv i databasen

Hej
Jeg er rimelig asp newbie, hvilket mit problem nok oxo afspejler ..
Jeg har en side som skal skrive data i en access database, men inden skal den tjekke om feltet "drinknavn" eksistere i databasen i forvejen, men jeg kan ikke få min kode til at virke, dne skriver ikkke ind og kommer ik med nogen fejlmeddelse.
Håber der er en der, kan / vil rette mine fejl i koden :)

--- kodestart ---
<%
If action = "" then
response.write "drinks"
' Databaseforbindelse - husk at angive sti til din database
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../database/database.mdb")
Conn.Open DSN
response.write "<form action=""indskriv.asp?action=save"" method=""post"">"
response.write "<TABLE BORDER=""0"">"
response.write "<TR><TD>Dit navn</TD><TD><input type=""text"" value=""ukendt"" name=""indskrivnavn"" size=""49""></TD></TR>"
response.write "<TR><TD>Cocktail navn</TD><TD><input type=""text"" value="""" name=""drinknavn"" size=""49""></TD></TR>"
SQL2 = "Select * From drinkstype Order by drinkstype"
Set rs2 = conn.execute(SQL2)
response.write "<TR><TD>Drinkstype type</TD><TD><select name=""drinkstype"">"
Do while not rs2.eof
strdrinkstype = rs2("drinkstype")
response.write "<option value="""& strdrinkstype &""">"& strdrinkstype &"</option>"
rs2.movenext
loop
response.write "</select></TD></TR>"
response.write "<TR><TD>Antal glas</TD><TD><input type=""text"" value=""1"" name=""antal"" size=""49""></TD></TR>"
response.write "<TR><TD VALIGN=""TOP"">Ingredienser</TD><TD><textarea rows=""6"" name=""ingredienser"" cols=""37""></textarea></TD></TR>"
response.write "<TR><TD VALIGN=""TOP"">Fremgangs måde</TD><TD><textarea name=""hvordan"" rows=""6"" cols=""37""></textarea></TD></TR>"
response.write "<TR><TD VALIGN=""TOP"">Evt. kommentar</TD><TD><textarea rows=""6"" name=""kommentar"" cols=""37""></textarea></TD></TR>"
response.write "<input type=""hidden"" name=""REMOTE_ADDR"">"
response.write "<input type=""hidden"" name=""now"">"
response.write "<input type=""hidden"" name=""date"">"
response.write "<TR><TD></TD><TD><input type=""submit"" value=""Gem"">&nbsp;<input type=""reset"" value=""Slet Alt""></TD></TR>"
response.write "</form><table>"
Else
SQL3 =" Select Count(*) as antal from drinks where drinknavn = '" & Request.Form("drinknavn") & "'"
set rs3 = conn.execute(SQL3)
if rs3("antal") = 0 then

' SQL sætning opbygges
strSQL = "Insert into drinks ("

strSQL = strSQL & "tid, "
strSQL = strSQL & "ip, "
strSQL = strSQL & "dato, "
strSQL = strSQL & "indskrivnavn, "
strSQL = strSQL & "dinknavn, "
strSQL = strSQL & "glas, "
strSQL = strSQL & "ingredienser, "
strSQL = strSQL & "hvordan, "
strSQL = strSQL & "kommentar, "
strSQL = strSQL & "drinkstype, "
strSQL = strSQL & "antal) "


strSQL = strSQL & "values( "

strSQL = strSQL & "'" & now & "', "
strSQL = strSQL & "'" & Request.ServerVariables("REMOTE_ADDR") & "', "
strSQL = strSQL & "'" & Date & "', "
strSQL = strSQL & "'" & Request.Form("indskrivnavn") & "', "
strSQL = strSQL & "'" & Request.Form("drinknavn") & "', "
strSQL = strSQL & "'" & Request.Form("glas") & "', "
strSQL = strSQL & "'" & Request.Form("ingredienser") & "', "
strSQL = strSQL & "'" & Request.Form("hvordan") & "', "
strSQL = strSQL & "'" & Request.Form("kommentar") & "', "
strSQL = strSQL & "'" & Request.Form("drinkstype") & "',"
strSQL = strSQL & "'" & Request.Form("antal") & "')"
Else
response.write"fejl"
' SQL sætning eksekveres
Conn.Execute(strSQL)
' Luk databaseforbindelse
rs.Close
set rs = Nothing
Conn.Close
Set Conn = Nothing
End If
End If

%>

</div>
</body>
</html>
---kodeslut ---

Håber der er en der vil hjælpe mig ..
Avatar billede aho_metier Nybegynder
12. juli 2002 - 14:05 #1
Du bruger  action = ""  du mener vel: request("action")
Avatar billede kotelet Nybegynder
14. juli 2002 - 14:47 #2
Hej du! .. Jeg har kigget lidt på din kode og prøvet at gøre det lidt nemmere for dig. Personligt foretrækker jeg at holde ASP-kode og HTML kode adskilt så meget som muligt. SÅ her er den "nye" kode: .. Jeg har KUN redigeret formatteringen, ikke ændret noget af koden:

<%
IF action = "" THEN
    response.write "drinks"

    Set Conn = Server.CreateObject("ADODB.Connection")
    DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
    DSN = DSN & "DBQ=" & Server.MapPath("../database/database.mdb")
    Conn.Open DSN
    %>
    <form action="indskriv.asp?action=save" method="post">
    <TABLE BORDER="0">
    <TR>
    <TD>Dit navn</TD>
    <TD><input type="text" value="ukendt" name="indskrivnavn" size="49"></TD>
    </TR>
   
    <TR>
    <TD><br>
      Cocktail navn</TD>
    <TD><input type="text" value="" name="drinknavn" size="49"></TD></TR>
    <%
    SQL2 = "Select * From drinkstype Order by drinkstype"
    Set rs2 = conn.execute(SQL2)
    %>
    <TR>
    <TD><br>
      Drinkstype type</TD>
    <TD><select name="drinkstype">
    <%
   
    DO while not rs2.eof
        strdrinkstype = rs2("drinkstype")
        %>
       
        <option value="<%=strdrinkstype%>"><%=strdrinkstype%></option>
       
        <%
        rs2.movenext
    LOOP
    %>
    </select>
    </TD></TR>
    <TR>
    <TD><br>
      Antal glas</TD>
    <TD><input type="text" value="1" name="antal" size="49"></TD>
    </TR>
  <br>
  <TR>
    <TD VALIGN="TOP">Ingredienser</TD>
    <TD><textarea rows="6" name="ingredienser" cols="37"></textarea></TD>
    </TR>
  <br>
  <TR>
    <TD VALIGN="TOP">Fremgangs måde</TD>
    <TD><textarea name="hvordan" rows="6" cols="37"></textarea></TD>
    </TR>
    <TR>
    <TD VALIGN="TOP"><br>
      Evt. kommentar</TD>
    <TD><textarea rows="6" name="kommentar" cols="37"></textarea></TD>
    </TR>
    <TR>
    <TD>
    <input type="hidden" name="REMOTE_ADDR">
    <input type="hidden" name="now">
    <input type="hidden" name="date">
    </TD>
    <TD><input type="submit" value="Gem">&nbsp;<input type="reset" value="Slet Alt"></TD>
    </TR>
    <table>
    </form>
   
<%
ELSE

    SQL3 = "SELECT COUNT(*) AS antal FROM drinks WHERE drinknavn = '" & Request.Form("drinknavn") & "'"
    set rs3 = conn.execute(SQL3)
   
    IF rs3("antal") = 0 THEN
   
        strSQL = "INSERT INTO DRINKS ("
   
        strSQL = strSQL & "tid, "
        strSQL = strSQL & "ip, "
        strSQL = strSQL & "dato, "
        strSQL = strSQL & "indskrivnavn, "
        strSQL = strSQL & "dinknavn, "
        strSQL = strSQL & "glas, "
        strSQL = strSQL & "ingredienser, "
        strSQL = strSQL & "hvordan, "
        strSQL = strSQL & "kommentar, "
        strSQL = strSQL & "drinkstype, "
        strSQL = strSQL & "antal) "
       
       
        strSQL = strSQL & "values( "
       
        strSQL = strSQL & "'" & now & "', "
        strSQL = strSQL & "'" & Request.ServerVariables("REMOTE_ADDR") & "', "
        strSQL = strSQL & "'" & Date & "', "
        strSQL = strSQL & "'" & Request.Form("indskrivnavn") & "', "
        strSQL = strSQL & "'" & Request.Form("drinknavn") & "', "
        strSQL = strSQL & "'" & Request.Form("glas") & "', "
        strSQL = strSQL & "'" & Request.Form("ingredienser") & "', "
        strSQL = strSQL & "'" & Request.Form("hvordan") & "', "
        strSQL = strSQL & "'" & Request.Form("kommentar") & "', "
        strSQL = strSQL & "'" & Request.Form("drinkstype") & "',"
        strSQL = strSQL & "'" & Request.Form("antal") & "')"
       
    ELSE
   
        Response.write "fejl"
           
        Conn.Execute(strSQL)
       
        rs.Close
        set rs = Nothing
        Conn.Close
        Set Conn = Nothing
    END IF
END IF
%>

</div>
</body>
</html>

Der er to linier der specielt undrer mig:

Som aho_mnetier sagde IF action = "" THEN ... og
sql streng nr 2
SQL2 = "Select * From drinkstype Order by drinkstype" .. skal der ikke stå:
SQL2 = "Select * From drinks Order by drinkstype" ??? Jeg kigger lige videre på det. Men prøv at indsætte mit nye forslag i din fil.
Avatar billede kotelet Nybegynder
14. juli 2002 - 15:00 #3
Jeg tror jeg har fundet løsningen til dig:

DU skriver IF action="" THEN ...

action som du skriver det, er en variabel. Den vil ALTID være lig med "" når den står øverst i ASP dokumentet.

Derfor ser du ALTID kun den øverste del af dokumentet udskrevet. Den indeholder jo ikke noget særlig ASP programmering og DERFOR kommer der ingen fejlmelding. Det eneste din side gør, er at vise nogle udtræk fra databasen...

Her er den nye kode som du skal bruge, den burde virke:

<%
IF request.form("formnummer1") = "" THEN
    response.write "drinks"

    Set Conn = Server.CreateObject("ADODB.Connection")
    DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
    DSN = DSN & "DBQ=" & Server.MapPath("../database/database.mdb")
    Conn.Open DSN
    %>
    <form action="indskriv.asp?action=save" method="post">
    <TABLE BORDER="0">
    <TR>
    <TD>Dit navn</TD>
    <TD><input type="text" value="ukendt" name="indskrivnavn" size="49"></TD>
    </TR>
   
    <TR>
    <TD><br>
      Cocktail navn</TD>
    <TD><input type="text" value="" name="drinknavn" size="49"></TD></TR>
    <%
    SQL2 = "Select * From drinkstype Order by drinkstype"
    Set rs2 = conn.execute(SQL2)
    %>
    <TR>
    <TD><br>
      Drinkstype type</TD>
    <TD><select name="drinkstype">
    <%
   
    DO while not rs2.eof
        strdrinkstype = rs2("drinkstype")
        %>
       
        <option value="<% =strdrinkstype %>"><% =strdrinkstype %></option>
       
        <%
        rs2.movenext
    LOOP
    %>
    </select>
    </TD></TR>
    <TR>
    <TD><br>
      Antal glas</TD>
    <TD><input type="text" value="1" name="antal" size="49"></TD>
    </TR>
  <br>
  <TR>
    <TD VALIGN="TOP">Ingredienser</TD>
    <TD><textarea rows="6" name="ingredienser" cols="37"></textarea></TD>
    </TR>
  <br>
  <TR>
    <TD VALIGN="TOP">Fremgangs måde</TD>
    <TD><textarea name="hvordan" rows="6" cols="37"></textarea></TD>
    </TR>
    <TR>
    <TD VALIGN="TOP"><br>
      Evt. kommentar</TD>
    <TD><textarea rows="6" name="kommentar" cols="37"></textarea></TD>
    </TR>
    <TR>
    <TD>
    <input type="hidden" name="REMOTE_ADDR">
    <input type="hidden" name="now">
    <input type="hidden" name="date">
    </TD>
    <TD><input type="submit" name="formnummer1" value="Gem">&nbsp;<input type="reset" value="Slet Alt"></TD>
    </TR>
    <table>
    </form>
   
<%
ELSE

    SQL3 = "SELECT COUNT(*) AS antal FROM drinks WHERE drinknavn = '" & Request.Form("drinknavn") & "'"
    set rs3 = conn.execute(SQL3)
   
    IF rs3("antal") = 0 THEN
   
        strSQL = "INSERT INTO DRINKS ("
   
        strSQL = strSQL & "tid, "
        strSQL = strSQL & "ip, "
        strSQL = strSQL & "dato, "
        strSQL = strSQL & "indskrivnavn, "
        strSQL = strSQL & "dinknavn, "
        strSQL = strSQL & "glas, "
        strSQL = strSQL & "ingredienser, "
        strSQL = strSQL & "hvordan, "
        strSQL = strSQL & "kommentar, "
        strSQL = strSQL & "drinkstype, "
        strSQL = strSQL & "antal) "
       
       
        strSQL = strSQL & "values( "
       
        strSQL = strSQL & "'" & now & "', "
        strSQL = strSQL & "'" & Request.ServerVariables("REMOTE_ADDR") & "', "
        strSQL = strSQL & "'" & Date & "', "
        strSQL = strSQL & "'" & Request.Form("indskrivnavn") & "', "
        strSQL = strSQL & "'" & Request.Form("drinknavn") & "', "
        strSQL = strSQL & "'" & Request.Form("glas") & "', "
        strSQL = strSQL & "'" & Request.Form("ingredienser") & "', "
        strSQL = strSQL & "'" & Request.Form("hvordan") & "', "
        strSQL = strSQL & "'" & Request.Form("kommentar") & "', "
        strSQL = strSQL & "'" & Request.Form("drinkstype") & "',"
        strSQL = strSQL & "'" & Request.Form("antal") & "')"
       
    ELSE
   
        Response.write "fejl, drinken findes allerede!"
           
        Conn.Execute(strSQL)
       
        rs.Close
        set rs = Nothing
        Conn.Close
        Set Conn = Nothing
    END IF
END IF
%></div>

</body>
</html>
Avatar billede vipdk Nybegynder
14. juli 2002 - 15:20 #4
Kotelet > jeg har prøvet at gøre som du skriv, kigget på koden osv .. men når jeg sætter den ind og køre den får jeg følgende fejl:
Fejltype:
Der opstod en Microsoft VBScript-kørselsfejl (0x800A01A8)
Et objekt er obligatorisk: 'Conn'
/www/indskriv.asp, line 78
og linie 78 er
    set rs3 = conn.execute(SQL3)
/vipdk
Avatar billede kotelet Nybegynder
14. juli 2002 - 21:27 #5
Fandt du ud af det?
Avatar billede vipdk Nybegynder
20. juli 2002 - 20:02 #6
nej :O(
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