Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBGrid SelectedRows (https://www.delphipraxis.net/158687-dbgrid-selectedrows.html)

alzaimar 27. Feb 2011 11:18

AW: DBGrid SelectedRows
 
Also den IN-Operator auf diese Weise zu verwenden ist imho keine so gute Idee. Das funktioniert zwar, aber zeigt doch, das deine Anwendung hier keine sinnvolle Operation bietet:

Du lässt Dir z.B. 1.600 Datensätze anzeigen und dann möchtest Du, das ... ein bestimmtes UPDATE auf alle oder einige wenige Datensätze ausgeführt wird?

Gut. Dann mach das doch auch so: Führe einen Button ein "Auf Alle anwenden". Dahinter verbirgt sich dann ein "UPDATE tabelle SET Feld=NeuerWert". Das geht richtig flott und wäre bezüglich Usability der richtige Weg.

Wer einzelne Datensätze auswählen will, kann das mit Bummi's Methode gerne tun. Wer mehr als 1500 Datensätze auswählt, bekommt eine Warnung, das das zu viele seien, oder Du machst das in Paketen à 1500 Records.

Oder (so mach ich das): Ich habe bei solchen GUI-Metaphern (Liste anzeigen, auswählen) immer zwei Buttons: "Alle Auswählen" und "Auswahl entfernen". Wenn alle Datensätze ausgewählt sind, führe das UPDATE ohne IN aus, ansonsten eben mit.

Ich würde aber grundsätzlich meinen, das die Anzeige von so vielen Datensätzen und die Möglichkeit, aus all diesen Datensätzen etwas auszuwählen, bezüglich der Benutzerfreundlichkeit etwas problematisch ist.

-187- 27. Feb 2011 15:38

AW: DBGrid SelectedRows
 
Naja eine Warnung wie "Zuviele Datensätze ausgewählt" kommt mal garnicht in Frage :) Ich habs ja in Pakete á 1500 aufgeteilt. Die Idee mit dem zweiten Button habe ich bereits umgesetzt.

Scheinbar gibt es keine sinvollere Lösung für mein Problem.

jobo 27. Feb 2011 16:09

AW: DBGrid SelectedRows
 
Ich zweifel ja, ob Anwender oder Anwendung einen großen Nutzen bei dieser Funktion haben/bieten. Wer bitte findet sich denn damit zurecht, in 1000en Datensätzen mit Multiselect die richtigen Daten zu finden, auszuwählen, nicht daneben zu klicken und immer schön die [STRNG] Taste festzuhalten?
Aber das war ja nicht die Frage..

2 Vorschläge:
1. Falls es irgendeine Systematik bei der Auswahl der 1000 Datensätze gibt, die sich durch einen Filter ausdrücken lässt, soetwas nutzen und den Filter einer Stored Proc übergeben, die das gefilterte Update durchführt.
(Das würde m.E. vlt auch die Übersichtlichkeit / Transparenz für den Anwender erhöhen, erst Recht, wenn er (Filter-/Selektions-)Gruppen bilden muss, weil es nicht auf einen Schlag geht.)

oder
2. Die Maske so ändern, dass (De-)Selektion satzweise an eine temporäre Tabelle des Users geschickt wird. Die hinzugefügten Sätze könnten evtl sogar in einem 2. Grid angezeigt werden (Dann könnte man, müsste aber nicht, auf die Nutzung/Anzeige der Selected Items verzichten).
Das lässt sich auch mit den genannten Buttons wie Alles Auswählen, Auswahl invertieren , .. kombinieren.
Zum Update wieder eine Prozedur, die auf Basis der temporären Tabelle arbeitet.
Falls es keine user spezifischen, temporären Tabellen gibt in FB, dann halt eine normale mit den Spalten "ID" (Datensatz) und Session- oder USer-id.

hoika 28. Feb 2011 14:19

AW: DBGrid SelectedRows
 
Hallo,

führe deine Schleife in einer Transaktion aus.

Falls es ich um das Update immer der gleichen Tabelle handelt
-> prepared Query


Heiko

-187- 28. Feb 2011 14:31

AW: DBGrid SelectedRows
 
Hmm kannst du das genauer erklären ? Die Tansaktion rufe ich ja erst nach der Schleife mit .Commit auf.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:30 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