ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Définition et utilisation de procédures Transact SQL (SQL SERVER) dans un programme VFP   



L'auteur

Thierry
France France
Membre Simple
# 0000000016
enregistré le 13/10/2004

53 ans
PERRETIER Thierry
92800 PUTEAUX
Fiche personnelle


Note des membres
pas de note

Contributions > 07 - SQL

Définition et utilisation de procédures Transact SQL (SQL SERVER) dans un programme VFP
# 0000000026
ajouté le 21/10/2004 21:58:39 et modifié le 20/01/2005
consulté 13431 fois
Niveau initié

Version(s) Foxpro :
VFP 9.0
VFP 8.0
VFP 7.0

Description

Le code source ci-joint est un exemple d'utilisation en VFP d'une base de données SQL Server.

- Déclaration d'une procédure stockée temporaire directement dans le programme Foxpro.

Les objets temporaires locaux sont nommés avec un préfixe # et ne sont visibles que de la session utilisateur.

- Appel de cette procédure avec passage de paramètres par valeur et référence.

Le symbole ? permet le passage de variables(ou d'expressions) à la procédure. les symboles ?@ précisent le passage par référence d'une variable.

MODIFIE le 20/1/2005 :

- Réinitialisation dans le SCAN  des variables total et nom
- La syntaxe {call ...} semble préférable au vu des commandes SQL générées par ODBC.  De plus, elle fonctionne également avec d'autres SGBD que SQL Server (car c'est un standard ODBC)

Code source :
*
LOCAL hsql, csql, total, nom

* Connexion

hSql= SQLSTRINGCONNECT("DRIVER=SQL Server;SERVER=(local);DATABASE=Northwind;UID=sa;pwd=")
SQLSETPROP(hSql,"DispWarnings",.t.)

* Création d'une procédure temporaire sur SQL SERVER

TEXT TO cSql NOSHOW
    CREATE PROCEDURE #Factures
        @CustomerId Char(5), @total money OUTPUT, @nom VarChar(40) OUTPUT
    AS
    DECLARE @facture table (orderID INT, OrderDate datetime, freight money)
    INSERT INTO @facture
        SELECT orderid, OrderDate, Freight
             FROM orders
             WHERE CustomerID=@CustomerID
             ORDER by OrderId
    SELECT @total=SUM(freight) FROM @facture
    IF @total is null
        SET @total =0
    SELECT @nom = CompanyName from customers where CustomerId=@CustomerID
    IF @@ROWCOUNT=0
        SET @nom = ''
    SELECT * FROM @facture
ENDTEXT
IF SQLEXEC(hsql,csql)< 0
    CANCEL
ENDIF

* Requêtes

CREATE CURSOR clients (CustomerId c(5))
INSERT INTO clients VALUES ("ALFKI")
INSERT INTO clients VALUES ("ANATR")
*cSql= [EXECUTE #Factures ?clients.CustomerID, ?@m.total, ?@m.nom]
cSql= [{call #Factures(?clients.CustomerID, ?@m.total, ?@m.nom)}]
SCAN
    Total = 0
    Nom = ""
    SQLEXEC(hsql,cSql , "Factures")
    BROWSE TITLE m.nom + " : "TRANSFORM(m.total)
ENDSCAN

SQLDISCONNECT(hsql)

Commentaires
le 01/12/2012, profox winner a écrit :
Merci Thierry, t'es un ange

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3