ta bort gamla inlägg

ASP

15 svar · 340 visningar · startad av berntg

Medlem sedan feb. 200187 inlägg
Trådstart#1

Jag håller på att göra en dagbok till min klass på hemsidan.
Hur skriver jag för att samtidigt som jag visar poster så tas inlägg som är mer än ex 6 mån gamla bort. Går det?

Medlem sedan dec. 200012 464 inlägg
#2

Jo

connect.execute "delete from guestbook where datediff('m',guestDate,now()) > 6",,128

Ovanstående fungerar för Access. Hur datum och tid hanteras skiljer sig mellan olika sqldialekter.

Medlem sedan feb. 200187 inlägg
#3

Varför skriver man 128. Vad innebär det?

Medlem sedan juni 200032 967 inlägg
#4

Det betyder att inget recordset skall returneras. Konstanten kallas adExecuteNoRecords om jag inte minns fel.

Mvh,

Medlem sedan maj 20002 597 inlägg
#5

såhär hag jag.. e det illa?

<% If Request.QueryString("menu") = "deladmin" Then

	Set RSConn = Server.CreateObject("ADODB.Recordset")

	SQL = "SELECT * FROM t_Administrators Where f_ID=" & Request.QueryString("id")

	RSConn.Open SQL, Connect, 1, 2

	RSConn.Delete
	
	RSConn.Close

altså.. bara för att ta bort en post.. inte nåt med datum å sånt.. vill bara veta om koden verkar bra?

Medlem sedan dec. 200012 464 inlägg
#6

Nja det är inte det mest effektiva, hantering av recordset innebär en hel del databasanrop som är helt onödiga i ditt fall.

<% If Request.QueryString("menu") = "deladmin" Then

SQL = "delete FROM t_Administrators Where f_ID=" & Request.QueryString("id")

connect.execute sql,,128
Medlem sedan maj 20002 597 inlägg
#7

Mina kunskaper e dåliga :(
Denna kod har jag för att lägga till en admin.

	Set RSConn = Server.CreateObject("ADODB.Recordset")

	SQL = "SELECT * FROM t_Administrators"

	RSConn.Open SQL, Connect, 1, 2

	RSConn.Addnew
	RSConn("f_User") = Request.Form("txtUser")
	RSConn("f_Password") = Request.Form("txtPassword")
	If Request.Form("txtAdmin") = "on" Then
	RSConn("f_Admin") = "1"
	End if
	RSConn.Update

	RSConn.Close

Hmm.. antar att denna kod e lika illa eller?

Medlem sedan juni 200032 967 inlägg
#8

Ungefär. :)

Den borde se ut så här i stället:

if Request.Form("txtAdmin") = "on" then
strSQL = "INSERT INTO t_Administrators (f_User, f_Password, f_admin) VALUES ('" & Request.Form("txtUser") & "', '" & Request.Form("txtPassword") & "', 1)"
Else
strSQL = "INSERT INTO t_Administrators (f_User, f_Password) VALUES ('" & Request.Form("txtUser") & "', '" & Request.Form("txtPassword") & "')"
End if

Connect.Execute strSQL,,128

Mvh,

Medlem sedan dec. 200012 464 inlägg
#9

Ja det är lika mycket overhead, dock så blir koden lite mer komplicerad om man använder SQL

txtUser = replace(request.form("txtUser"),"'","''") 
txtPwd = replace(request.form("password"),"'","''") 

SQL = "insert into t_Administrators(f_users,f_password,txt_admin) values('"
sql = sql & txtUser & "','" & txtPwd &"'," 
If Request.Form("txtAdmin") = "on" Then
 sql = sql & "1)"
else
sql = sql & "null)"
End if
connect.execute sql,,128
Medlem sedan maj 20002 597 inlägg
#10

Tycker ändå min kod e mycket lättare att läsa och lättare att modifiera.. vad e skillnaden.. Kräver min kod mer arbete eller?

Medlem sedan dec. 200012 464 inlägg
#11

Kräver min kod mer arbete eller?

Jo, din kod innebär att gå över ån efter vatten. För att kunna skapa recordsetet måste ADO fråga databasen hur tabellen är definierad vilket man slipper om man gör en insert direkt. Jaan gjorde en jämförelse av hur mycket anrop det blir från ADO till ODBC (tabell med 4 kolumer)

Med recordset 45 anrop till ODBC
Med insert 3 anrop till ODBC

Den första siffran är propertionell mot antalet kolumner i databasen.

Om man vill slippa att hantera speciella tecken i strängar så är ett alternativ att använda ett kommandoobjekt och dynamiska parametrar i sql-strängen. Det är också fördelaktigt om man vill göra flera insert i samma tabell då man undviker omkompilering av sql-satsen. (I alla fall gäller det de flesta dbms.)

Medlem sedan maj 20002 597 inlägg
#12

Då e mina koder fel som bara dänn.

Så här brukarjag skriva när jag infogar från en databas..

<%
	Set RSConn = Server.CreateObject("ADODB.Recordset")

	SQL = "SELECT * FROM t_Administrators, t_News Where t_News.f_By = t_Administrators.f_ID Order By t_News.f_ID DESC"

	RSConn.Open SQL, Connect, 1, 2

	Do Until RSConn.EOF
%>

.. massa html..

<%= RSConn("f_Text") %>

.. massa html..

<%
RSConn.MoveNext	
Loop
RSConn.Close
Connect.Close
%>

då gör jag ju felet igen med ett anrop till ODBC..
Hur ska detta vara.. får det inte å funka :/

Medlem sedan dec. 200012 464 inlägg
#13

Om du hämtar data så måste du alltid använda ett recordset.
Det som kan snabba upp saker och ting ordentligt är att använda en metod som heter getrows, vilket innebär att man hämtar allt data i ett anrop.

Om du gör en sökning på getrows i detta forum så finns det en hel del exempel på hur den används.

Medlem sedan maj 20002 597 inlägg
#14

ok.. tack för hjälpen

Medlem sedan juli 2000534 inlägg
#15

Om man vill slippa att hantera speciella tecken i strängar så är ett alternativ att använda ett kommandoobjekt och dynamiska parametrar i sql-strängen. Det är också fördelaktigt om man vill göra flera insert i samma tabell då man undviker omkompilering av sql-satsen.

Det där lät intressant. Lust att beskriva lite närmare?

Medlem sedan dec. 200012 464 inlägg
#16

http://cgi.webforum.nu/wf/Forum11/HTML/007069.html

Sista inlägget i den tråden innehåller ett exempel.

266 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)