Mezox Skrivet 16 Mars 2007 Rapport Dela Skrivet 16 Mars 2007 Jag läser en ganska gammal bok om ASP och jag håller på med kapitlet om databaser. Men jag frågar om det finns konstnadsfria allternativ till DSN. Citera Länk till kommentar Dela på andra sajter More sharing options...
nico Skrivet 16 Mars 2007 Rapport Dela Skrivet 16 Mars 2007 (redigerat) DSN ska du radera ut ur ditt ramminne. :) Används inte längre p.g.a. dålig prestanda och dålig säkerhet samt väldigt krångligt att sätta upp om man inte själv äger servern. Så här kan du exempelvis connecta utan någon DSN: <% Set db = Server.CreateObject("ADODB.Connection") db.Provider = "Microsoft.Jet.OLEDB.4.0" db.Open Server.MapPath("databasen.mdb") %> Exempel för en access-databas. Står det något om någon fil som heter adovbs.inc så kan du hoppa över det stycket också. Redigerat 16 Mars 2007 av nico Citera Länk till kommentar Dela på andra sajter More sharing options...
Mezox Skrivet 17 Mars 2007 Författare Rapport Dela Skrivet 17 Mars 2007 (redigerat) Tack, men nu är det är så att boken använder en äldre version av Acces. Jag använder 2007 och jag vill veta om det finns ett sätt att byta layouten till "klassiskt läge" eller något. Okej glöm det jag sa innan, boken är gammal jag kan inte följa det. Jag vill veta koderna man behöver för att få Databasen att funka vilket jag verkar ha stora svårigheter med. Och förresten, vad är "rs"? Kan ni inte hjälpa mig att ansluta till en databas med asp? Jag behöver det verkligen... Redigerat 17 Mars 2007 av Mezox Citera Länk till kommentar Dela på andra sajter More sharing options...
nico Skrivet 17 Mars 2007 Rapport Dela Skrivet 17 Mars 2007 (redigerat) Nej, det finns inget klassiskt läge i Access 2007. Rs är en förkortning för objektet Recordset som bland annat innehåller de poster som du har hämtat ut från databasen. Men vi tar ett välkommenterat exempel istället för att gå in på saken närmare. <% 'Skapar ett ojekt som heter db som används för att ansluta till databasen. Set db = Server.CreateObject("ADODB.Connection") 'Talar om för databasen att det är en Accesdatabas db.Provider = "Microsoft.Jet.OLEDB.4.0" 'Öppnar databasen test.mdb db.Open Server.MapPath("test.mdb") 'Skapar ett objekt som heter rs som används för att hämta ut info från vår kära databas. Set rs = Server.CreateObject("ADODB.Recordset") 'Här kommer en sk. Sql-query (Sql-fråga) som används för att bestämma vad man vill hämta ut. I det här fallet all info som finns i tabellen Testtabell, sorterat på ID-nummer. sql = "SELECT * FROM Testtabell ORDER BY ID" 'Säger åt scriptet att köra frågan mot databasen och se vad den hittar rs.Open sql, db 'Skapar en loop som går igenom varje post i databasen och gör någonting för varje post. När rs.Eof = True har man skrivit ut alla poster som finns och då ska den sluta skriva ut någonting. Do Until rs.EOF = True 'Skriver ut data från kolumnen ID och från kolumnen Testnamn i en mening Response.Write "Nummer "&rs("ID")&" heter "&rs("Testnamn")&".<br>" 'Gå till nästa post i databasen rs.MoveNext 'Här tar loopen slut... Loop %> Reslutatet borde bli något som; Nummer 1 heter Arne Svensson. Nummer 2 heter Sven-Bertil Tallbarrsson. Nummer 3 heter Kerstin Übersturmer. Kanske lite knöligt att förstå men du får fråga igen annars. Ska lägga in ett avsnitt om databaser i min Asp skola vid ett senare tillfälle. Redigerat 17 Mars 2007 av nico Citera Länk till kommentar Dela på andra sajter More sharing options...
Mezox Skrivet 17 Mars 2007 Författare Rapport Dela Skrivet 17 Mars 2007 (redigerat) Tack! ASP sidan skall använda information från tidigare sidor (som är sparade som Session) för att göra en enkel hemsida, koden där uppe (där felet ligger) skall logga IP-adressen av de som använder funktionen i databasen (så det kan användas senare för att förhindra missbruk) men jag får felmeddelandet: ADODB.Recordset- Error '800a0bb9' Parametrarna är felaktiga, ligger utanför tillåtet intervall eller skapar en inbördes konflikt. Koden är: <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%> <% Set db = Server.CreateObject("ADODB.Connection") db.Provider = "Microsoft.Jet.OLEDB.4.0" db.Open Server.MapPath("IP.mdb") Set rs = Server.CreateObject("ADODB.Recordset") %> <HTML> <HEAD><TITLE>Gör din egen webbsida - 5(5)</TITLE></HEAD> <BODY> <% namn = Session("namn") IP = request.ServerVariables("REMOTE_ADDR") Datum = Now [Denna Rad]sq1= "INSERT INTO IP (Namn, IP, Datum) Values (namn, IP, Datum)"[/Denna Rad] rs.Open sql, db path = Server.MapPath("/Mezox") fil = path & "/Hemsida/" & Session("url") Set MittTxtObj = CreateObject("Scripting.FileSystemObject") Set MinFil = MittTxtObj.CreateTextFile(fil,True) MinFil.WriteLine("<HTML><HEAD><TITLE>" & Session("rubrik") & "</TITLE></HEAD>") MinFil.WriteLine("<BODY BGCOLOR =" & Session("bfarg") & " TEXT = "& Session("tfarg") & ">") MinFil.WriteLine("<H1><CENTER>") MinFil.WriteLine(Session("rubrik")) MinFil.WriteLine("</CENTER></H1>") MinFil.WriteLine(Session("text")) MinFil.WriteLine("<HR>") MinFil.WriteLine("<CENTER>Denna sida skapades" & date & " av <A HREF = mailto:"& Session("epost") & ">" & Session("namn") & "</A>") MinFil.WriteLine("</CENTER></BODY></HTML>") MinFil.Close %> <H1>Gör din egen webbsida</H1> <H2>Steg 5(5) - Sidan är skapad</H2> Klicka <A HREF = <%=Session("url")%>>här</A> för att gå till den! </BODY></HTML> Jag markerade raden där felet ska ha uppstått enligt meddelandet med en text där det står "Denna Rad". Redigerat 17 Mars 2007 av Mezox Citera Länk till kommentar Dela på andra sajter More sharing options...
nico Skrivet 17 Mars 2007 Rapport Dela Skrivet 17 Mars 2007 Hehe, har också den där boken :) Du är medveten om att du skapar en variabel som heter sq1 men ansluter till databasen med en som heter sql? Nu borde det visserligen ge fel på raden efter istället men det är hursomhelst fel :P. Citera Länk till kommentar Dela på andra sajter More sharing options...
Mezox Skrivet 18 Mars 2007 Författare Rapport Dela Skrivet 18 Mars 2007 (redigerat) Oj, i Dreamwever är de identiska... Jag fick ett nytt felmeddalende, den säger att jag saknar nödvändiga parametrar på ungefär samma ställe (raden under). Jag misstänker att jag måste ange var i databasen jag skriver men vet inte hur. Jag vill att den ska starta på en ny rad. Jag bläddrade i boken och hittade något nytt (man skapar raden, ändrar värdena och updaterar). Men jag får felmeddelandet, att databasen är "read-only", vad ska jag göra så ASP-sidan ska ha behörighet att ändra databasen? Såhär lyder koden nu: <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%> <% Set db = Server.CreateObject("ADODB.Connection") db.Provider = "Microsoft.Jet.OLEDB.4.0" db.Open Server.MapPath("IP.mdb") Set rs = Server.CreateObject("ADODB.Recordset") %> <HTML> <HEAD><TITLE>Gör din egen webbsida - 5(5)</TITLE></HEAD> <BODY> <% namn = Session("namn") IP = request.ServerVariables("REMOTE_ADDR") Email = Session("epost") sql= "SELECT * From IP WHERE 1=2" rs.Open sql, db, 1, 2 rs.AddNew rs("IP") = IP rs("Namn") = namn rs("Email") = Email rs("Datum") = Now rs.update rs.close path = Server.MapPath("/Mezox") fil = path & "/Hemsida/hemsidorna/" & Session("url") Set MittTxtObj = CreateObject("Scripting.FileSystemObject") Set MinFil = MittTxtObj.CreateTextFile(fil, True) MinFil.WriteLine("<HTML><HEAD><TITLE>" & Session("rubrik") & "</TITLE></HEAD>") MinFil.WriteLine("<BODY BGCOLOR =" & Session("bfarg") & " TEXT = "& Session("tfarg") & ">") MinFil.WriteLine("<H1><CENTER>") MinFil.WriteLine(Session("rubrik")) MinFil.WriteLine("</CENTER></H1>") MinFil.WriteLine(Session("text")) MinFil.WriteLine("<HR>") MinFil.WriteLine("<CENTER>Denna sida skapades" & date & " av <A HREF = mailto:"& Session("epost") & ">" & Session("namn") & "</A>") MinFil.WriteLine("</CENTER></BODY></HTML>") MinFil.Close %> <H1>Gör din egen webbsida</H1> <H2>Steg 5(5) - Sidan är skapad</H2> Klicka <A HREF = <%=Session("url")%>>här</A> för att gå till den! </BODY></HTML> Felmeddelande: Microsoft JET Database Engine error '80040e09' Cannot update. Database or object is read-only. /Mezox/Hemsida/steg5.asp, line 22 Redigerat 18 Mars 2007 av Mezox Citera Länk till kommentar Dela på andra sajter More sharing options...
nico Skrivet 18 Mars 2007 Rapport Dela Skrivet 18 Mars 2007 (redigerat) Hm, nu använder du nån slags specialmetod för att syssla med databasen. Skulle gissa på att det är nån etta som ska vara en tvåa eller något sånnt... bättre att använda Sql, då är man dessutom rätt framtidssäker om man skulle stöta på någon annan slags databas än Access. Kan vara själva databasfilen som är skrivskyddad också. Frågan är bara varför du ska hämta ut saker från databasen om du egentligen vill infoga något i den...? Enklast är ju helt enkelt; Sql="INSERT INTO Testtabell (Falt1,Falt2) VALUES ('Nånting,'Något annat')" db.Execute Sql Redigerat 18 Mars 2007 av nico Citera Länk till kommentar Dela på andra sajter More sharing options...
Mezox Skrivet 18 Mars 2007 Författare Rapport Dela Skrivet 18 Mars 2007 (redigerat) Jag hämtar ut ingenting alltså "allt från inget" Jag "selectar" alla fält där 1 är lika med två, alltså öppnar jag databasen utan att öppna något sen lägger jag till rader och ändrar värdena. Men skulle tro att det är bättre att göra som du. Fortfarande samma felmeddelande, "jag saknar nödvändiga parametrar". Redigerat 18 Mars 2007 av Mezox Citera Länk till kommentar Dela på andra sajter More sharing options...
nico Skrivet 19 Mars 2007 Rapport Dela Skrivet 19 Mars 2007 (redigerat) Om det är ungefär samma script igen så finns det åtminstone ett skäl till att det inte funkar; det finns förmodligen ingen kolumn i databasen som heter 1 som kan vara lika med talet 2. WHERE filtrerar bort de databasposter som inte stämmer med villkoret, men det testar inte om talet 1 = talet 2 utan om någon cell i kolumnen 1 = talet 2. Hänger du med? Redigerat 19 Mars 2007 av nico Citera Länk till kommentar Dela på andra sajter More sharing options...
Mezox Skrivet 20 Mars 2007 Författare Rapport Dela Skrivet 20 Mars 2007 (redigerat) Jag använder följande kod nu: <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%> <% Set db = Server.CreateObject("ADODB.Connection") db.Provider = "Microsoft.Jet.OLEDB.4.0" db.Open Server.MapPath("IP.mdb") Set rs = Server.CreateObject("ADODB.Recordset") %> <HTML> <HEAD><TITLE>Gör din egen webbsida - 5(5)</TITLE></HEAD> <BODY> <% namn = Session("namn") IP = request.ServerVariables("REMOTE_ADDR") email = Session("epost") sql= "INSERT INTO IP (Namn, IP, Email) Values (namn, IP, email)" [Denna Rad]rs.Open sql, db[/Denna rad] path = Server.MapPath("/Mezox") fil = path & "/Hemsida/" & Session("url") Set MittTxtObj = CreateObject("Scripting.FileSystemObject") Set MinFil = MittTxtObj.CreateTextFile(fil,True) MinFil.WriteLine("<HTML><HEAD><TITLE>" & Session("rubrik") & "</TITLE></HEAD>") MinFil.WriteLine("<BODY BGCOLOR =" & Session("bfarg") & " TEXT = "& Session("tfarg") & ">") MinFil.WriteLine("<H1><CENTER>") MinFil.WriteLine(Session("rubrik")) MinFil.WriteLine("</CENTER></H1>") MinFil.WriteLine(Session("text")) MinFil.WriteLine("<HR>") MinFil.WriteLine("<CENTER>Denna sida skapades" & date & " av <A HREF = mailto:"& Session("epost") & ">" & Session("namn") & "</A>") MinFil.WriteLine("</CENTER></BODY></HTML>") MinFil.Close %> <H1>Gör din egen webbsida</H1> <H2>Steg 5(5) - Sidan är skapad</H2> Klicka <A HREF = <%=Session("url")%>>här</A> för att gå till den! </BODY></HTML> Felmeddelande: Microsoft JET Database Engine error '80040e10' No value given for one or more required parameters. /Mezox/Hemsida/steg5.asp, line 18 Redigerat 20 Mars 2007 av Mezox Citera Länk till kommentar Dela på andra sajter More sharing options...
nico Skrivet 20 Mars 2007 Rapport Dela Skrivet 20 Mars 2007 Du får använda db.Execute istället för rs.Open om du vill göra något annat än läsa poster. ;) dvs. db.Execute Sql Citera Länk till kommentar Dela på andra sajter More sharing options...
Rekommendera inlägg
Gå med i konversationen
Du kan skriva nu och registrera dig senare. Om du har ett konto, logga in nu för att posta med ditt konto.