oConnect.Execute("DELETE FROM " & Request.QueryString("TABELL") & " where slutdatum < '" & dateadd("d", -1, date) & "')
/Pelle
29 svar · 758 visningar · startad av jake
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
%>
oConnect.Execute("DELETE FROM " & Request.QueryString("TABELL") & " where slutdatum < '" & dateadd("d", -1, date) & "')
/Pelle
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.
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.
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 :(
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?
i alla fall så raderas inte poster även om datumet i kolumnen slutdatum är äldre än dagens datum... (typen på fältet är date)
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!
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
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...
Släng upp hela koden så kikar vi.
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 & "'><< </a>---<a title='Nästa sida' href='default.asp?filter=" & strFilter & "&next=" & startID + PerSida & "'> >></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 & "'><< </a>---<a title='Från början' href='default.asp?filter=" & strFilter & "'> >></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....
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?
ok,
vad ska jag då lägga till för kod?
(nej recordset gör nog ingen nytta där...)
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?
oConnect.Execute("DELETE FROM vinsttips WHERE slutdatum <= dateadd('d', -1, date())"),,128
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)
Om du får ett VBScript runtime error så beror inte det på SQL-frågan. Vilken rad pekar felmeddelandet på?
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())")
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.)