Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL - Löschen aus der Ergebnismenge nicht aus der Datenbank (https://www.delphipraxis.net/116098-sql-loeschen-aus-der-ergebnismenge-nicht-aus-der-datenbank.html)

haentschman 23. Jun 2008 19:00

Re: SQL - Löschen aus der Ergebnismenge nicht aus der Datenb
 
Hallo...

ich arbeite zwar mit Zeos aber da haben die Querys eine property CachedUpdates.
- ist CachedUpdates = False werden Änderungen an der Query in die Datenbank übertragen.
- ist CachedUpdates = True können Änderungen an der Query vorgenommen werden ohne daß der Datenbank was passiert
...möchte man die Änderungen schreiben - ApplyUpdates ansonsten CancelUpdates.

vieleicht kennt das deine Query auch ? :gruebel:

alzaimar 23. Jun 2008 19:07

Re: SQL - Löschen aus der Ergebnismenge nicht aus der Datenb
 
Mit Delphi-Bordmitteln;
1. mit ADO und LockType 'ltBatchOptimistic'. Dann nur kein 'ApplyUpdates' aufrufen.
2. mit einem TDataProvider und dem TClientDataset.

juergen 23. Jun 2008 20:07

Re: SQL - Löschen aus der Ergebnismenge nicht aus der Datenb
 
Hallo,

ich hab nun nicht ganz so die Ahnung, aber wenn die Abfrage häufiger benötigt wird muss ich mich meinen Vorrednern anschließen,
die anregten, dass Tabellen Design zu überdenken.

Mir ist nicht ganz klar, wird die Lösung in dem DBMS über SQL benötigt oder wäre Delphi einsetzbar?

Bei letzerem könnte man 2 Funktionen unter Einsatz einer Query einsetzen, unter dem Ansatz, die nicht benötigten Datensätze vorab schon zu filtern:
1.) in der ersten Funktion werden deine Regeln festgelegt (Rückgabewert in meinem Beispiel = Integer)
2.)
Delphi-Quellcode:
 function TForm1.Feldwert(index: integer): string;
//diese Funktion wendet die vorherige "Regel-Funktion auf deine Tabellenspalte "xyz" an
begin
  if (UPPERCASE(Query1.Fields[index].fieldname) = 'XYZ')then
  begin
    Result := deine 1. Funktion(Query1.Fields[index].asinteger);//nur deine gültigen Datensätze
  end;
end;
3.) evtl. Datenausgabe:
Delphi-Quellcode:
...
var
  lsCell: string;
  liFldCnt, liDS: Integer;
begin
  liFldCnt := Query1.FieldCount;
  if (liFldCnt > 0) then
    while not (Query1.eof) do
    begin
      lsCell := Feldwert(0);
      for liDS := 1 to liFldCnt - 1 do
      begin
        lsCell := lsCell + ';' + Feldwert(liDS); //beispielhafte Ausgabe
      end;
    end;
end;

Ich hoffe ich habe das jetzt auch richtig verstanden...

joachimd 24. Jun 2008 09:14

Re: SQL - Löschen aus der Ergebnismenge nicht aus der Datenb
 
nimm Temp Tables, dafür sind die perfekt:
SQL-Code:
SELECT ... INTO #erg FROM ... WHERE ...
Der Vorteil gegenüber clientseitigen Lösungen: Du kannst die Ergebnistabelle mit anderen joinen, Änderungen serverseitig zurückschreiben u.ä. - und Du ersparst Dir bei großen Ergebnismengen den kompletten Transfer zum Client.

alzaimar 24. Jun 2008 09:19

Re: SQL - Löschen aus der Ergebnismenge nicht aus der Datenb
 
So wie ich das verstanden habe, will der Fragesteller Folgendes:
1. Tabelle laden
2. Die Daten in einem Datengitter anzeigen
3. Aus diesem Gitter (und nur hier) einzelne Datensätze entfernen
4. nur die Daten, die man im Grid sieht weiterverarbeiten, z.B. sequentiell drucken

Das mit SQL zu lösen ist doch dann suboptimal.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 Uhr.
Seite 2 von 2     12   

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