![]() |
AW: SQL mitloggen
hier gibts in den Kommentaren noch einen Hinweis von Rodrigo
![]() |
AW: SQL mitloggen
Zitat:
Code:
nicht soviel anfangen.
insert into kunden (name1, name2, strasse, plz, ort) VALUES (:name1, :name2, :strasse, :plz, :ort)
Und diese Aufbereitung muß ja innerhalb der ExecSQL-Procedure stattfinden. Und genau des aufbereiteten SQL-String möchte ich gerne haben. |
AW: SQL mitloggen
Doch kann er, das ist ja gerade der Vorteil von Parametern. Beim ExecSQL werden nur die Werte der Parameter an den Server gesendet, welche er dann auf den vorbereitete Abfrage anwendet.
|
AW: SQL mitloggen
Zitat:
Gruß K-H P.S. was die Parameter angeht, schau mal in die Kommentare zu Stevies Link. Ich bin mir nicht sicher, aber der Tracer den ich verlinkt habe liefert das, soweit ich mich erinnern kann. |
AW: SQL mitloggen
Zitat:
(MSSQL2005Express, XE2, dbGo ADOConnection) Denn wenn ja, kann ich mir das ganze schenken. Denn ich kann das Logging nur gebrauchen, wenn ich auch sehen kann, welche Werte an den Parametern eingesetzt werden. Leider habe ich noch kein Programm gefunden, womit ich mir das ganze am SQL 2005 Express mitloggen kann (zumindest keine kostenlose). |
AW: SQL mitloggen
|
AW: SQL mitloggen
Also man kann sich auch in die Events der ADOConnection einklinken und so Queries mitprotokollieren.
Bei folgendem Code-Schnipsel habe ich einige Dinge ausgeschnitten (betreffend Zeitmessung), aber das Prinzip müsste klar sein.
Delphi-Quellcode:
procedure TMainDataModule.ConnectionExecuteComplete(Connection: TADOConnection;
RecordsAffected: Integer; const Error: ADODB.Error; var EventStatus: TEventStatus; const Command: _Command; const Recordset: _Recordset); { Komplett auskommentiert, da ab und an Fehler auftreten (Command.Parameters.Item[i] ist nil, wiesoauchimmer). Ist eh nur für Zeitmessungen interessant, wenn man die Parameter der Query wissen will. function GetMoreInfo: string; var i: Integer; begin Result := 'RecordsAffected: ' + IntToStr(RecordsAffected); try if Command.Parameters.Count > 0 then begin Result := Result + ', ' + IntToStr(Command.Parameters.Count) + ' Parameter: '; for i := 0 to Command.Parameters.Count-1 do begin if i > 0 then Result := Result + ', '; Result := Result + '"' + Command.Parameters.Item[i].Name + '" = "' + VarToStr(Command.Parameters.Item[i].Value) + '"'; end; end; except end; end; } var sql: string; //time: Integer; ms: Double; begin // time := GetTickcount-FSQLExecTime; sql := CleanupSQL(Command.CommandText); // Alle Whitespaces durch ein einzelnes Leerzeichen ersetzen. // und mehrfache Leerzeichen auf eines reduzieren sql := StrRemoveSequentialChars(StrReplaceChars(sql,[#13,#10,#9],' '),[' ']); FTimeLogger.WriteLogFileFmt('SQL %7.1f ms: %s', [ms,sql]); //FTimeLogger.WriteLogFile(' ' + GetMoreInfo); end; function CleanupSQL(const sql: string): string; var i: Integer; begin // Teilweise werden von den Command-Objekten SQL-Strings zurückgegeben, die // mittendrin ein #0 Zeichen haben => Dort abschneiden. i := CharPos(sql,#0,1); if i > 1 then Result := Copy(sql,1,i-1) else Result := sql; end; |
AW: SQL mitloggen
@shmia
#6,#8,#9 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00: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