Hoppa till innehåll

Databaser


Mezox

Rekommendera inlägg

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 av nico
Länk till kommentar
Dela på andra sajter

Skrivet (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 av Mezox
Länk till kommentar
Dela på andra sajter

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 av nico
Länk till kommentar
Dela på andra sajter

Skrivet (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 av Mezox
Länk till kommentar
Dela på andra sajter

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.

Länk till kommentar
Dela på andra sajter

Skrivet (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 av Mezox
Länk till kommentar
Dela på andra sajter

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 av nico
Länk till kommentar
Dela på andra sajter

Skrivet (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 av Mezox
Länk till kommentar
Dela på andra sajter

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 av nico
Länk till kommentar
Dela på andra sajter

Skrivet (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 av Mezox
Länk till kommentar
Dela på andra sajter

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.

Gäst
Svara på det här ämnet...

×   Klistrade in som rich text.   Klistra in som vanlig text istället

  Endast 75 emojis är tillåtet.

×   Din länk har automatiskt inbäddats.   Visa som en länk istället

×   Ditt tidigare innehåll har återställts.   Rensa redigeraren

×   Du kan inte klistra in bilder direkt. Ladda upp eller infoga bilder från URL.

×
  • Skapa ny...