Page soumise par Firetox
MSSQL4WD |
Dernière version
Télécharger la dernière version : MSSQL4WD
English version by david Egan : http://www.expresslanepos.com.au/downloads/mssql4wdeng.zip
(voir dans download pour les informations sur les changements)
Compatibilité : SQLManagerX
Introduction
Ce projet permet un accès à la bases de données SQLserver au travers de la couche ADO de Microsoft. Il est composé d'une fenêtre de test, d'une classe et d'une DLL.
L'accès encapsule la librairie ADO de Carlos Antollini (A set of ADO Classes - version 2.20). Les sources de la DLL sont donnés.
Principe
La DLL fournit se base essentiellement sur l' éléments suivants :
- ADO (ActiveX Data Objects)
Cet objet repose sur les APIs OLEDB. Certaines fonctionnalités de ADO ne sont pas supportées par toutes les bases car elles dépendent du fournisseur (provider) OLEDB.
Compléments
Pour utiliser la DLL il est nécessaire :
d'avoir le MDAC version 2.6,
d'avoir installer le provider OLE DB correspondant a SQLserver
un server SQLServer disponible
exemple de connexion :
v_retCode = MSSQL:mySQLConnecte("Provider=SQLOLEDB;server=192.6.1.231;UID=root;PWD=fred;database=Mabase;")
Particularites
Blocage : le blocage a la ligne comprend deux parametres :
timeOut : permettant de modifier le temps d'attente avec d'avoir un retourLockSelect : permet de specifier si on veut que le select des autres utilisateur soit bloque ou simplement les update. c'est a dire que si un autre utilisateur demande a bloque la meme ligne le serveur le bloquera au moment du select ou au moment de l'update.
ATTENTION si un utilisateur utilise ce parametre a vrai , le blocage fait avec vrai seront bloque au niveau select, sinon c'est l'update qui renverra le blocage
Clause LIMIT : l'acces natif accepte les requetes de la forme select * from matable LIMT 2,5 pour avoir une navigation par page c'est parfois tres utile. nous avons repris la syntaxe MySQL.
les MEMOS : SQLserver par ADO demande une gestion particuliere des blobs et memos binaire ou photo
pour envoyer un memov_retCode = MSSQL:MySQLAttacheMemo(0,fichier_logo,"logo")
v_retCode = MSSQL:mySQLFlushMemo(0,"mesBlobs"," id=1")la premier ligne sert a lier le memo a un fihier ensuite avec la deuxieme ligne on l'envoie dans la base le deuxieme parametre etant le where pour identifier la ligne (ici id=1)
pour lire un memo de la base
MSSQL:mySQLExec("select logo from mesblobs where id=1",0)
SI MSSQL:mySQLFetch(0) ALORS
MSSQL:mySQLLitMemo(0,1,_Logo1)
//logo1 est le nom du champs image dans la fenetre windev
FINProcedures Stockées
Exmple de PROCEDURE stockela classe a des constantes pour gerer les procedure stockees :
Create Procedure sp_OutputTest
@IN1 decimal(15,4),
@OutInt int Output,
@OutChar varchar(20)Output,
@OutDecimal decimal(15,5)OutPut
As
SELECT @OutChar = 'HelloWorld'
SELECT @OutInt = 10 *@IN1
SELECT @OutDecimal = @IN1*2.5
RETURN(90)
GO
// type de parametre IN /OUT
BIN parametre en entree
BOUT parametre en sortie
// type des variables entier chaine, double ou date
BINTEGER parametre de type entier
BCHAR parametre de type chaine
BLONG parametre de type long
BDOUBLE parametre de type double, ou decimal
BDATE parametre de type date
FONCTION mySQLDefBind(p_num, p_nom , p_sens , p_type, p_valeur="", p_longueur)// il faut repsecterl'ordre des parametres pour definir les defBind
// chaque parametre dans l'ordre de leurdefinition dans la procedure
// p_type : voir les constantes pour caBINTERGER,BC§HAR,BDATE,BDOUBLE, etc
// p_sens : IN - OUT
FONCTION mySQLGetBind(p_indice,p_resultat)// recuperation des parametresenvoyé a la procedure apres son execuion
// indice du parametre : 1 à N comme definit dansle DefBind 1 etant le premier etc ...
// ATTENTION si la procedure renvoie unresultat le 1 est le resultat de la procedure
// p_resultat : chaine recevant leresultat
// exmple de procedure stockee
// CREATE Procedure sp_OutputTest
// @IN1 decimal(15,4),
// @OutInt int Output,
// @OutChar varchar(20)Output,
// @OutDecimal decimal(15,5)OutPut,
// @outDate datetime output
// As
// SELECT @OutChar = 'HelloWorld'
// SELECT @OutInt = 10 *@IN1
// SELECT @OutDecimal = @IN1*2.5
// SELECT @outDate = getdate()
// RETURN(90)
// GO
//
// appel de parametre
// il faut repsecter l'ordre des parametre pour definir les defBind
// chaque parametre dans l'ordre de leur definition dans la procedure
// premier parametre : @IN1
MSSQL:mySQLDefBind(1,"@IN1",MSSQL:BIN,MSSQL:BDOUBLE,40.5676)
// deuxieme parametre : en entree / sortie entier
MSSQL:mySQLDefBind(2,"@outInt",MSSQL:BOUT,MSSQL:BINTEGER)
// troisieme parametre en entee sortie mais chaine
MSSQL:mySQLDefBind(3,"@OutChar",MSSQL:BOUT,MSSQL:BCHAR)
// 4 em parametre en entee sortie mais chaine
MSSQL:mySQLDefBind(4,"@outDecimal",MSSQL:BOUT,MSSQL:BDOUBLE)
// 5 em parametre en entee sortie mais chaine
MSSQL:mySQLDefBind(5,"@outDate",MSSQL:BOUT,MSSQL:BDATE)
IF (MSSQL:MySQLExecPS("sp_OutputTest")) THEN
// recuperation des resultats dans l'exemple on recupere tout
// le resultat de la procedure
MSSQL:mySQLGetBind(0,v_reponse)
Trace(v_reponse)
// le premier parametre envoye
MSSQL:mySQLGetBind(1,v_reponse)
Trace(v_reponse)
// le deuxieme parametre envoye
MSSQL:mySQLGetBind(2,v_reponse)
Trace(v_reponse)
// le troisieme parametres
MSSQL:mySQLGetBind(3,v_reponse)
Trace(v_reponse)
// le quatrieme parametres
MSSQL:mySQLGetBind(4,v_reponse)
Trace(v_reponse)
ELSE
Erreur(MSSQL:mySQLGetErrorMessage())
END
Le projet exemple a ete teste sur un serveur SQLServer 2005 et contient les nouvelles mise a jours
n'hesitez pas a nous contacter si vous avez des problemes
Page soumise par Firetox















