Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBGrid SelectedRows in Tabelle schreiben (https://www.delphipraxis.net/68340-dbgrid-selectedrows-tabelle-schreiben.html)

Loki77 28. Apr 2006 09:10

Datenbank: Paradox • Version: 7 • Zugriff über: Query, Table

DBGrid SelectedRows in Tabelle schreiben
 
Guten Morgen!

Hab´mal wieder ´ne Frage zum DBGrid (meine Lieblings-Kompo.... :wall: )
Ich verknüpfe per SQL mehrere Tabellen und gebe das Resultat in einem DBGrid aus.
Nun möchte ich den Injalt der selektierten Zeilen [Multiselect] in eine eigene Tabelle schreiben.
Nur leider führt das Programm die Prozedur nur für die aktuell selektierte Zeile durch, nicht für
alle in der Bookmark-List. Warum?

Hier die Prozedur:

Delphi-Quellcode:
procedure TForm1.SpeedButton3Click(Sender: TObject);
var
  i : integer;
begin
  tblMyTable.Open;
  for i := 0 to DBGrid6.SelectedRows.Count - 1 do
    try
    begin
      tblMyTable.Insert;
      tblMyTable.FieldByName('ZimmerIdent').AsInteger := DBgrid6.Columns[0].Field.Value;
      tblMyTable.FieldByName('AnbieterIdent').AsInteger := DBgrid6.Columns[1].Field.Value;
      tblMyTable.FieldByName('HotelIdent').AsInteger := DBgrid6.Columns[2].Field.Value;
      tblMyTable.FieldByName('Hotelname').AsString := DBgrid6.Columns[3].Field.Value;
      tblMyTable.FieldByName('Name').AsString := DBgrid6.Columns[4].Field.Value;
      tblMyTable.FieldByName('Zimmername_s').AsVariant := DBgrid6.Columns[5].Field.Value;
      tblMyTable.Post;
    end;
    except
      Application.MessageBox('Es ist ein Fehler aufgetreten.' + chr(13) + 'Möglicherweise existriert ein gewählter '
                              + 'Eintragg bereits.','Fehler',MB_OK or MB_ICONEXCLAMATION);
    end;
  tblMyTable.Close;
end;
Die zuletzt (aktuell) angewählte Zeile wird geschrieben, danach bekomme ich (logischerweise) ´ne
Key Violation, da die Prozedur bis zum erreichen von DBGrid6.SelectedRows.Count versucht die gleichen Daten -> Key
in die Tabelle zu schreiben. Hat jemand ´ne abhilfe? Kann ich da was über die Bookmark-List machen?
Die zu schreibenden Daten stehen ja leider nicht in einer festen Tabelle...
Vielen Dank, Philipp

Hoshy 28. Apr 2006 11:35

Re: DBGrid SelectedRows in Tabelle schreiben
 
Das liegt daran, dass die Iteration über die selektierten Rows allein die Position des Datensatzzeigers im DataSet nicht ändert. Du stehst also quasi die ganze Zeit auf dem selben Satz, nämlich den durch Anklicken zuletzt markierten.

Du musst innerhalb der Schleife den Datensatzzeiger positionieren:

Delphi-Quellcode:
for i := 0 to DBGrid1.SelectedRows.Count-1 do
begin
   DBGrid1.DataSource.DataSet.GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
   .
   .
end;

Loki77 28. Apr 2006 13:05

Re: DBGrid SelectedRows in Tabelle schreiben
 
Ok, Danke! Es klappt!
Jetzt muss ich nur noch die doppelten Key´s abfangen!
Das Prog macht nämlich nicht weiter, trotz try...except.
mmmhhh...

Danke, Gruss Philipp

[edit] Ok, Paradox.... Einfach tblMyTable.Close; ... tblMyTable.Open in except -> funzt... [/edit]


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