C Coccozz Medlem sedan apr. 2003 2 072 inlägg Frågan 21 juni 2003 08:35 #1 Hur skriver man så att databasen gör en SELECT av bara den senaste posten i databasen?
Sedan undrar jag också hur man kan göra så att man istället för att bara spara mer och mer i en databas, skriver över en post. Det vill säga att när jag postar mitt formulär exempelvis, så vill jag att den nya informationen ersätter den gamla.
Tack på förhand // Coccozz
A aasah Medlem sedan mars 2003 4 471 inlägg Verkar vara frågor för SQL-forumet tycker jag...
A asp Medlem sedan aug. 2002 733 inlägg Hej!
Menar du att du bara vill skriva ut den senaste posten?
SQL = "SELECT * FROM [tabell] ORDER BY datum DESC"
För att skriva över en post får du använda dig av SQL-uttrycket UPDATE.
SQL = "UPDATE [tabell] SET namn = 'Marcus' WHERE namn = 'Andreas'"
Detta uppdaterar alla poster där namn är Andreas till Marcus.
@nders Medlem sedan juni 2000 32 967 inlägg För att hämta endast x antal poster använder man TOP och en ORDER BY som sorterar på ett fält som innehåller så unika värden söm möjligt.
SELECT TOP 1 * FROM tabellen ORDER BY ID DESC
För att uppdatera, kika på UPDATE, som asp skrev.
Mvh
C Coccozz Medlem sedan apr. 2003 2 072 inlägg Men det var inte så jag menade heller asp. Jag vill ha en databas med bara en post, och som jag sedan skriver över varje gång jag skickar in ett formulär. Jag skall använda det till att göra en onlinebaserad adminsida till en vanlig text, vill pröva lite olika saker för tränings skull...
@nders Medlem sedan juni 2000 32 967 inlägg Du får lite halvpseudokod av mig. :)
' först kolla om det finns en post i databasen
strSQL = "SELECT bla bla bla"
' kör sql-fråga
' om recordset är tomt, då [i]måste[/i] vi göra en insert
strSQL = "INSERT INTO bla bla bla"
' annars, uppdatera den befintliga posten
strSQL = "UPDATE bla bla bla"
' färdigt! :e
C Coccozz Medlem sedan apr. 2003 2 072 inlägg Inte helt rätt detta heller @nders. Det kommer finns alltid en post i databasen, jag vill bara ha uppdate ;)
@nders Medlem sedan juni 2000 32 967 inlägg
Coccozz skrev:
Inte helt rätt detta heller @nders. Det kommer finns alltid en post i databasen, jag vill bara ha uppdate ;)
Dåså. Då får du väl kasta bort det mesta av min pseudokod. ;)
C Coccozz Medlem sedan apr. 2003 2 072 inlägg Ok, men hörredu, ja vill inte testa blindt, så snälla, ber på mina bara knän ;)
skriv koden som asp gjorde
SQL = "SELECT * FROM [tabell] ORDER BY datum DESC"
så att jag ser vart jag skall sätt in sakerna...
OCh ok, jag är n00bie ja erkänner ;)
@nders Medlem sedan juni 2000 32 967 inlägg Var det inte en UPDATE du ville ha? ;)
strSQL = "UPDATE tabellen SET fält1 = '" & Request.Form("fält1") & "', fält2 = " & Request.Form("fält2")
Eftersom det bara kommer finnas en post i tabellen behöver vi ingen where-sats i SQL-frågan, men annars brukar man alltid ha det.
I mitt exempel är fältet fält1 av typen text/pm/memo, därav apostrofer runt fältvärdet, och fält2 är av taltyp.
Mvh
C Coccozz Medlem sedan apr. 2003 2 072 inlägg Hehe...jooo, en UPDATE, ja menade att du skulle skriva den på samma sätt som han, vilket du verkade förstå. Tack så jättemycket//
A asp Medlem sedan aug. 2002 733 inlägg @nders: Det går med min kod också.
strSQL = "SELECT * FROM [tabell] ORDER BY datum DESC"
Set objRS = Conn.Execute(strSQL)
Response.Write(objRS("datum"))
C Coccozz Medlem sedan apr. 2003 2 072 inlägg Fler frågor
Har nu satt ihop det hela och den som skall skriva ut pysslet fungerar och skriver bara ut en post.
Men UPDATE fungerar inte...
KODEN är :
<%
If Request.QueryString("do") = "add" Then
Set MinCon = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.RecordSet")
MinCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & Server.MapPath("/databas/default.mdb")
SQL = "UPDATE intro SET rubrik = '" & Request.Form("rubrik") & "', text = '" & Request.Form("text")
rs.Open SQL, MinCon, 1, 2
Response.Redirect("admin.asp")
End If
%>
Och felmeddelandet:
Microsoft JET Database Engine error '80040e14'
Syntax error in UPDATE statement.
/Admin/login/admin.asp, line 180
//Coccozz
S Sebbe Medlem sedan jan. 2003 2 285 inlägg <%
If Request.QueryString("do") = "add" Then
Set MinCon = Server.CreateObject("ADODB.Connection")
MinCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & Server.MapPath("/databas/default.mdb")
SQL = "UPDATE intro SET rubrik = '" & Request.Form("rubrik") & "', text = '" & Request.Form("text") & "'"
MinCon.Execute(SQL)
Response.Redirect("admin.asp")
End If
%>
Det är onödogt att skapa ett recordset när det inte returnerar några poster.
L LarsG Medlem sedan dec. 2000 12 464 inlägg Använd inte text som kolumnnamn då det är ett reserverat ord i Jet SQL.
C Coccozz Medlem sedan apr. 2003 2 072 inlägg Sebbe får då detta felmeddelande istället...
Microsoft JET Database Engine error '80040e14'
Syntax error in UPDATE statement.
/Admin/login/admin.asp, line 178
Line 178 =
MinCon.Execute(SQL)
LarsG Ska ändra kolumnamnet då ;)
S Sebbe Medlem sedan jan. 2003 2 285 inlägg Det felmeddelandet borde bero på det LarsG säger, att text är ett reserverat ord. :)
C Coccozz Medlem sedan apr. 2003 2 072 inlägg Tack underbara vänner på wF ;)
C Coccozz Medlem sedan apr. 2003 2 072 inlägg Förresten, måste fråga en sak till... Hur gör jag en loop, till en sql sats som skall skriva ut de fem nyaste posterna ur en databas.
Det blir väl typ
Loop until
Elr nåt, men hur skall det stå?
L LarsG Medlem sedan dec. 2000 12 464 inlägg Om du använder den SQL-sats med top 5 så
sql = "select top 5 ..."
set rs = connect.execute(sql)
while not rs.eof
response.write ....
rs.movenext
wend