![]() |
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:
Die zuletzt (aktuell) angewählte Zeile wird geschrieben, danach bekomme ich (logischerweise) ´ne
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; 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 |
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; |
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 23:23 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 by Thomas Breitkreuz