AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

SQL mitloggen

Ein Thema von Captnemo · begonnen am 23. Okt 2012 · letzter Beitrag vom 24. Okt 2012
Antwort Antwort
Seite 2 von 2     12
jobo

Registriert seit: 29. Nov 2010
2.958 Beiträge
 
Delphi 2010 Enterprise
 
#11

AW: SQL mitloggen

  Alt 24. Okt 2012, 13:03
hier gibts in den Kommentaren noch einen Hinweis von Rodrigo
http://theroadtodelphi.wordpress.com...do/#comment-52
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#12

AW: SQL mitloggen

  Alt 24. Okt 2012, 13:06
Zitat:
Ist schon mal eine ganz schöne Sache. Aber mir fehlen noch die Paramter, um die es mir an dieser Stelle ja eigentlich geht. Ich hätte gerne das komplette SQL-Statement nach dem Prepare.
Das wirst du clientseitig nicht hinbekommen. Die Parameter werden ja direkt vom Server angewendet.
Aber der SQL-String muß ja erst einmal aufbereitet werden, bevor er zum Server gesendet wird. Der server kann ja mit
Code:
insert into kunden (name1, name2, strasse, plz, ort) VALUES (:name1, :name2, :strasse, :plz, :ort)
nicht soviel anfangen.
Und diese Aufbereitung muß ja innerhalb der ExecSQL-Procedure stattfinden. Und genau des aufbereiteten SQL-String möchte ich gerne haben.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.793 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: SQL mitloggen

  Alt 24. Okt 2012, 13:42
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.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.658 Beiträge
 
Delphi 7 Personal
 
#14

AW: SQL mitloggen

  Alt 24. Okt 2012, 13:43
@p80286: Hier geht es ja nicht um Herumhacken auf ADO. Ich nutze es ja, weil mir das ganze Komponenteninstallieren von Zeos auf den Keks ging. Ich such halt nur ne Möglichkeit um die SQL-Statements vernüftig mitzuloggen.
Du warst auch nicht gemeint, Nichts für ungut.

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.
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (24. Okt 2012 um 13:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#15

AW: SQL mitloggen

  Alt 24. Okt 2012, 14:23
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.
Gut, dann bleibt für mich die Frage: Machen die ADO-Komponenten es genau so? Kannst du mir das auch beantworten?
(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).
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#16

AW: SQL mitloggen

  Alt 24. Okt 2012, 15:17
Hier noch 2 Ansätze:

http://www.codeproject.com/Tips/3322...hout-using-SQL

http://www.techrepublic.com/blog/dat...es-in-tsql/159
http://blogs.msdn.com/b/sqlsecurity/...-profiler.aspx
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
shmia

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

AW: SQL mitloggen

  Alt 24. Okt 2012, 18: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
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#18

AW: SQL mitloggen

  Alt 24. Okt 2012, 18:36
@shmia

#6,#8,#9
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 22:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf