deutschsprachige FoxPro User Group
Forum View
Home
  
  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



Harro Schippan   08.02.2018 16:48
Thomas Geissler  08.02.2018 17:48
Harro Schippan  09.02.2018 09:32
Tom Knauf  09.02.2018 09:36
Matthias Kahlert  14.02.2018 23:13
Harro Schippan  15.02.2018 07:41
Jens Brand  15.02.2018 09:00
Harro Schippan  15.02.2018 11:22
Hans-Peter Grözinger  15.02.2018 12:35
Tom Knauf  15.02.2018 18:02
Hans-Peter Grözinger  15.02.2018 19:01
Harro Schippan  16.02.2018 08:54
Matthias Kahlert  21.02.2018 02:05
Tom Knauf  16.02.2018 16:11
Matthias Kahlert  21.02.2018 02:10
  
zurück zum Forum