![]() |
Datenbank: MSSQL • Version: 2017 • Zugriff über: FireDac
SQL Statement mit Parametern mit den eigentlichen Werten anzeigen
Hallo zusammen,
bei einem größeren Datenbankimport-Programm (aus XML-Files) muss ich bei auftretenden Fehlern sehen können, welches SQL-Insert mit welchen Werten(!) evtl.. einen Fehler verursacht hat. Ich wende bei der Query SQL-Parameter an (ziemlich viele). Somit kann ich ja nicht
Delphi-Quellcode:
ausgeben, dann sehe ich ja nur die Parameter.
FDQry.SQL.Text
Vermutlich muss ich mir tatsächlich dann für die Protokollierung das SQL-Statement alles mit Hand zusammenbasteln um die Werte zu sehen. Oder gibt es da eine einfachere Möglichkeit? Ich hoffe ich konnte mein Anliegen verständlich rüberbringen. Vielen Dank schon mal vorab! |
AW: SQL Statement mit Parametern mit den eigentlichen Werten anzeigen
Du brauchst ein Logging/Tracing Tool für die Datenbank. Der "SQL Server Profiler" sollte das können.
|
AW: SQL Statement mit Parametern mit den eigentlichen Werten anzeigen
Oder den FireDAC FDMonitor verwenden:
![]() |
AW: SQL Statement mit Parametern mit den eigentlichen Werten anzeigen
Vielen Dank für eure Antworten!
Der Ansatz mit FDMonitor scheint für meinen Fall sehr interessant. :kiss: Ich würde dem User dann eine Option bereitstellen, womit er das Tracing im Fehlerfall aktivieren kann. Einen schönen Sonntag noch! :dp: |
AW: SQL Statement mit Parametern mit den eigentlichen Werten anzeigen
Du kannst Dir auch eine abgeleitete Komponente eines Queries deiner Wahl bauen und die Open und Execute Methoiden überschrieben, in welchen Du im Fehlerfall das SQL und Dir parameter Dir per Mail schickst oder an CodeSite sendest (je nachdem ob du es in Produktion oder Entwicklung brauchst)
|
AW: SQL Statement mit Parametern mit den eigentlichen Werten anzeigen
Ist das hier beschriebene nicht einfacher?
![]() Zitat:
Es dürfte demnach das Gewünschte "von Haus aus" bereits zur Laufzeit im Programm zur Verfügung stehen, ohne irgendwelche weiteren Hilfsmittel. Quasi sowas:
Delphi-Quellcode:
Nur hingedaddelt ohne jegliche Testmöglichkeit ;-)
FDQry.SQL.Text := 'insert into tabelle (id, wert) values (:id, :wert);
FDQry.ParamByName('ID').AsInteger := 1; FDQry.ParamByName('Wert').AsString := 'irgend eine Zeichenfolge'; FDQry.Prepare; if MessageDLG('Ist das Statement ' +#13#13 + FDQry.Text + #13 'so korrekt?',mtConfirmation,[mbYes,mbNo],0) = mrYes then FDQry.ExecSQL; Zumindest suggeriert die Hilfe, dass das in etwa so funktionieren könnte. |
AW: SQL Statement mit Parametern mit den eigentlichen Werten anzeigen
Zitat:
Das ist einfach zu einfach! :-D:-D:-D Im Ernst: Ich hab das grad getestet. Zu ca. 70% scheint das zu funktionieren! :thumb: Es gibt aber auch viele Werte wo dann nur ein "?" drin steht. U.a. auch dann wenn es kein Parameter ist sondern ein direkt zugewiesener Wert. Warum das so ist hat sich mir noch nicht erschlossen. |
AW: SQL Statement mit Parametern mit den eigentlichen Werten anzeigen
Zitat:
Zitat:
|
AW: SQL Statement mit Parametern mit den eigentlichen Werten anzeigen
Habe mir das nun am PC angeschaut.
Mein Post #7 war voreilig entstanden, da hatte ich mich nur mit meinem Tablet auf meinen PC verbunden und einen oberflächlichen Test gemacht. Der Vorschlag von Delphi.Narium mit Verwendung von FDQry.Text hilft leider nicht (auch wenn sich die Hilfe da so deuten lässt). Fazit: 1. Ich hab es nun so verstanden, dass bei Verwendung von Query-Params die den Params zugewiesenen Werte *nicht* in *einem* SQL-Statement direkt darstellen lassen 2. Durch Nutzung von FDMonitor (siehe Post #3 von Uwe) ist es möglich an die Werte ran zukommen. Aber auch hier nicht direkt im dargestellten SQL-Statement sondern in einer späterer Auflistung der Parameter-Werte. Die sehen dann z.B. so aus:
Code:
Param [N=1, Name="RecID_A4", Mode=INPUT, Type=SLONG, Size=0, Len=4, Data(0)=36]
Das Tracing ist einfach zu handhaben und hilft mir auch noch anderen Stellen weiter! |
AW: SQL Statement mit Parametern mit den eigentlichen Werten anzeigen
Zitat:
Beim Ausführen werden nur noch die Parameter an den Server gesendet und können sofort für die vorbereitete Abfrage verwendet werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:12 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 by Thomas Breitkreuz