|
|
Re: =?UTF-8?Q?Re: SQL-DB Lesen =c3=bcber ODBC-Treiber- #23695 in section [741081] |
Sec: |
(1) Allgemeines |
Von: |
Matthias Kahlert |
An: |
Hans-Peter Grözinger |
Am/Um: |
21.02.2018 02:05:03 gelesen |
--from Newsreader at Mittwoch, 21. Februar 2018; 02:05:03-- Am 15.02.2018 um 19:01 schrieb Hans-Peter Gr�zinger: > So ganz habe ich das ganze Szenario noch nicht verstanden > > Wie muss denn der SQL-SELECT auf VFP-Seite genau aussehen? > Beispiel: > *-- Kurzzeichen des Benutzers. > lcUser = 'HPG' > lcSQLSelect = 'SELECT VorName, Name FROM tabBenutzer WHERE KurzZeichen = > ?lcUser' > > Ich lasse dann ausführen: > lnResult = SQLEXEC( lnConnection, lcSQLSelect, 'cursResult' ) > > Was passiert denn jetzt bei dem SQLEXEC genau? > > Wandelt der ODBC-Treiber oder die VFP-Funktion SQLEXEC den SELECT noch > um weil ein ? im SELECT steht in: > DECLARE @KurzZeichen CHAR(3) = N'HPG'; > SELECT VorName, Name FROM tabBenutzer WHERE KurzZeichen = @KurzZeichen'; > > Es wäre hilfreich mir hier noch etwas aufs Pferd zu helfen, im > Steigbügel stehe ich schon mal Wenn du die SQL-Server Vollversion installiert hast, findest Du im SSMS im Menü Extras --> SQL Server Profiler. Mit dem Profiler kannst Du quasi die komplette Kommunikation zwischen Server und Client/Applikation mitlesen. Der siehst Du, welche SQL Befehle durchlaufen, wie viel CPU-Zeit die jeweils gebraucht haben, wie viele Reads und Writes, und Du siehst eben auch die echt abgeschickten SQL-Befehl. Aus Deinem Beispiel wird dann sowas wie: exec sp_executesql N'SELECT VorName, Name FROM tabBenutzer WHERE KurzZeichen = @P1 ',N'@P1 varchar(3)','HPG' Er ruft also in Wahrheit eine StoredProcedure auf, an die der SQL-Befehl übergeben wird. Der Parameter wird in ein @P1 umgewandelt, und separat übergeben. Wenn sich also der Parameter ändert, bleibt der SQL-Befehl identisch. Im VFP gibt es statt dem SQLEXEC() übrigens auch noch den SQLPREPARE(), der das SQL-Kommando compiliert ohne es auszuführen, und dann erst mittels SQLEXEC() ausführt (wobei da der Befehl nicht mehr angegeben werden muss). Bei Schleifendurchläufen kann man damit also einfach optimieren. Zum Beispiel: SQLPREPARE(lnHandle, "INSERT INTO tabelle ( test ) VALUES ( ?lnI )") FOR lnI = 1 TO 1000 SQLEXEC(lnHandle) ENDFOR Tipp: Mit dem SQL Profiler kann man auch "Fremdprogramme" mitlesen, was die im SQL Server so machen! Damit kann sogar das SQL Server Management Studio mitlesen, was der im Hintergrund für SQL Befehle absetzt, wenn man beispielsweise ein DB-Backup macht oder Optionen verändert. -- Matthias
|
|
|
|