webForumDet fria alternativet

Enkla (??) Databasfrågor

Databaser & SQL

29 svar · 610 visningar · startad av Coccozz

Medlem sedan apr. 20032 072 inlägg
Frågan#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

Medlem sedan mars 20034 471 inlägg
#2

Verkar vara frågor för SQL-forumet tycker jag...

Medlem sedan aug. 2002733 inlägg
#3

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.

Medlem sedan juni 200032 967 inlägg
#4

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

Medlem sedan apr. 20032 072 inlägg
#5

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...

Medlem sedan juni 200032 967 inlägg
#6

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
Medlem sedan apr. 20032 072 inlägg
#7

Inte helt rätt detta heller @nders. Det kommer finns alltid en post i databasen, jag vill bara ha uppdate ;)

Medlem sedan juni 200032 967 inlägg
#8

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. ;)

Medlem sedan apr. 20032 072 inlägg
#9

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 ;)

Medlem sedan juni 200032 967 inlägg
#10

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

Medlem sedan apr. 20032 072 inlägg
#11

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//

Medlem sedan aug. 2002733 inlägg
#12

@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"))
Medlem sedan apr. 20032 072 inlägg
#13

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

Medlem sedan jan. 20032 285 inlägg
#14
<%
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.

Medlem sedan dec. 200012 464 inlägg
#15

Använd inte text som kolumnnamn då det är ett reserverat ord i Jet SQL.

Medlem sedan apr. 20032 072 inlägg
#16

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å ;)

Medlem sedan jan. 20032 285 inlägg
#17

Det felmeddelandet borde bero på det LarsG säger, att text är ett reserverat ord. :)

Medlem sedan apr. 20032 072 inlägg
#18

Tack underbara vänner på wF ;)

Medlem sedan apr. 20032 072 inlägg
#19

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å?

Medlem sedan dec. 200012 464 inlägg
#20

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
261 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)