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é 3980 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)
* 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