![]() |
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:
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.
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
Delphi-Quellcode:
Oder gibt es noch bessere Variante?
// 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; 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:
Danke schon mal für Eure großartige Hilfe, mir dieses Thema etwas näher zu bringen.
// 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; |
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
|
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? |
AW: SQL Server : Perfomanceprobleme - sinnvolle DB Verbindung gesucht
Zitat:
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 ![]() (Kanne Kaffee nicht vergessen, ist nicht so peppig wie der Daniel) |
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. |
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