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.
15 svar · 340 visningar · startad av berntg
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?
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.
Varför skriver man 128. Vad innebär det?
Det betyder att inget recordset skall returneras. Konstanten kallas adExecuteNoRecords om jag inte minns fel.
Mvh,
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?
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
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?
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,
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
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?
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.)
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 :/
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.
ok.. tack för hjälpen
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?
http://cgi.webforum.nu/wf/Forum11/HTML/007069.html
Sista inlägget i den tråden innehåller ett exempel.