Ich probiere gerade herum. Was ist denn besser geeignet TADOCommand oder TADOQuery? Wo ist denn da der Unterschied?
Würde das dann so machen für eine Tabelle am Beispiel der Hotfixes.
Delphi-Quellcode:
SQLCommand.Parameters.Clear;
SQLCommand.CommandText := 'INSERT Into hotfixes (kbnumber,type,installedon,installedby, description, lastupdate,sid) ' +
'VALUES (:kbnumber,:type,:installedon,:installedby,:description,:lastupdate,:sid);';
SQLCommand.Prepared;
// Verarbeitung: Hotfixes
for i := 0 to max_AHotfixes do
begin
if AHotfixes[i].kbnumber = '' then
break;
SQLCommand.Parameters.ParamByName('kbnumber').Value := AHotfixes[i].kbnumber;
SQLCommand.Parameters.ParamByName('type').Value := AHotfixes[i].typ;
SQLCommand.Parameters.ParamByName('installedon').Value := AHotfixes[i].installedon;
SQLCommand.Parameters.ParamByName('installedby').Value := AHotfixes[i].installedby;
SQLCommand.Parameters.ParamByName('description').Value := AHotfixes[i].description;
SQLCommand.Parameters.ParamByName('lastupdate').Value := FormatDateTime('dd.mm.yyyy hh:nn:ss',lastupdate);
SQLCommand.Parameters.ParamByName('sid').Value := id;
SQLCommand.Execute;
end;
// Verarbeitung: Software
SQLCommand.Parameters.Clear;
SQLCommand.CommandText := 'INSERT Into software (name,version,installedon,installedby,lastupdate,sid) ' +
'VALUES (:name,:version,:installedon,:lastupdate,:sid);';
SQLCommand.Prepared;
for i := 0 to max_ASoftware do
begin
if ASoftware[i].name = '' then
break;
SQLCommand.Parameters.ParamByName('name').Value := ASoftware[i].name;
SQLCommand.Parameters.ParamByName('version').Value := ASoftware[i].version;
SQLCommand.Parameters.ParamByName('installedon').Value := ASoftware[i].installedon;
SQLCommand.Parameters.ParamByName('lastupdate').Value := FormatDateTime('dd.mm.yyyy hh:nn:ss',lastupdate);
SQLCommand.Parameters.ParamByName('sid').Value := id;
SQLCommand.Execute;
end;
// und so weiter
Würde das so Sinn machen oder sollte man 8 TADOCommands am Anfang vorbereiten und dann darauf zugreifen? Ein weiterer Punkt wäre, dass ich prüfen muss, ob es den Eintrag schon gibt. Abhängig davon mache ich ein INSERT oder ein UPDATE. Muss ich dann nicht doch mit TADODataSet arbeiten.
Delphi-Quellcode:
// Check, ob der Datensatz schon vorhanden ist
DSData.Close;
DSData.CommandText := 'Select * from computer_hotfixes where sid = ' + id + ' and kbnumber = '+QuotedStr(AHotfixes[i].kbnumber);
DSData.Open;
if DSData.RecordCount = 0 then
// INSERT verwenden
else
// UPDATE verwenden
DSData.Close;
Oder gibt es noch bessere Variante?
Ich könnte ja auch nur INSERTs machen und dann die alten Daten löschen. Habe nur bedenken, dass das eventuell nicht so gut für die incrementelle ID ist.
Delphi-Quellcode:
// Alte Einträge löschen
SQLCommand.Parameters.Clear;
SQLCommand.CommandText := 'delete from computer_hotfixes where sid = ' + QuotedStr(id) + ' and lastupdate <> ' + QuotedStr(FormatDateTime('dd.mm.yyyy hh:nn:ss',lastupdate));
SQLCommand.Execute;
Danke schon mal für Eure großartige Hilfe, mir dieses Thema etwas näher zu bringen.