Einzelnen Beitrag anzeigen

Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#11

AW: SQL Server : Perfomanceprobleme - sinnvolle DB Verbindung gesucht

  Alt 24. Feb 2011, 15:41
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.
  Mit Zitat antworten Zitat