Nochmal:
Du füllst ein temporäres DS. Dann rufst du die Methode Merge von deinem "richtigen" DS auf. Dadurch werden nur die geänderten/neuen Datensätze aus dem temporären DS in dein "richtiges" DS übernommen. (genau dafür brauchst du den Primärschlüssel
)
DataReader in einfach
Delphi-Quellcode:
var
conn :[IrgendeinProviderPrefix]Connection;
cmd :[IrgendeinProviderPrefix]Command;
rdr :[IrgendeinProviderPrefix]Datareader;
tbl :DataTable;
Values :array of System.Object;
begin
tbl := DeinDataSet.Tables[Index/Name deiner Tabelle];
conn := [IrgendeinProviderPrefix]Connection.Create('"USER ID=User;Password=Password;Data source="datasource"');
cmd := [IrgendeinProviderPrefix]Command.Create('SELECT FROM IrgendeineTabelle'
, conn);
conn.Open();
rdr := cmd.ExecuteReader(CommandBehaviour.CloseConnection);
Values := Array.CreateInstance(typeof(System.Object)
,rdr.FieldCount);
while (rdr.Read())
begin
rdr.GetValues(Values);
tbl.LoadDataRow(Values, false);
end;
end;
Wenn es schnell gehen soll ist ein Dataset vollkommen fehl am Platz (Das Ding ist eine kleine
DB im
RAM -> viel zu aufwenidig
). Jede implementierung vin IList / ICollection sollte Databindingfähig sein. (Also auch jeder Nachfahre von CollectionBase oder ganz einfach: eine ArrayList
)