AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi DBGrid SelectedRows in Tabelle schreiben
Thema durchsuchen
Ansicht
Themen-Optionen

DBGrid SelectedRows in Tabelle schreiben

Ein Thema von Loki77 · begonnen am 28. Apr 2006 · letzter Beitrag vom 28. Apr 2006
Antwort Antwort
Benutzerbild von Loki77
Loki77

Registriert seit: 21. Feb 2006
Ort: Trier
132 Beiträge
 
Delphi XE2 Enterprise
 
#1

DBGrid SelectedRows in Tabelle schreiben

  Alt 28. Apr 2006, 09:10
Datenbank: Paradox • Version: 7 • Zugriff über: Query, Table
Guten Morgen!

Hab´mal wieder ´ne Frage zum DBGrid (meine Lieblings-Kompo.... )
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
"What I cannot create, I do not understand."
-Richard P. Feynman
  Mit Zitat antworten Zitat
Hoshy

Registriert seit: 27. Apr 2006
32 Beiträge
 
Delphi 7 Architect
 
#2

Re: DBGrid SelectedRows in Tabelle schreiben

  Alt 28. Apr 2006, 11:35
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;
  Mit Zitat antworten Zitat
Benutzerbild von Loki77
Loki77

Registriert seit: 21. Feb 2006
Ort: Trier
132 Beiträge
 
Delphi XE2 Enterprise
 
#3

Re: DBGrid SelectedRows in Tabelle schreiben

  Alt 28. Apr 2006, 13:05
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]
"What I cannot create, I do not understand."
-Richard P. Feynman
  Mit Zitat antworten Zitat
Antwort Antwort


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 21: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