Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Server : Perfomanceprobleme - sinnvolle DB Verbindung gesucht (https://www.delphipraxis.net/158620-sql-server-perfomanceprobleme-sinnvolle-db-verbindung-gesucht.html)

Piro 24. Feb 2011 15:41

AW: SQL Server : Perfomanceprobleme - sinnvolle DB Verbindung gesucht
 
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.

Sir Rufo 24. Feb 2011 15:44

AW: SQL Server : Perfomanceprobleme - sinnvolle DB Verbindung gesucht
 
Dafür erstellt man sich eine SP (Stored Procedure) der man die Werte übergibt und die SP veranlasst dann entweder ein INSERT oder UPDATE

Piro 24. Feb 2011 22:15

AW: SQL Server : Perfomanceprobleme - sinnvolle DB Verbindung gesucht
 
Sorry für die ganze Fragerein aber ich will das gerne genau verstehen.

Wie würde denn so eine Store Procedure aussehen? Ich schreibe sie doch im Delphi Programm oder?

Sir Rufo 24. Feb 2011 22:24

AW: SQL Server : Perfomanceprobleme - sinnvolle DB Verbindung gesucht
 
Zitat:

Zitat von Piro (Beitrag 1084261)
Sorry für die ganze Fragerein aber ich will das gerne genau verstehen.

Wie würde denn so eine Store Procedure aussehen? Ich schreibe sie doch im Delphi Programm oder?

Nein, der Begriff Stored Procedure kommt aus der SQL-Welt und erklärt sich eigentlich von selbst :mrgreen:
Eine gespeicherte Abfolge von SQL-Befehlen - und gespeichert auf dem SQL-Server ;)

Aber bevor ich mir hier die Finger wund tippe lassen wir doch MS selber zu Wort kommen
WebCast: MSSQL - Stored Procedures (deutsch)
(Kanne Kaffee nicht vergessen, ist nicht so peppig wie der Daniel)

Piro 24. Feb 2011 22:28

AW: SQL Server : Perfomanceprobleme - sinnvolle DB Verbindung gesucht
 
Vielen Danke Sir Rufo für deine Geduld. Dann werde ich mir das mal anschauen.

Schönen Abend noch. Und danke an alle. Ihr habt mir sehr geholfen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:01 Uhr.
Seite 2 von 2     12   

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-2025 by Thomas Breitkreuz