AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Problem beim ADODataSet.Delete
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim ADODataSet.Delete

Ein Thema von onkelmehli · begonnen am 13. Mär 2008 · letzter Beitrag vom 14. Mär 2008
Antwort Antwort
onkelmehli

Registriert seit: 8. Mär 2006
119 Beiträge
 
Delphi 2007 Professional
 
#1

Problem beim ADODataSet.Delete

  Alt 13. Mär 2008, 17:53
Datenbank: SQL Server • Version: 2005 • Zugriff über: ADO
Hallo,

ich hole mir Daten über eine ADODataSet die wiederum auf eine View (Verknüpfung zweier Tabellen) zugreift.
In dieser View habe ich einen Instead of Delete Trigger, der bei einem Delete nur diesen Datensatz aus der einen Tabelle löschen soll.

Nun möchte ich über ADODataSet.Delete einen Datensatz löschen, danach führe ich ein UpdateBatch aus.
Der Datensatz wird auch gelöscht, allerdings in beiden Tabellen aus der View, was ich ja eigentlich durch den Trigger verhindern wollte.

Was mache ich hier falsch ?

Gruß

Matthias
  Mit Zitat antworten Zitat
Peinhard

Registriert seit: 8. Jul 2006
152 Beiträge
 
#2

Re: Problem beim ADODataSet.Delete

  Alt 14. Mär 2008, 08:05
Guck dir doch mal mit dem Profiler an, welche Befehle der ADODataset tatsächlich an die SQL-Engine rausschickt...
  Mit Zitat antworten Zitat
onkelmehli

Registriert seit: 8. Mär 2006
119 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Problem beim ADODataSet.Delete

  Alt 14. Mär 2008, 11:51
danke für den Tipp, leider finde ich den Profiler nicht bei SQL 2005, oder gibt es den dort nicht ?
Hab mir mal den SqlExpressProfiler aus dem Netz geladen.
Dieser zeigt mir an, das ein Delete auf die eine Tabelle und danach auf die andere Tabelle gemacht wird.

Also wenn das mit den DataSets so nicht funktioniert, kann man sich doch den Trigger sparen und den "eigentlichen" Delete-Befehl (aus dem Trigger) in eine separate StoredProc packen und diese dann ausführen ? Ich dachte, das Instead of Trigger dazu da sind, um genau dies zu umgehen ?

Gruß Matthias
  Mit Zitat antworten Zitat
Peinhard

Registriert seit: 8. Jul 2006
152 Beiträge
 
#4

Re: Problem beim ADODataSet.Delete

  Alt 14. Mär 2008, 12:22
Schuld an diesem Verhalten ist die etwas luschige Art, in der die ADODataset gestrickt sind. Umgehen kannst du das bspw mit dem BetterADODataset, bei dem du die ADO-Property 'Unique Table' setzen kannst, oder indem du dich in den Event OnBeforeDelete hängst, dort das 'richtige' DELETE-Statement absetzt und den 'eingebauten' Vorgang anschliessend mit SysUtils.Abort abbrichst - oder überhaupt eine Routine schreibst, die du statt ADODatase.Delete aufrufst. Auf Datenbank-Ebene würde ich das nicht unbedingt lösen wollen.
  Mit Zitat antworten Zitat
onkelmehli

Registriert seit: 8. Mär 2006
119 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Problem beim ADODataSet.Delete

  Alt 14. Mär 2008, 13:17
Zitat:
....indem du dich in den Event OnBeforeDelete hängst, dort das 'richtige' DELETE-Statement absetzt und den 'eingebauten' Vorgang anschliessend mit SysUtils.Abort abbrichst - oder überhaupt eine Routine schreibst, die du statt ADODatase.Delete aufrufst.
das Problem an der ganzen Sache ist nur, ich müsste die Datenmenge in der DataSet dann neu laden, damit der gelöschte nicht mehr angezeigt wird.
Ich kann aber die DataSet aus verschiedenen Gründen nicht nach dem Delete schliessen und wieder öffnen (auch kein refresh etc.)
  Mit Zitat antworten Zitat
Peinhard

Registriert seit: 8. Jul 2006
152 Beiträge
 
#6

Re: Problem beim ADODataSet.Delete

  Alt 14. Mär 2008, 14:57
Dann bleibt dir als einfache Lösung immer noch TBetterADODataset. Nach einer Anspassung der INC-Datei auf Delphi2007 sollte er auch problemlos laufen. Zur Lösung deines Problems guckst du im kommentierten Interface bzw der Hilfe unter 'Unique_Table' und Konsorten. Das Ding macht auch sonst ein paar Sachen 'richtiger' als das mitgelieferte Exemplar.
  Mit Zitat antworten Zitat
onkelmehli

Registriert seit: 8. Mär 2006
119 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Problem beim ADODataSet.Delete

  Alt 14. Mär 2008, 15:06
ok danke erst einmal, werd mir das am Wochenende mal in Ruhe anschauen.

Gruß Matthias
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz