webForumDet fria alternativet

Enkla (??) Databasfrågor

29 svar · 610 visningar · startad av Coccozz

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

aasahMedlem sedan mars 20034 471 inlägg
#2

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

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

@ndersMedlem sedan juni 200032 969 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

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

@ndersMedlem sedan juni 200032 969 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
CoccozzMedlem 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 ;)

@ndersMedlem sedan juni 200032 969 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. ;)

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

@ndersMedlem sedan juni 200032 969 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

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

aspMedlem 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"))
CoccozzMedlem 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

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

LarsGMedlem sedan dec. 200012 464 inlägg
#15

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

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

SebbeMedlem sedan jan. 20032 285 inlägg
#17

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

CoccozzMedlem sedan apr. 20032 072 inlägg
#18

Tack underbara vänner på wF ;)

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

LarsGMedlem 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
134 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)