22. februar 2005 - 14:58Der er
56 kommentarer og 1 løsning
access til htm
Hej Mit spørgsmål er hvordan man laver en side hvor man kan skrive data ind og så gemmer den det i en database. Helt konkret så skal jeg vælge et varenummer fra en dropdown menu, udfylde ting om den(f.eks beskrivelse) og trykke på gem og så gemmer den i databasen. Helst i asp og jeg vil gerne se/have eksempler.
Her er en af mine koder. Jeg har fjernet en del, så der kan evt være fejl, men det skulle der helst ikke være. Der mangler bare en connection-string til databasen og et tabelnavn:
<% dim uId, uName, sType, scriptname, conn
uId = Request.form("ID") mode = Request.QueryString("mode") scriptname = Request.ServerVariables("SCRIPT_NAME") Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "conection til databasen..."
if mode = "save" then if uID <> "" then conn.execute("update enTable set name='"& Request.Form("name") &"' where id="& uID) else conn.execute("insert into enTable(name) values('"& Request.Form("name") &"')") end if response.redirect(scriptname) response.end elseif mode = "del" then if uID <> "" then conn.execute("delete from enTable where id="& uID) end if response.redirect(scriptname) response.end end if %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html> <head> <title>Title</title> </head>
<body style="padding:5,5,5,5;"> <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript"> <!-- function send(mode) { if(mode=="") { this.location.href = "<%= scriptname %>"; } else { document.form.action = "<%= scriptname %>?mode="+mode; document.form.submit(); } } //--> </SCRIPT> <form name="form" method="post"> <% if mode = "new" or mode = "edit" then if mode = "edit" then set oRs = Conn.execute("select * from enTable where id="& uID) if not oRs.eof then uName = oRs("name") end if else uID = "" end if %> <input type="Hidden" name="ID" value="<%= uID %>"> <table> <tr> <td>Produkter:</td> <td><input type="Text" name="name" onkeydown="if(window.event.keyCode==13) send('save');" value="<%= uName %>"></td> </tr> <tr> <td colspan="2"> <input type="Button" value="Gem" onclick="send('save')"> <input type="Button" value="Anuller" onclick="send('')"> </td> </tr> </table>
<% else %> <table border="0" width="100%" cellpadding="0" cellspacing="4"> <tr> <td width="50">Produkter:</td> <td> <select name="ID"> <% set oRs = Conn.Execute("select * from enTable order by name") do while not oRs.eof %> <option value="<%= oRs("id") %>"><%= oRs("name") %> <% oRs.MoveNext loop %> </select> </td> </tr> <tr> <td colspan="2"> <input type="Button" value="Ny" onclick="send('new')"> <input type="Button" value="Ret" onclick="send('edit')"> <input type="Button" value="Slet" onclick="send('del')"> </td> </tr> </table> <% End If %> </form> </body> </html>
Tak. Må hellere sige at jeg ikke kan særligt meget asp. Hvis du lige vil fortælle hvor jeg skal sætte databasen ind, evt. linienr. Jeg får nemlig bare en fejlmeddelse.
skal ændres. Hvis du bruger Access er det noget i denne stil: Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("DinDatabase.mdb;")
Og alle "enTabel" skal ændres til tabelnavnet i databasen. Dette eks gør kun brug af 2 felter på tabellen id (autonummer) og name (tekst)
tak. Nu har jeg fået den til at skrive i et felt. Men jeg kan ikke få den til at gør det i flere felter. jeg forestiller mig at det er ca sådan her Varenummer (vælges fra dropdownmenu fra databasen) ansvarlig (skrives) beskrivelse (skrives) måske flere felter Gem ( felterne gemmes i databasen)
Hvis du har flere felter skal de bare på indsættelsen. Her har jeg også lavet et sikkerheds tjek på tekstfelterne, da ' tegnet skal erstattes med to, da der ellers sker en fejl (der bliver kun indsat en ').
name = replace(Request.Form("name"),"'","''") add = replace(Request.Form("add"),"'","''") zip = Request.Form("zip") city = replace(Request.Form("city"),"'","''") dato = Request.Form("dato") if uID <> "" then conn.execute("update enTable set name='"& name &"', address='"& add &"', zip="& zip &", city='"& city &"', dato=#"& dato &"# where id="& uID) else conn.execute("insert into enTable(name, address, zip, city, dato) values('"& name &"','"& add &"',"& zip &",'"& city &"',#"& dato &"#)") end if
Læg også mærke til at tal ikke har ' omkring sig og datoer her # omkring (det er kun access der bruger # til datoer, alle andre bruger '). Datoen skal desuden også være på et bestemt format. Access bruger mm-dd-yyyy og yyyy-mm-dd formaterne. Jeg vil anbefale at bruge yyyy-mm-dd formatet da det virker i de fleste andre databaser også. Indtastnings formatet til datoer er sikkert anderledes, hvilket betyder at du selv skal omformatere datoen når du skal indsætte den.
Det første du skal have gjort er selvfølgelig at have udvidet formen, så der er flere indtastnings felter. Så skal du have udvidet databasen med tilsvarende felter, og tilsidst udvides de to indsættættelses rutiner ("insert.." og "update..")
if uID <> "" then conn.execute("update fejl set name='"& varenummer &"', fejltype='"& fejltype &"' where id="& uID) else conn.execute("insert into fejl(varenummer, fejltype) values('"& varenummer &"','"& fejltype &"')") end if
response.redirect(scriptname) response.end elseif mode = "del" then if uID <> "" then conn.execute("delete from enTable where id="& uID) end if response.redirect(scriptname) response.end end if %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html> <head> <title>Title</title> </head>
<body style="padding:5,5,5,5;"> <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript"> <!-- function send(mode) { if(mode=="") { this.location.href = "<%= scriptname %>"; } else { document.form.action = "<%= scriptname %>?mode="+mode; document.form.submit(); } } //--> </SCRIPT> <form name="form" method="post"> <% if mode = "new" or mode = "edit" then if mode = "edit" then set oRs = Conn.execute("select * from varenummer where id="& uID) if not oRs.eof then uName = oRs("name") end if else uID = "" end if %>
if uID <> "" then conn.execute("update fejl set name='"& varenummer &"', fejltype='"& fejltype &"' where id="& uID) else conn.execute("insert into fejl(varenummer, fejltype) values('"& varenummer &"','"& fejltype &"')") end if
response.redirect(scriptname) response.end elseif mode = "del" then if uID <> "" then conn.execute("delete from enTable where id="& uID) end if response.redirect(scriptname) response.end end if %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html> <head> <title>Title</title> </head>
<body style="padding:5,5,5,5;"> <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript"> <!-- function send(mode) { if(mode=="") { this.location.href = "<%= scriptname %>"; } else { document.form.action = "<%= scriptname %>?mode="+mode; document.form.submit(); } } //--> </SCRIPT> <form name="form" method="post"> <% if mode = "new" or mode = "edit" then if mode = "edit" then set oRs = Conn.execute("select * from varenummer where id="& uID) if not oRs.eof then uName = oRs("name") end if else uID = "" end if %>
får hele tiden denne fejl Tekniske oplysninger (for supportteknikere)
Fejltype: Microsoft JET Database Engine (0x80040E14) Der er en syntaksfejl, fordi der mangler et komma. i forespørgselsudtrykket "id=name, ansvarlig". /install.asp, line 18
Browsertype: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 2.0.40607)
har faktisk 3 varenummer (består kun af varenavn + varenummmer) fejl (består af varenummer, varenavn, fejltype, beskrivelse, antal kasserede, løsning, ansvarlig) fejltype (fejltype) Havde forstillet mig at varenavn + fejltype skulle være opslag i en dropdown og at de andre skulle være felter man kan skrive i.
Klik på knappen Opdater, eller forsøg igen senere.
Åbn cad. hjemmesiden, og søg derefter efter hyperlinks til de ønskede oplysninger. HTTP 500,100 - Intern fejl på serveren - ASP-fejl - Internet Information Services
Fejltype: Microsoft JET Database Engine (0x80040E14) Der er en syntaksfejl, fordi der mangler en operator. i forespørgselsudtrykket "varenummer.varenummer = fejl.varenummer inner join fejltype on fejltype.id = fejl.fejlID". /install.asp, line 65
Browsertype: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 2.0.40607)
Jeg får nu denne Fejltype: Microsoft JET Database Engine (0x80004005) Tabellen "varenummer" er låst med udelt adgang af brugeren "Admin" på maskinen "CAD". /install.asp, line 31
Er fejl.varenummer lig varenummer.varenummer eller varenummer.id?
ps. Undskyld jeg ikke svarede i går, men jeg har ingen mail fået fra E, så jeg har ikke set du var herinde. Det kan derfor godt tage lidt tid inden jeg svarer :(
har fundet løsningen. poster lige koden. varenavn skulle fjernes i den nederste del. <% Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("db1.mdb;") mode = Request.QueryString("mode") scriptname = Request.ServerVariables("SCRIPT_NAME")
if mode = "save" then temp1 = request.form("vareNR") temp2 = request.form("fejlType") temp3 = replace(request.form("describe"),"'","''") temp4 = request.form("amountDumped") temp5 = replace(request.form("solution"),"'","''") temp6 = replace(request.form("responsible"),"'","''") sql = "insert into fejl(varenummer, fejlID, beskrivelse, antal_kasserede, loesning, ansvarlig) "&_ "values("& temp1 &",'"& temp2 &"','"& temp3 &"',"& temp4 &",'"& temp5 &"','"& temp6 &"')" conn.execute(sql) response.redirect(scriptname) end if %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html> <head> <title>Untitled</title> </head>
<body> <form name="myForm" method="post" action="<%= scriptname %>?mode=save"> varenr: <select name="vareNR"> <% set rs = conn.execute("select * from varenummer order by varenavn") do while not rs.eof response.write "<option value='"& rs("varenr") &"'>"& rs("varenavn") rs.MoveNext loop %> </select><br> fejl type: <select name="fejlType"> <% set rs = conn.execute("select * from fejltype order by fejltype") do while not rs.eof response.write "<option value='"& rs("id") &"'>"& rs("fejltype") rs.MoveNext loop %> </select><br> Beskrivelse: <textarea name="describe" cols="40" rows="4"></textarea><br> Antal kasserede: <input type="Text" name="amountDumped" value=""><br> Løsning: <textarea name="solution" cols="40" rows="4"></textarea><br> Ansvarlig: <input type="Text" name="responsible" value=""><br> <input type="Submit" value="Gem"> </form>
<br><br>
<% sql = "select * from ((fejl "&_ "inner join varenummer on varenummer.varenr = fejl.varenummer) "&_ "inner join fejltype on fejltype.id = fejl.fejlID) " set rs = conn.execute(sql) do while not rs.eof response.write rs("varenr")& "<br>"& vbcrlf
har kun et lille problem. I listen over varenumre viser den varenavn, den skulle gerne vise varenumre og den liste over poster der kommer til sidst vil jeg gerne have fjernet
set rs = conn.execute("select * from varenummer order by varenr") do while not rs.eof response.write "<option value='"& rs("varenr") &"'>"& rs("varenr") & rs("varenavn") rs.MoveNext loop
set rs = conn.execute("select * from varenummer order by varenr") do while not rs.eof response.write "<option value='"& rs("varenr") &"'>"& rs("varenr") & rs("varenavn") rs.MoveNext loop
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.