![]() |
AW: DeleteSQL
Danke für die Unterstützung. Habe eine weitere Query eingesetzt (wie Sir Rufo vorgeschlagen hat) und es funktioniert. Denke auch, für solche Aufgaben ist eine weitere Query schon nicht schlecht.
Danke. |
AW: DeleteSQL
Hallo,
ich möchte hier mal antworten: :lol: Ich benutze in meinem eigenem Persistenz-Framework grundsätzlich tatsächlich nur eine Query-Komponente. Ob ich nun ein 'Select' oder ein 'Delete' oder was auch immer gegen die Datenbank huste, spielt erst mal keine Rolle. Delphi-Entwickler benutzen gerne für jede Abfrage ein neues Query-Objekt, eins sollte grundsätzlich reichen, lässt man Nebenläufigkeit jetzt erst mal aus dem Spiel. mfg frank |
AW: DeleteSQL
Zitat:
1. Benutzt der TE sehr wahrscheinlich nicht Dein Persistenzframework und 2. haben wir hier die Situation, dass die betreffende Query Teil (property) einer Datasetkomponente ist, die einen speziellen Zweck erfüllen soll. Summa summarum macht es an der Stelle keinen Sinn, die "Schwesterproperty" für das Dataset zu vergewaltigen und dort das Delete einzutragen und auch nicht unbedingt eine separate Query zu erfinden, die im Delete Fall durchführt, wofür es eine vorgesehene Methode gibt. Standard Code, der per Dataset.Delete arbeitet, dürfte an der Stelle sonst auch nicht funktionieren. |
AW: DeleteSQL
@frankyboy1974
So gekapselt und von der weiteren Verwendung versteckt kann man das auch ruhig machen. Hier wurde aber gerade gezeigt, dass ein DataSet, was aktiv für die Anzeige eines Grid zuständig ist auch mal eben flugs für das Absetzen eines Statements missbraucht wird. Und wenn du dein Framework passend aufgebaut hast
Delphi-Quellcode:
dann ist es ja auch ein Leichtes, hier ein Dictionary aufzusetzen, was dann für jeden Abfrage-Kontext eine eigene Query-Konponente zur Verfügung stellt und vorhält.
TFramework = class
private FGoldenRingQuery : TQuery; protected // Bereitet die Query für den Abfrage-Kontext vor function GetQuery( const QueryContext: string ): TQuery; end; Falls es nämlich mal zu zeitlichen Engpässen kommen sollte (viele Operation mit ständig wechselndem Query-Kontext). Denn bei jedem Zuweisen des SQL-Textes wird dieser immer wieder geparst, um die Parameter herauszufinden. ;) |
AW: DeleteSQL
Noch mal kurz sortiert:
Das Dataset ist wohl ein IBDataset. Dies enhält mehrere SQLs für open, insert, update, delete, die aber nicht direkt aufgerufen werden, sondern dann, wenn ein Aufruf der Methode des Datasets erfolgt. Ist das Dataset nicht offen, kann man nichts davon verwenden (außer natürlich open), Dataset.insert, delete usw. funktionieren nicht. Will man wie angegeben nur einen Datensatz löschen dann nimmt man eine SQL-Komponente, schreibt das SQL-Kommando in deren SQL-Feld, dann execute und fertig. Das Dataset ist dann praktisch, wenn man die Daten anzeigen will und der Benutzer Änderungen macht, die über die eingebauten SQL-Befehle ausgeführt werden. |
AW: DeleteSQL
Zitat:
Will man einen Datensatz löschen, der im (offenen ) Dataset vorliegt, verwendet man dataset.delete. Will man irgendeinen anderen Datensatz löschen, außerhalb der (offenen) Dataset oder außerhalb des Filterbereichs, dann nimmt man eine separate Query. Ansonsten halt ein anderes Verfahren, siehe Voryschlag Sir Rufo oder sonst ein konsistentes Framework, aber nicht diesen wirren Mix. |
AW: DeleteSQL
So sieht das aus.
Und als Ergänzung, wofür diese ganzen SQL Eigenschaften sind hier ein kleines Beispiel:
Delphi-Quellcode:
in der Datenbank nicht wirklich gelöscht, sondern nur als gelöscht markiert und das Abfrage-Statement sorgt dafür, dass die "gelöschten" Daten auch nicht mehr angezeigt werden.
DataSet.Delete;
So kann man auch mit dem Navigator/Grid spezielle Löschoperation (oder Update/Insert) durchführen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz