webForumDet fria alternativet

radera från databas ett visst datum

ASPur ASP

29 svar · 758 visningar · startad av jake

Medlem sedan sep. 2001649 inlägg
Frågan#1

hej,
jag har en databas med en kolumn som heter slutdatum
Nu vill jag att varje post ska raderas från databasen dagen efter slutdatum...
vad ska jag då ersätta texten "tomorrow" med i koden nedan?
Måste kolumnen slutdatum vara i någon speciellt format? Vilket?

Vilken kod behövs sedan för att köra funktionen?

<%
'''This function deletes a site the day after slutdatum
Function DeleteSite(varID)

	Set oConnect = Server.CreateObject("ADODB.Connection")
	oConnect.Open strConn
	oConnect.Execute("DELETE FROM " & Request.QueryString("TABELL") & " where slutdatum = " & tomorrow)
	oConnect.Close
	Set oConnect = Nothing

	

End Function
%>
Medlem sedan maj 200125 inlägg
#2

oConnect.Execute("DELETE FROM " & Request.QueryString("TABELL") & " where slutdatum < '" & dateadd("d", -1, date) & "')

/Pelle

Medlem sedan sep. 2001649 inlägg
#3

hej,

jag får ett felmeddelande för den aktuella raden...

Unterminated string constant

vad ska jag sedan använda för kod för att funktionen ska köras en gång per dygn... eller gör den det automatiskt.

Medlem sedan apr. 20031 660 inlägg
#4

HEJ!

Räknar du fnuttarna, som felmeddelandet betyder, kommer du rätt snabbt fram till att det saknas en " innan sista parentesen.

Omdu lägger koden i en sida som besöks varje dag, garanterat, raderas enligt vad du önskar.
Dock görs detta flera gånger, vilket egentligen är onödigt.

Om du tycker detta är ett problem, eller inte snyggt, kan du laborera med Scheduled Tasks, global.asa, cookies etc.

Alla varianter finns med flera gånger på wF.

Medlem sedan sep. 2001649 inlägg
#5

tack, det löste det problemet,
men den verkar ändå inte tycka om min kod :(
när man öppnar sidan där koden ligger får man

Microsoft OLE DB Provider for ODBC Drivers error '80040e21'
ODBC driver does not support the requested properties.

med hänvisning till samma rad :(

Medlem sedan apr. 20031 660 inlägg
#6

HEJ!

Konstigt, du har ju själv skrivit oConnect med tillhörande korrekt kod i funktionen överst på sidan? Då kan ju inget fungera på någon annan sida heller?

Medlem sedan sep. 2001649 inlägg
#7

i alla fall så raderas inte poster även om datumet i kolumnen slutdatum är äldre än dagens datum... (typen på fältet är date)

Medlem sedan apr. 20031 660 inlägg
#8

HEJ!

Nä, hur kunde något kunna raderas om du får ett fel på uttrycket som ska radera?

Skriv ut frågan istället för att exekvera den.
Kontrollera också att det verkligen finns poster som ska raderas.

Förresten, det är ju datum, då ska det vara #" & dateadd("d", -1, date) & "# istället!

Medlem sedan juni 200032 969 inlägg
#9

J.N. skrev:

Förresten, det är ju datum, då ska det vara #" & dateadd("d", -1, date) & "# istället!

Om det gäller Access ja, annars är apostrofer riktigt. Jag tycker dock att det är snyggare (och mer lättläst) att göra det direkt i SQL-frågan (istället för att konkatenera in värden från ASP).

DELETE FROM tabell WHERE slutdatum <= dateadd('d', -1, date())

Varför har du tabellnamnet som variabel i din funktion?

Om din kod nu inte fungerar, visa exakt hur den ser ut, och markera rad eventuellt felmeddelande pekar på.

mvh

Medlem sedan sep. 2001649 inlägg
#10

nu generaras inget felmeddelande men posterna som ska raderas står fortfarande kvar i databasen...

tex finns det poster som i kolumnen slutdatum har värdet 2005-03-15 och de skulle ju då raderas eftersom det idag är 2005-03-17 eller kan det vara så att dateadd har datumen i ett annat format så att de inte känns igen...

Medlem sedan juni 200032 969 inlägg
#11

Släng upp hela koden så kikar vi.

Medlem sedan sep. 2001649 inlägg
#12

hej,
det konstiga är att man kan visa sidan utan att få något felmeddelande, men inga sidor raderas från databasen...


<%
'''This function lists all sites in the database
Function DBListMembers(strFilter)

	Dim oConnect
	Dim oRecSet
	Dim SQLStmt
	Dim Sida
	Dim startID

	Const PerSida = 50
	Sida = 0
	startID = 0

	If Request.QueryString("next") <> "" Then
	   startID = Request.QueryString("next")
	End If

	If startID < 0 Then
	   startID = 0
	End If

	Sida = startID / PerSida
	Sida = int(Sida) -- 1

	If strFilter = "" Then strFilter = "vinsttips_nonapproved"

	Set oRecSet = Server.CreateObject("ADODB.Recordset")
	SQLStmt = "SELECT COUNT(*) as Antal FROM " & strFilter
	oRecSet.Open SQLStmt, strConn, 3, 3
	intAntal = oRecSet("Antal")
	oRecSet.Close

	SQLStmt = "select * from " & strFilter & " order by id desc limit " & startID & "," & PerSida
	oRecSet.Open SQLStmt, strConn, 3, 3

	If oRecSet.EOF = False Then

		Alla = intAntal / PerSida
		Alla = int(Alla) -- 1

		%>
		<br><b>
		Listar <%If strFilter = "vinsttips_nonapproved" Then Response.Write "ej"%> godkända siter.<br>
		Totalt: <%=intAntal%><br><br></b>
	
		<table width="1100" border="0" name="medlemmar">
		<TR>
		    <TH bgcolor="#617288"><font color="#9FC2E1">Edit</font></TH>
		    <TH bgcolor="#617288"><font color="#9FC2E1">ID</font></TH>
		    <TH bgcolor="#617288"><font color="#9FC2E1">Datum</font></TH>
		    <TH bgcolor="#617288"><font color="#9FC2E1">Tid</font></TH>
		        <TH bgcolor="#617288"><font color="#9FC2E1">Slutdatum</font></TH>
		<TH bgcolor="#617288"><font color="#9FC2E1">Arrangor</font></TH>
		    <TH bgcolor="#617288"><font color="#9FC2E1">URL</font></TH>
		    <TH bgcolor="#617288"><font color="#9FC2E1">Uppgift</font></TH>
		  <TH bgcolor="#617288"><font color="#9FC2E1">Direkturl</font></TH>
		 <TH bgcolor="#617288"><font color="#9FC2E1">Vinst</font></TH>

		    <TH bgcolor="#617288"><font color="#9FC2E1">Klick</font></TH>
		    <TH bgcolor="#617288"><font color="#9FC2E1">Edit</font></TH>
		</TR>
		<%
		bgcolor="#7B8CA2"

		Do While oRecSet.EOF = False
		%>

	  	<tr>
		    <td bgcolor="<%=bgcolor%>"><b><a href="#" onClick="LinkoMatic('vt_editsite.asp?ID=<%=oRecSet("id")%>&TABELL=vinsttips_nonapproved');">Edit</a></b></td>
		    <td bgcolor="<%=bgcolor%>"><b><%=oRecSet("id")%></b></td>
		    <td bgcolor="<%=bgcolor%>"><b><%=oRecSet("datum")%></b></td>
		    <td bgcolor="<%=bgcolor%>"><b><%=oRecSet("tid")%></b></td>
		      <td bgcolor="<%=bgcolor%>"><b><%=oRecSet("slutdatum")%></b></td>
		    <td bgcolor="<%=bgcolor%>"><b><%=oRecSet("arrangor")%></b></td>
		        <td bgcolor="<%=bgcolor%>"><b><%=oRecSet("url")%></b></td>
		    <td bgcolor="<%=bgcolor%>"><b><%=oRecSet("uppgift")%></b></td>
		 <td bgcolor="<%=bgcolor%>"><b><a href="<%=oRecSet("direkturl")%>" target="_blank"><%=oRecSet("direkturl")%></a></b></td>

		     <td bgcolor="<%=bgcolor%>"><b><%=oRecSet("vinst")%></b></td>
		    <td bgcolor="<%=bgcolor%>"><b><%=oRecSet("klick")%></b></td>
		    <td bgcolor="<%=bgcolor%>"><b><a href="#" onClick="LinkoMatic('vt_editsite.asp?ID=<%=oRecSet("id")%>&TABELL=<%=Request.QueryString("filter")%>');">Edit</a></b></td>
		  </tr>

		<%
			If bgcolor="#7B8CA2" Then
				bgcolor = "#9AA8B8"
			Else
				bgcolor="#7B8CA2"
			End if
	
			oRecSet.MoveNext
		Loop

		Response.write "</table>"
	
		Response.Write "<center>"
		Response.Write "<br><br>Sida <b>" & Sida & "</b> av <b> " & Alla & "</b><br><br>"
		Response.Write "<a title='Förra sidan' href='default.asp?filter=" & strFilter & "&next=" & startID - PerSida & "'><< &nbsp;&nbsp;</a>---<a title='Nästa sida' href='default.asp?filter=" & strFilter & "&next=" & startID + PerSida & "'>&nbsp;&nbsp; >></a></b>"
		Response.Write "</center>"

	Else  ''(If oRecSet.EOF = False)
		Response.Write "<center>"
		Response.write "<br><br><b>Slut</b><br><br>"
		Response.Write "<a title='Förra sidan' href='default.asp?filter=" & strFilter & "&next=" & startID - PerSida & "'><< &nbsp;&nbsp;</a>---<a title='Från början' href='default.asp?filter=" & strFilter & "'>&nbsp;&nbsp; >></a></b></center>"
		Response.Write "</center>"

	End If ''(If oRecSet.EOF = False)

	oRecSet.Close
	Set oRecSet = Nothing

End Function
%>

<%
'''This function deletes a site the day after slutdatum

Function DeleteSite(varID)

Set oRecSet = Server.CreateObject("ADODB.Recordset")
	SQLStmt = "select * from vinsttips where id = " & varID
	oRecSet.Open SQLStmt, strConn, 3, 3
	
	Set oConnect = Server.CreateObject("ADODB.Connection")
	oConnect.Open strConn
	oConnect.Execute("DELETE FROM vinsttips WHERE slutdatum <= dateadd('d', -1, date())")	

	oConnect.Close
	Set oConnect = Nothing

	oRecSet.Close
	Set oRecSet = Nothing

End Function
%>

<html>
<head>
<!--#include file="../metatags.asp"-->

<SCRIPT language="JavaScript">
<!--
function LinkoMatic (url) {
window.open(url, "editeramedlem","toolbar=no,directories=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=no,width=350,height=600,top=120,left=400");
} 
// -->
</SCRIPT>

</head>

<body bgcolor="#7B8CA2" text="#475A69" link="#475A69" vlink="#475A69" ALINK="#475A69">

<center><b><a href="vinsttipsnap.asp">Oaktiverade</a> | <a href="default.asp?filter=vinsttips">Aktiverade</a> | <a href="logout.asp">Logout</a></b></center>

<%
 DBListMembers(Request.QueryString("filter"))
%>
<br>
</body>
</html>

där koden som ska radera en sida är sist bland funktionerna innan html koden...
har klippt och klistrat lite nu så hoppas det stämmer med alla databaskopplingar...

tabellen som posten ska raderas ifrån heter vinsttips och
kolumnen med datumen slutdatum....

Medlem sedan juni 200032 969 inlägg
#13

Du kör ju aldrig funktionen, så då är det inte så konstigt att funktionen inte körs. :i

Dessutom; i funktionen skapar du ett recordset där du hämtar lite data. Varför gör du det? Du gör ju ingenting med informationen?

Medlem sedan sep. 2001649 inlägg
#14

ok,
vad ska jag då lägga till för kod?
(nej recordset gör nog ingen nytta där...)

Medlem sedan juni 200032 969 inlägg
#15
sub DeleteSite()
	Set oConnect = Server.CreateObject("ADODB.Connection")
	oConnect.Open strConn
	oConnect.Execute("DELETE FROM vinsttips WHERE slutdatum <= dateadd('d', -1, date())")	

	oConnect.Close
	Set oConnect = Nothing
End Sub

.....

' Kör!!!!

[b]DeleteSite[/b]

Jag gjorde om din funktion till en sub, eftersom den inte returnerar någonting.
Var får förresten strConn sitt värde?

Medlem sedan nov. 20017 144 inlägg
#16
oConnect.Execute("DELETE FROM vinsttips WHERE slutdatum <= dateadd('d', -1, date())"),,128
Medlem sedan sep. 2001649 inlägg
#17

ok, nu börjar det närma sig..
får dock
Microsoft VBScript runtime error '800a000d'
Type mismatch:
när den ska köras...
verkar vara att det är olika på datumformaten eller nåt...
i databasen är det typen date (2005-03-17)

Medlem sedan juni 200032 969 inlägg
#18

Om du får ett VBScript runtime error så beror inte det på SQL-frågan. Vilken rad pekar felmeddelandet på?

Medlem sedan sep. 2001649 inlägg
#19

oj, det var tydligen att jag skrivit en bokstav fel när jag körde suben när det var fixat får jag ett fel

Microsoft OLE DB Provider for ODBC Drivers error '80040e09'

[TCX][MyODBC]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('d', -1, date())' at line 1

på raden
oConnect.Execute("DELETE FROM vinsttips WHERE slutdatum <= dateadd('d', -1, date())")

Medlem sedan juni 200032 969 inlägg
#20

Dåså.

ALLTID ange dbms från början. Dateadd() fungerar inte i MySQL, utan då får man göra på annat sätt (exempelvis som i sontas inlägg ovan. Annars kan man söka i SQL-forumet.)

138 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)