Markus: Datensätze löschen

Hi Leute

Verwende folgende Variante um Datensätze aus einer DB zu löschen funktioniert auch:

<%

Dim conn
Dim strConnection
Dim strSQL

strConnection = Application("Immo_ConnectionString")
Set conn = CreateObject("ADODB.Connection")

conn.Open strConnection

strSQL = "DELETE FROM Immo WHERE ID =" & Request.Form("ID")

conn.Execute strSQL
conn.Close

Set conn = Nothing
%>

Nun es funktioniert soweit gut nur habe ich gelesen man sollte Zwei weitere Objekte einfügen ein Beispiel von:

Const adCmdText = 1
Const adExecuteNoRecords = 128
nRowsAffected = CLng(0)
conn.Execute "DELETE FROM titleauthor WHERE title_id='BU2075'", _
    nRowsAffected, adCmdText Or adExecuteNoRecords

Response.Write nRowsAffected & " Records gelöscht"

Hier die Erklärung dazu:

Zitat:
Der Grund, warum ich hier von einer hochoptimierten Seite rede, ist folgender: ich teile der Execute Methode sehr genau mit, was sie von mir bekommt (adCmdText), und was ich von ihr nicht will (adExecuteNoRecords). Der Vorteil Nummer Eins ist, ADO muß nicht herausfinden, welche Art von Kommando ich absetzen will. Der Vorteil Nummer Zwei ist, ADO erstellt kein Recordset Objekt umsonst, was eine deutliche Beschleunigung bringt.

Erwähnenswert ist sicherlich auch noch die Variable nRowsAffected. Diese liefert mir die Anzahl der Datensätze, die vom DELETE Kommando gelöscht wurden. Damit kann man eine nette Benutzerausgabe generieren.

Zitat Ende

Es funktioniert auch so ohne diese 2 Konstanten was bringt es u welche Nachteile können entstehen.. kann es nämlich nicht in meine SQl Zeile einfügen:

strSQL = "DELETE FROM Immo WHERE ID =" & Request.Form("ID")

gehört oben eingefügt/angehängt: (adCmdText Or adExecuteNoRecords)
 aber wie?

Das nRowsAffected bringt mir auch nicht viel da ich ja immer nur einen Datensatz lösche..

Ist der Code sonst OK?

kann ich das:

conn.Close

Set conn = Nothing

auch wegglassen ist nämlich hier nicht angeführt:

http://www.aspheute.com/artikel/20001127.htm

MFG
Markus

  1. Hi Markus

    strSQL = "DELETE FROM Immo WHERE ID =" & Request.Form("ID")
    conn.Execute strSQL", _
         nRowsAffected, adCmdText Or adExecuteNoRecords

    Das con.close und set con=nothing müßtest Du weglassen können,
    da nicht benötigte Objekte bei Seitenende sowieso aus dem Speicher geräumt werden.
    Die Anweisungen zu belassen ist jedoch besser. Es ist immer besser selber aufzuräumen, so es geht, als das dem System zu überlassen.

    Gruß Ralf

    1. Hallo zusammen,

      du kannst das conn.close zwar weglassen, allerdings kannst du die conn nicht durch ein weiteres open überschreiben, wenn sie noch geöffnet ist.
      Gesetz den Fall du hättest zwei Datenbanken und würdest auf diese nacheinander mit dem selben Connection-Objekt zugreifen wollen, dann musst du diese Reihenfolge wählen:
      conn.open
      ...
      conn.close
      conn.open
      ...

      Bei recordsets z.B. gibt es sonst z.T. einen Fehler, dass das Objekt noch geöffnet ist.

      MfG
      Rouven

      --

      -------------------
      ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(