AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Bearbeiten von markierten Datensätzen im DBGrid

Bearbeiten von markierten Datensätzen im DBGrid

Ein Thema von barnti · begonnen am 21. Okt 2004 · letzter Beitrag vom 25. Okt 2004
Antwort Antwort
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#1

Bearbeiten von markierten Datensätzen im DBGrid

  Alt 21. Okt 2004, 14:35
Hallo,

der Benutzer meiner Anwendung kann eine oder mehrere Zeilen im DBGrid markieren und anschließend im Kontextmenü eine Bearbeitungsfunktion aufrufen. Der Funktion wird die Datenmenge übergeben. Anhand der gesetzten Bookmarks werden die markierten Zeilen bearbeitet.

Es funktioniert, ist allerdings durch Benutzung von
Delphi-Quellcode:
...
Grid.DataSource.DataSet.GotoBookmark(pointer(Grid.SelectedRows.Items[i]));
...
sehr langsam.
Hat jemand eine Idee, wie ich das Bearbeiten markierter Zeilen beschleunigen kann? Danke!
Gruß,

Barnti
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Bearbeiten von markierten Datensätzen im DBGrid

  Alt 22. Okt 2004, 07:28
Hi,

ich habe eine leichte Verbesserung feststellen können. Ich habe nicht mehr für jeden Bookmark einzeln ein Update-Statement abgesetzt, sondern baue das gesamte Statement zuerst aus den Bookmarks zusammen (Oder-Verknüpfung) und schicke es dann ab.
Delphi-Quellcode:
...
 with Query do begin
      SQL.Add('UPDATE position');
      SQL.Add('SET container_ID='+QuotedStr(ContID));
      SQL.Add('WHERE Position_ID='+QuotedStr(DataSet.Fields[0].AsString));

      // Positionen ab dem 2. Bookmark zum Statement hinzufügen
      for i:=1 to Grid.SelectedRows.Count-1 do begin
        DataSet.GotoBookmark(pointer(Grid.SelectedRows.Items[i]));
        SQL.Add('OR Position_ID='+QuotedStr(DataSet.Fields[0].AsString));
      end; // for
      execSQL;
...
Leider behebt diese Lösung das Problem nicht endgültig. Das Neupositionieren des Datensatzzeigers durch 'GotoBookmark' bleibt das Problem. Dieser Aufruf dauert ewig...

Wie kann ich Performace gewinnen, um das Update durchzuführen?
Gruß,

Barnti
  Mit Zitat antworten Zitat
kachel81

Registriert seit: 21. Okt 2004
25 Beiträge
 
#3

Re: Bearbeiten von markierten Datensätzen im DBGrid

  Alt 22. Okt 2004, 09:28
Du kannst z.B. das zeitaufwendige Aktualisieren der Controls unterbinden mit:

Delphi-Quellcode:
DataSet.DisableControls;
try
  ... // Deine Aktion
finally
  DataSet.EnableControls;
end;
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Bearbeiten von markierten Datensätzen im DBGrid

  Alt 22. Okt 2004, 10:05
Hi,

bei jeder Aktion deaktiviere ich die Darstellung. Das Problem besteht im Aufruf von

'GotoBookmark'...
Gruß,

Barnti
  Mit Zitat antworten Zitat
kachel81

Registriert seit: 21. Okt 2004
25 Beiträge
 
#5

Re: Bearbeiten von markierten Datensätzen im DBGrid

  Alt 22. Okt 2004, 10:22
Alles klar, war nicht ersichtlich.

Bestünde die Möglichkeit bereits beim selektieren die erforderlichen Daten zu speichern, in einer TList o.ä. und dann die enthaltenen Daten auszuwerten?
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Bearbeiten von markierten Datensätzen im DBGrid

  Alt 22. Okt 2004, 10:26
Hi,

ich müsste die Datensätze anders festhalten, z.B. Array. Ich wollte das eigentlich mit Bordmitteln lösen...
Weitere Ideen?
Gruß,

Barnti
  Mit Zitat antworten Zitat
woki

Registriert seit: 29. Mär 2003
563 Beiträge
 
Delphi 2006 Architect
 
#7

Re: Bearbeiten von markierten Datensätzen im DBGrid

  Alt 22. Okt 2004, 10:54
Zitat von barnti:
Hi,

bei jeder Aktion deaktiviere ich die Darstellung. Das Problem besteht im Aufruf von

'GotoBookmark'...
Um wieviel Datensätze geht es denn da?
Bist du wirklich sicher, daß GotoBookmark der Grund ist?
GotoBookmark ist eine Pointeroperation. Und ich hatte subjektiv eigentlich nie das Gefühl, daß sie langsam ist.
Du solltest aber die verwendeten Komponenten angeben, denn GotoBokkmark wird von jedem TDataset- Abkömmling selbst implementiert.

Grüße
Woki
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Bearbeiten von markierten Datensätzen im DBGrid

  Alt 22. Okt 2004, 11:14
Hi,

ich habe überprüft an welcher stelle es hakt. 'GotoBookmark' ist definitiv das 'Nadelöhr'.

Ich benutze mysqlDAC von microOLAP.
Die Datensatzanzahl bewegt sich zwischen 1 und 200.
Gruß,

Barnti
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Bearbeiten von markierten Datensätzen im DBGrid

  Alt 22. Okt 2004, 14:16
Hallo barnti,

du könntest durch die SelectedRows iterieren und das Schlüsselfeld in eine StringList speichern, die du der Funktion übergibst. Diese kann dann über FindKey die entsprechenden Datensätze finden.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Bearbeiten von markierten Datensätzen im DBGrid

  Alt 25. Okt 2004, 07:53
Zitat von MrSpock:
Hallo barnti,

du könntest durch die SelectedRows iterieren und das Schlüsselfeld in eine StringList speichern, die du der Funktion übergibst. Diese kann dann über FindKey die entsprechenden Datensätze finden.
???
Das verstehe ich nicht. Mein Quelltext der betreffenden Stelle ist oben zu finden.
Ich iteriere bereits über die 'selectedRows'. Ich komme aber nicht an die Inhalte ohne den Datensatzzeiger zu verändern(GotoBookmark). Oder wie ist dein Tip zu verstehen?
Gruß,

Barnti
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:40 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