01. februar 2005 - 19:32Der er
65 kommentarer og 1 løsning
fra .addnew til alm. add til database
Hey guys..
Jeg har et alm. skrive til database system og vis på en anden side,, men mit script skal kodes om,, så det ikke er .addnew men derimod kun er et felt i min database,, og ikke kommer et nyt helt tiden med ".addnew" (Håber i forstår mig).
skriv til db siden:
<% mode=request("menu") if mode="add" then %> <%
Const adOpenKeyset = 1 Const adLockOptimistic = 3
Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../../db/xxx.mdb") & ";UID=admin;PWD=;" Set rs = Server.CreateObject("ADODB.RecordSet") strSQL = "Select * From video" rs.Open strSQL, Conn, adOpenKeyset, adLockOptimistic
Så skal du havde rette din SQL sætning så den kun henter den post som skal opdateres og ikke alle poster som den har nu: strSQL = "Select * From video"
Så den kommer til at se eksempelvis sådan her ud: strSQL = "Select * From video where id = " & request("id")
Typsik har man en autonummer kolonne som hedder ID som man kan bruge til at vælge den post som skal opdateres. ID skal så overføres via form'en hvor du retter i data.
Når du så retter i de data der skal opdateres henter du dem ud fra databasen, det er samme ID som du skal bruge når du skal opdatere posten. Typsik har man en form hvor man kan rette i forskellige felter og så laver man et hidden felt som indeholder ID'et på den post man retter i så siden som gemmer også modtager id'et:
elseif mode="tilfoj" then %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Index Admin</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head>
Du skal havde en form hvor man kan rette data i stil med den som er i "tilfoj". Man kan havde en liste over alle poster og når man trykke på et link åbner den form'en hvor man kan rette posten, er det sådan noget du søger?
Det muligt jeg har misforstået spørgsmålet, prøv at forklare hvad du ønsker.
Det jeg mangler din hjælp til,, er at rette min kode til så den virker.
Det jeg skal bruge koden til, er at "top", er et sted på min index.asp side, hvor der skal vises tekst og det samme med "bund", dog skal den vises lidt længere nede på siden.. Men summasumarum, er at man skal kunne se top og bund via dben på index.asp, også skal man kunne rediger i det.
strSQL = "Select * From video where id = " & request("id")
Set rs = conn.Execute(strSQL)
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Untitled Document</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head>
<body> <br> <br> <% if rs.EOF then %> Der blev ikke fundet en post <% else %> <form action="index-admin.asp?mode=opdater" method="post"> <input type="hidden" name="id" value="<%=rs("id")%>"> <textarea name="top"><%=rs("top")%></textarea> <br> <br> <textarea name="bund"><%=rs("bund")%></textarea> <br> <input type="submit" name="gem" value="gem"> </form> <% end if %> </body> </html> <% conn.Close Set conn = nothing %>
den skriver fejl: Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key 'Temporary (volatile) Jet DSN for process 0x5dc Thread 0x6c0 DBC 0x23da014 Jet'.
Ok det fordi den ikke kan finde filen xxx.mdb i den angivne folder. Så skrive det rigtige filnavn på database filen og tjek stien ../.. er rigtigt i forhold til hvor .asp filen ligger.
Det kan nogle gange være en fordel at angive stien fra root så man ikke går forkert med ../..: server.MapPath("/folder1/folder2/db/xxx.mdb")
Så det fordi der ikke er et id i linket: index.asp?id=XXX
Eller så skal koden laves lidt om sådan her, så skulle fejlen ikke komme hvis id'et magler. Så prøv dette kode og husk at rette det med stien til database :)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Untitled Document</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head>
<body> <br> <br> <% if request("id") = "" then %> Der mangler et id.
http://macpack.dk/system/index.asp?=1 godt være det lyder lidt dumt,, men hvor finder jeg det id jeg skal bruge? "top" står øverst i databasen, så det er id 1?
jeg har ihvertfald prøvet med id?=1 men så skriver den:
Der mangler et id. Microsoft VBScript runtime error '800a01a8'
Set rs = conn.Execute(strSQL) do while not rs.EOF response.write "<a href=""index.asp?id=" & rs("id") & """>Ret post med id : " & rs("id") & "<a> <br>" rs.Movenext loop %>
Det ser ud som om id kolonnen ikke er at tal men en tekst kolonne er det rigtigt?
Const definere en konstant (variable man ikke kan rette i) til det man skriver, så: Const adOpenKeyset = 1 Giver en konstant som hedder adOpenKeyset og compileren finder så væriden og sætter tallet ind i stedet for. Det er til programmøren så man ikke behover et tons variable og samtidig kan skriver tal som noget læseligt.
A = 20 vs. A = ANTAL_HUSE_PAA_VEJEN
Fordelen er at man kan bruge konstanten flere gange og kun rette et sted i koden hvis tallet skulle ændre sig :)
Så har du en autonummer kolonne? Hvis du har kan du skifte kolonnenavnet id ud med nanvet på kolonnen. Du kan tilføje en autonummer kolonne hvis du ikke har en.
Så prøv at slette dem eller flytte dem så det blvier:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Index</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head>
<body> <br> <br> <% if request("id") = "" then %> <% Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("../../db/xxx.mdb")
strSQL = "Select * From video"
Set rs = conn.Execute(strSQL) do while not rs.EOF response.write "<a href=""index.asp?id=" & rs("top") & """>Ret post med id : " & rs("bund") & "<a> <br>" rs.Movenext loop %>
<% else Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("../../db/xxx.mdb") strSQL = "Select * From video where id = '" & request("id") & "'"
Set rs = conn.Execute(strSQL)
if rs.EOF then %> Posten kunne ikke findes.
<% else %> <form action="index-admin.asp?mode=opdater" method="post"> <input type="hidden" name="id" value="<%=rs("id")%>"> <textarea name="top"><%=rs("top")%></textarea> <br> <br> <textarea name="bund"><%=rs("bund")%></textarea> <br> <input type="submit" name="gem" value="gem"> </form> <% end if conn.Close Set conn = nothing %> <% end if %> </body> </html>´
elseif mode="tilfoj" then %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Index Admin</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head>
yes det hjalp med at slette dem.. Der står nu tester og hej, men når du føre musen hen over f.eks. tester, så viser infoen fra "top" feltet fra dben i status linjen..
Ja det pga. denne linie som udskriver linket, det som overføres som ID'et kommer fra top kolonnen og det som står som linket kommer fra bund kolonnen:
response.write "<a href=""index.asp?id=" & rs("top") & """>Ret post med id : " & rs("bund") & "<a> <br>"
Skal det være top eller bund som overføres?
Du kan rette så det er bund begge steder: response.write "<a href=""index.asp?id=" & rs("bund") & """>Ret post med id : " & rs("bund") & "<a> <br>"
men husk på at så skal du rette i de to SQL sætninger så de henter fra bund kolonnen og ikke top kolonne samt hidden feltet så den indsætter fra bun kolonnen.
set rs = server.createobject("ADODB.Recordset") sql = "select * from indhold where side=1;"
rs.open sql, conn
while not rs.eof indhold = rs("top") titel = rs("bund") rs.movenext wend
if mode = "" then
rs.close set rs = nothing conn.close set conn = nothing %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Skriv til vis.asp</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head>
<% dim conn, strconnect, sql, rs, top, bund Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("../../db/cms.mdb")
set rs = server.createobject("ADODB.Recordset") sql = "select * from indhold where side=1;"
rs.open sql, conn
while not rs.eof indhold = rs("top") titel = rs("bund") rs.movenext wend %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Vis side</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head>
<body> <p> <% response.write top %> <br> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p><a href="skriv.asp">tilbage til skriv.asp </a></p> </body> </html> <% rs.close set rs = nothing conn.close set conn = nothing %>
Med det script skal man kunne se og redigere top og bund, så det vises på vis.asp via rs.
Gider du evt. se hvad fejlen/e er i det script,, siden den skriver fejl når man klikker på send på skriv.asp,, også vises der ikke noget på vis.asp
set rs = server.createobject("ADODB.Recordset") sql = "select * from indhold where side=1;"
rs.open sql, conn
while not rs.eof indhold = rs("top") titel = rs("bund") rs.movenext wend
if mode = "" then
rs.close set rs = nothing conn.close set conn = nothing %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Skriv til vis.asp</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head>
<body> <form name='FormName' action='skriv.asp?mode=update' method='post'> Top<br> <textarea name="top" cols="20" rows="7" id="top" ><% =top %> </textarea> <br> Bund<br> <textarea name="bund" cols="20" rows="7" id="bund" ><% =bund %> </textarea> <br> <input type="submit" name="submitButtonName"> </form> <br> <a href="vis.asp">Klik her for at se vis.asp </a> </body> </html> <% elseif mode="update" then top = Trim(Replace(request.form("top"),"'","`" )) top = replace(top, vbCrLF, "<br>") bund = Trim(Replace(request.form("bund"),"'","`" )) bund = replace(bund, vbCrLF, "<br>") SQL2 = "update indhold set [top] ='" & top & "', bund='" & bund & "' where side = 1;" rs = Conn.Execute(SQL2) response.redirect("vis.asp")
har oprette et nyt spam: http://eksperten.dk/spm/588186 da det her sidste script ikke indgik i mit spørgsmål... men du er velkommen til at svare/hjælpe,,, også for du self begge points
Prøv at rette vis.asp til dette der er fejl i et variable navn samt den ikke udskrev bund:
<% dim conn, strconnect, sql, rs, top, bund Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("../../db/cms.mdb")
set rs = server.createobject("ADODB.Recordset") sql = "select * from indhold where side=1;"
rs.open sql, conn
while not rs.eof top = rs("top") bund = rs("bund") rs.movenext wend %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Vis side</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head>
<body> <p> <% response.write top %> <br> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> <% response.write bund %> <br> </p> <p><a href="skriv.asp">tilbage til skriv.asp </a></p> </body> </html> <% rs.close set rs = nothing conn.close set conn = nothing %>
Hvis du vil kunne rette flere forskellgie poster så skal det lave hvor du overføre nummeret på side du vil vise og den side du vil rette, som det det andet kode.
set rs = server.createobject("ADODB.Recordset") sql = "select * from indhold where side=1;"
rs.open sql, conn
while not rs.eof top = rs("top") bund = rs("bund") bund = rs("midt") rs.movenext wend
if mode = "" then
rs.close set rs = nothing conn.close set conn = nothing %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Skriv til vis.asp</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head>
Folderen databasen filen ligger i skal give skrive rettighed til IUSR_masinnavn (Internet Guest Acceount). Det gives via fil systemet i windows og alt efter hvilekn version af windows gøres det lidt forskelligt.
Har du XP skal du først gøre dette for at få adgang til den folder man kan ændre rettighederne: - Åbn denne computer - Klik på menupunktet Funktioner - Mappeindstillinger - Klik på fanen Vis - Fjern flueben i "Brug Enkel Fildelign" så får du adgang til en fane der hedder "sikkerhed", som du skal bruge om lidt.
For NT/2000/XP gøres dette: - Vælg den folder databasen ligger i - Højreklik og vælg Properties - Vælg security fanen - Hvis brugeres ikke findes tryk på Add og tilføj IUSR_maskinnavn. - Giv så IUSR_maskinnavn skriverettighed / write
Får du fejlen i forbindelse med et web-htoel skal man flytte databasen til en folder hvor der er skriverettighed. Der er flere web-hoteller som har en bestemt folder med skriverettighed og det er i den man skal ligge sin database. Så prøv at flytte databasen til den folder og husk at rette connection stringen så den passer med den nye sti. Web-hotellet har gerne en support side som forklare det mere eller desværre mindre godt.
Hey eagleeye, håber du er online og kan give et svar asap.. :o)
Kan du svare på hvorfor jeg for denne her fejl: Microsoft VBScript compilation error '800a03ea'
Syntax error
/kontakt_admin.asp, line 175
elseif mode="update" then ^
har kigget og kigget på min kontakt_admin.asp side, men syntes altså alt står som det skal være.
Synes godt om
Ny brugerNybegynder
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.