Jag listar först alla tabellnamn i Access och skickar det sedan via querystringen till en sida där jag listar alla inlägg i den tabellen. Men, om man skulle "råka" ändra tabellnamnet i querystringen så får man ju förstås ett fult felmeddelande.. Jag tänkte om det gick att göra ett eget sådant?
Dim category
category = Request.Querystring("nav")
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset")
RecSet.Open "Select * From " & category & " Order By artnr Desc", Connect, 3, 3
If RecSet.EOF OR RecSet.BOF Then
Response.Write("Tomt")
Else
Do Until RecSet.EOF
IF request.querystring("ditt_namn") = "visa all data" THEN
response.write "All data visas här..."
ELSE
response.write "Eget felmeddelande visas här."
END IF
Nej, Riffles.. Det var inte så jag tänkte. Eftersom jag inte kommer veta namnet på alla tabeller som skickas med. Jag vill ha en säkerhet, eller typ eget felmeddelande om nån skulle vara klåfingrig och ändra till en tabell som inte finns..
Edit: Jag söker alltså ungefär nåt som är lika smidigt som RecSet.EOF/.BOF.. Fast i tabellväg..
Jo, jag arbetar på en webbshop där administratören ska kunna lägga till nya kategorier. Varje kategori kommer få sin egen tabell, och då måste ju dessa listas. För att sedan komma till vald kategori så måste det ju bli så här, eller finns det några smidigare sätt? :q
Jag har ändrat lite på koden.. Hur kan den skrivas bättre i övrigt? :)
Exakt så här ser det ut nu:
<%
' QueryStringvärden
Dim strTbl
strTbl = Replace(Request.Querystring("nav"), "'", "''")
' Databassökväg och SQL-sats
objPath = "d4t4b4s3/articles-xtre2xvte9514.mdb"
strSQL = "SELECT * FROM " & strTbl & " ORDER BY artnr DESC"
' Anslut databasen
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(objPath))
Set objRS = Server.CreateObject("ADODB.Recordset")
Set objRS = objConn.Execute(strSQL)
' Om databasen är tom
If objRS.EOF OR objRS.BOF Then
Response.Write("<p />Fel: angiven kategori hittas ej. Inga inlägg kan visas.")
Else
Do Until objRS.EOF
' Moms
If moms = "exkl" Then
price = objRS("price") * 0.75
Else
price = objRS("price")
End If
%>
<table style="width:500px;padding:0px;border:0px;">
<tr>
<td style="width:100px;padding:5px;"><a href="article.asp?nav=<%=strTbl%>&artnr=<%=objRS("artnr")%>"><img src="prodImg/small_<%=objRS("pic1")%>" alt="Produktbild" /></a></td>
<td style="width:300px;padding:5px;"><a href="article.asp?nav=<%=strTbl%>&artnr=<%=objRS("artnr")%>"><%=objRS("name")%></a></td>
<td style="width:100px;padding:5px;"><%=price%>:-</td>
</tr>
</table>
<%
' Fixa nästa post
objRS.MoveNext
Loop
' Koppla från databas
objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
End If
%>
I så fall ska du bygga om på en gång! Samla alla kategorier i en tabell och skicka med en nyckel som identifierar vilka rader ur denna tabell som vill ha.
strNav = Replace(Request.Querystring("nav"), "'", "''")
' Databassökväg och SQL-sats
objPath = "d4t4b4s3/articles-xtre2xvte9514.mdb"
strSQL = "SELECT * FROM kategorier where nav='" & strNav & "' ORDER BY artnr DESC"
Ptja, du har rätt. Det är väl mest rätt egentligen. :) Tyckte databasstrukturen skulle blivit snyggare med tabeller.. Men det är det väl ingen som bryr sig om egentligen.
Tack så mycket! :) I övrigt, finns det någon optimering jag kan göra?
Ptja, du har rätt. Det är väl mest rätt egentligen. :) Tyckte databasstrukturen skulle blivit snyggare med tabeller.. Men det är det väl ingen som bryr sig om egentligen.
Det är just det vi gör. Databasstrukturen hade varit synnerligen "osnygg" med tabellförekomster som en del av datainnehållet.
Gardell skrev:
I övrigt, finns det någon optimering jag kan göra?
Den kod du visat är, förutom det nämnda problemet, helt OK. Du kan dock med gott samvete ta bort raden...
Set objRS = Server.CreateObject("ADODB.Recordset")
...eftersom recordsetet skapas om på raden under. Använder man .Execute behövs inte CreateObject.
Okej. :p Tyckte det skulle varit mer "sorterat" med tabeller. :) Nåja..
Tack så mycket för hjälpen! :bire
Vassego! :bire
För tydlighets skull. Problemen med att ha dynamiska tabeller är många, t.ex.:
Det går inte att söka ut vilka tabeller som finns i databasen, utan att utnyttja krystade s.k schema-sökningar, som inte minst är svåra att flytta om man byter databasmotor.
Man ökar risken för sql injection
Det blir ohanterligt att uppdatera struktur och data. Ponera att du vill lägga till en extra kolumn i kategoritabellen eller uppdatera alla rader med ett visst värde. Inte så smidigt med massor av tabeller.