AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SQL mitloggen

Ein Thema von Captnemo · begonnen am 23. Okt 2012 · letzter Beitrag vom 24. Okt 2012
 
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#16

AW: SQL mitloggen

  Alt 24. Okt 2012, 17:22
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;
Andreas
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:34 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