Vous recherchez un accès [alter]natif ?

Téléchargez ici le ou les accès [alter]natif(s) dont vous avez besoin parmi nos 10 accès disponibles : PHP4WD, ADO4WD, DB24WD, FireBird4WD, HF4WD, MSSQL4WD, OTL4WD, SQLite4WD, MySQL4WD, PostGreSQL4WD.

Vous trouverez pour chacun de ces accès une partie explicative, des exemples d’utilisation et les informations nécessaire afin de vous connecter la base de votre choix.

+ d'infos

dataXmaster est une sollution conçue pour extraire, synchroniser et transformer vos données sans développement.

Pour nous aider a maintenir toute la partie gratuite de SQLManagerX qui reste l'occupation principale de ses membres.

Cette chaine a été créer afin d’illustrer par des vidéos les différents accès que nous mettons à disposition sur ce site.

SQLManagerX Pro est là pour offrir aux professionnels un ensemble prestations (développements, formations, audits...)

Les accès [alter]natifs sont le lien entre les accès de bas niveau de l’éditeur SGBD et votre application WinDev.

Si vous utilisez SQLManagerX et/ou les accès [alter]natifs, vous pouvez faire partie de nos références !

Vous êtes convaincu des bienfaits de SQLManagerX pour votre projet ? Il ne vous reste plus qu'à l'utiliser.

Vous souhaitez un peu d'aide pour mieux démarrer avec SQLManagerX ? Guides et exemples sont là pour vous.

SQLManagerX en Bref

Ce site est un espace non officiel consacré au développement SQL sous WinDev.
Notre solution, SQLManagerX, est entièrement gratuite et accessible aux développeurs internautes.

Vous pouvez télécharger SQLManagerX ici

Ci-dessous, l'ensemble des accès [alter]natifs

Lien de téléchargement

PHP4WX 9.2.0.4 WinDev et WinDev Mobile 19 et supérieurs

PHP4WX en vidéo

Vidéo PHP4WD

Vidéo PHP4WM

https://www.youtube.com/channel/UCRCQH7SEudK1duTH7mIauuA

Guide PDF

Un fichier PDF aidant à la prise en main de l’accès natif PHP4WD est disponible ici. Dans ce document sont référencés les principaux cas de figure pour mieux comprendre son fonctionnement et débuter avec PHP4WD.

Téléchargez ici le guide de l’utilisateur PHP4WD en format PDF.

Informations

PHP4WX est une version compatible WinDev, WinDev Mobile et WebDev.

PHP4WX permet à WinDev Mobile de se connecter à n’importe quelle base de données accessible par PHP.

Les scripts de PHP4WX permettent l’accès a aux base en ADO ou ODBC, ce qui offre a un Android ou iOS la liberté d'accéder par exemple à une base Access.

PHP4WX possède les accès PDO mysql, PDO SQLserver et MySQLi. Le script détectera automatiquement le moteur mySQL de PHP attendu. Il utilisera dans l’ordre : mysql, mysqli et PDOMysqli.

PHP4WX permet un accès à toutes les bases de données se trouvant sur un serveur HTTP et pour laquelle il existe un connecteur PHP disponible et installé.

PHP4WX est composé d'une fenêtre de test, d'une classe et de 2 scripts PHP.

Cette version est maintenue et compatible avec les langues Arabe, Chinois, Japonais et autres UTF8. Attention néanmoins, les chaines ne sont pas toujours renvoyées correctement depuis IE ou Firefox avec les versions WinDev et WinDev Mobile inférieurs à 21.

Afin de séparer les colonnes dans le résultat, et afin d’éviter tout risque de confusion avec un texte, une image ou du code html, le séparateur utilisé est "PHP4WDSEP".

Deux méthodes transforment les exec en Oracle et SQLserver, permettant l’écriture de requêtes avec LIMIT comme sous mySQL. Le but est d’obtenir un code identique sous les différentes bases. PHP4WX offre l’écriture de requêtes avec LIMIT sur toutes les bases accessibles.

Ce projet contient une fenêtre présentant les différentes possibilités de l'accès ainsi que la manière de d’effectuer une requête ou d’afficher table.

Attention : les scripts et la classe doivent avoir tous le même numéro de version. Si tel n'est pas le cas, contactez-nous (un lien ne doit pas être a jour).

L’utilité de PHP4WD n’est plus à démontrer dans le cadre d’accès aux bases de données sur les sites Internet pour lesquels les bases sont accessibles uniquement à partir du site WEB. La puissance de PHP4WD est décuplée dans le cadre d’utilisation d’application sur une architecture type WEB.

L’accès universel

Le concept d’accès universel, créé dans le cadre de PHP4WD repose sur 4 axes majeurs :

  • L'universalité de l'accès : accès unique pour toutes les bases de données accessibles sous PHP
  • La sécurité
  • La rapidité
  • La portabilité

L'objectif de l'accès universel est de conserver un code commun pour le développeur de l'application lorsqu'il travaille avec PHP4WD. Nous indiquons le "typeBase" et l'accès fait ensuite le nécessaire (Mysql, Postgresql, SQLite, Firebird, MSQL, Oracle). Les scripts PHP se chargeant avec le "typeBase" de lancer les fonctions PHP adéquates sur la base.

C'est pour obtenir un accès fonctionnel sans avoir besoin de prendre en compte la moindre spécificité de l'environnement que nous n'avons fait aucune DLL. Cet accès fonctionne sans aucune adaptation que ce soit sur une application développée avec WinDevMobile ou WinDev.

La sécurité repose sur les services standards et éprouvés que sont HTTP et HTTPS. Par défaut, l’ensemble des échanges est crypté dans les sens client-serveur et serveur-client (l’algorithme utilisé permet de crypter jusqu'a 128 bits). L'industrialisation des méthodes retenues permettra d'intégrer les applications développées dans des systèmes globaux d'information sans ajout de services spécifiques.

Avoir un accès universel sécurisé et portable est souvent synonyme de lenteur. Différents points de congestion concernant la rapidité ont été étudiés :

  • le client
  • le réseau
  • le serveur

Les points limitant étant le réseau en terme de capacité et bien sûr le serveur, différentes alternatives ont été testées et une augmentation de vitesse d'un facteur 60 a été réalisée (temps initial 1,26 minute pour atteindre 1,28 seconde afin de récupérer 160 fiches clients sur un PocketPC).

PHP4WD étant compatible MySQL, SQLite, postGreSQL, SQLServer, Firebird et Oracle, nous vous laissons entrevoir ses possibilités.

Les avantages de PHP4WX

  • Accès à la base gérée au niveau du serveur HTTP/PHP (connexion, déconnexion en fonction de l’activité...).
  • Sécurisation des données par l’utilisation du protocole HTTPS.
  • Fonctionnement des applications en mode Wifi/Bluetooth.
  • Fonctionnement des applications sur le réseau Internet ou Intranet.
  • Accès indépendant de la base.
  • WinDev Mobile peut profiter du même accès que WinDev pour accéder à toutes les bases sur le serveur.

Utiliser PHP4WD, c’est faire du client riche sur une architecture WEB tout en conservant ses habitudes de programmation sur WinDev.

Principe

Le fonctionnement est assez simple. Il reprend le principe de l'accès natif mySQL puisque depuis WinDev, la classe possède les même méthodes. La classe envoie les requêtes cryptées par une clé publique et privée au script PHP se trouvant sur le site web permettant l'accès a la base MySQL. Le script exécute la requête, récupère le résultat et le transmet au programme WinDev par HTTP. La classe du programme WinDev lit le résultat et le conserve en mémoire (ce que font les DLL des accès natif). La classe Php4Wd gère ensuite ce résultat. La clé publique est celle qui sert pour l'élaboration de la clé privée et qui permet le cryptage et le décryptage. Les requêtes sont envoyées cryptées ainsi que le résultat renvoyé par le script PHP. Ne transitent ainsi sur le réseau que des chaines cryptées, offrant une sécurité maximum sur les données envoyées et reçues. Les clés n'étant pas envoyées sur le réseau, le décryptage des chaines transitant entre le programme WinDev et le script PHP est rendu impossible.

Pré-requis : La classe K_PUBLIC_KEY possède une constante modifiable (attention, les 2 scripts possèdent la même public key).

Intégrer PHP4WX à son projet

  1. Ouvrez le fichier connect.php et modifiez les informations de connexion
  2. Placez les 2 fichiers sur votre site internet (pensez à éditer le php4wd.php si vous changez le chemin du fichier connect.php, par exemple dans un répertoire privé).
  3. Intégrez la classe php4WD dans votre projet. Elle se présente comme un accès natif et dispose les mêmes méthodes.
  4. Pensez à modifier les clés publiques.

Remarque : La méthode connect attend une adresse URL. Par exemple : convSQL:mySQLConnecte("http://www.monsite.com/php4wd.php"). C'est l'adresse du script PHP.

Utilisation

Pour utiliser cet accès, il vous suffit d’intégrer la classe dans votre projet.

Les scripts de cette nouvelle version ont été modifiés afin de récupérer le fonctionnement de cryptRetour et Zip.

Seuls 2 fichiers subsistent : php4wd.php et connect.php. La fonction zip étant maintenant incluse dans PHP, la présence d’un fichier include supplémentaire n’est plus nécessaire.

Pour les utilisateurs de Windev Mobile 19, les erreurs sur la sur la méthode mySQLTable devront être mises en commentaire. À partir de la version 20, Windev sachant gérer les tables, cette opération n’est plus nécessaire.

Pour les utilisateurs ADO ou ODBC :

Dans Windev, il existe un membre typeBaseADO nécessitant d’être positionné selon le type de base (ex. pour un accès SQLServer par ADO : typeBase = "ADO" : TypeBaseADO = "MSSQL").

Afin de vous connecter, vous devez spécifier la Base : mySQLConnecte("www.SQLManagerX.com/php4wd.php","","","maBase")

Connexion

Ci-dessous, un exemple d’appel de procédure sous Oracle :

i est un entier
v_res est une chaîne

// procédure avec 1 paramètre en entrée et 3 en sortie

CONVSQL:mysqlCloseBind()
CONVSQL:MySQLDefBind(1, "TESTPIN", CONVSQL:PS_VARIN, CONVSQL:PS_TYPEINTEGER,20)
CONVSQL:MySQLDefBind(2, "TESTCHA", CONVSQL:PS_VAROUT, CONVSQL:PS_TYPECHAINE)
CONVSQL:MySQLDefBind(3, "TESTINT", CONVSQL:PS_VAROUT, CONVSQL:PS_TYPEINTEGER)
CONVSQL:MySQLDefBind(4, "TESTDAT", CONVSQL:PS_VAROUT, CONVSQL:PS_TYPECHAINE)
CONVSQL:MySQLDefBind(5, "TESTDBL", CONVSQL:PS_VAROUT, CONVSQL:PS_TYPEDOUBLE)

SI CONVSQL:MySQLExec("TESTPS(:TESTPIN, :TESTCHA, :TESTINT, :TESTDAT, :TESTDBL)", 1) ALORS

// récupération des paramètres envoyés
POUR i=2 A 5
CONVSQL:mySQLGetBind(i,v_res)
Trace(v_res)
FIN

// récupération du recordSet renvoyé par la procédure s’il y en a un
CONVSQL:mySQLPremier(1)
TANTQUE PAS CONVSQL:mySQLendehors
Trace(CONVSQL:MySQLLitLigne(1))
CONVSQL:mySQLSuivant(1)
FIN
FIN
CONVSQL:mysqlferme(1)
CONVSQL:mysqlCloseBind()

Ci-dessous, un exemple d’appel de procédure sous SQLServer :

v_reponse est une chaîne
i est un entier

CONVSQL:MySQLCloseBind()

//premier paramètre : @IN1
CONVSQL:mySQLDefBind(1, "@sval", CONVSQL:PS_VARINOUT, CONVSQL:PS_TYPECHAINE, "Franck")

// deuxième paramètre en entrée/sortie entier
CONVSQL:mySQLDefBind(2, "@intval", CONVSQL:PS_VARINOUT, CONVSQL:PS_TYPEINTEGER, 50)

// troisième paramètre en entée/sortie mais chaine
CONVSQL:mySQLDefBind(3, "@floatval", CONVSQL:PS_VARINOUT, CONVSQL:PS_TYPEDOUBLE ,2.1416)

v_req est une chaîne

v_req += "TestPSSQLServer"

IF(CONVSQL:MySQLExecPS(v_req,1)) THEN

// récupération des paramètres envoyés
CONVSQL:mySQLGetBind(1,v_reponse)
Trace(v_reponse)
CONVSQL:mySQLGetBind(2,v_reponse)
Trace(v_reponse)
CONVSQL:mySQLGetBind(3,v_reponse)
Trace(v_reponse)

// récupération du recordSet renvoyé par la procédure si il y en a un
CONVSQL:mySQLPremier(1)
TANTQUE PAS CONVSQL:mySQLendehors
Trace(CONVSQL:MySQLLitLigne(1))
CONVSQL:mySQLSuivant(1)
FIN
ELSE
Erreur(CONVSQL:mySQLGetErrorMessage())
END
CONVSQL:MySQLCloseBind()
CONVSQL:mySQLFerme(1)

Les membres

Les membres sont normalement cumulables. La simplification de la méthode mySQLExec permet de gérer chacun des membres de manière simple dans le code et de façon quasi autonome. Au final, les 4 membres dataHexa, modeUTF8, MethodeZip et CryptRetour permettent de gérer au mieux les différents retours ou config du script.

Membres Fonction
typeBaseADO pour identifier la base si on passe par un accès ADO ou ODBC
dataHexa pour activer ou désactiver le retour en hexa
modeUTF8 vrai ou faux pour activer ou désactiver le retour en UTF8
MethodeZip retour en zip ou non
CryptRetour Crypte les données au retour
alphabet Membre global changeable à la volée (pour la classe et surtout la méthode mySQLExec, il suffit de positionner le membre comme dans cet exemple : MonAcces:alphabet = AlphabetAnsi)

Lien de téléchargement

Téléchargez la dernière version : ADO4WD 3.0.0.1

Présentation

Vous souhaitez accéder à une base de données mais aucun accès natifs n’existe ?

Vous voulez faire un test rapide d'accès à une base de données existante ?

Vous voulez un code unique quelque soit la base de données ?

ADO4WD est fait pour vous !

Informations

ADO4WD est compatible SQLManagerX et c_GestionSQL (gestion des Blobs incluse).

Ce projet offre un accès à toutes les bases de données (disposant d’un driver OSBC) au travers de la couche ADO de Microsoft.

ADO4WD 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. Les sources de la DLL sont disponibles gratuitement.

Principe

La DLL fournie se base essentiellement sur l’élément ADO (ActiveX Data Objects). Cet objet repose sur les APIs OLEDB. Attention : certaines fonctionnalités de ADO ne sont pas supportées par toutes les bases car elles dépendent du fournisseur (provider) OLEDB.

Utilisation

Pour utiliser la DLL, il est nécessaire :

  • d’avoir le MDAC version 2.6
  • d’avoir installé le provider OLE DB correspondant à la base de données utilisée

Exemple : pour utiliser la DLL avec une base MySQL, il sera nécessaire d’avoir au préalable téléchargé le driver "MyOLEDB Provider v3.0" de MySQL.

Connexion

Exemples de multi-connexions sur Access :

ADO4WD est un c_ADO4WD
ADO2WD est un c_ADO4WD(2)

v_retCode is boolean

v_retCode = ADO4WD:mySQLConnecte("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:EssaiAccess.mdb;Persist Security Info=False")
v_retCode = ADO2WD:mySQLConnecte("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:Northwind.mdb;Persist Security Info=False")

IF (pas v_retCode) THEN
Erreur("Impossible de se connecter à la base de donnée 'test'.", ADO4WD:mySQLGetErrorMessage())
END

SI ADO4WD:mySQLExec("Select * from client",1) ALORS
ADO4WD:mySQLPremier(1)
TANTQUE PAS ADO4WD:mySQLEnDehors
Trace(ADO4WD:mySQLLitCol(1,1))
ADO4WD:mySQLSuivant(1)
FIN
FIN
ADO2WD:mySQLFerme(1)

Trace(" --------------------------------------------------------------")

SI ADO2WD:mySQLExec("Select * from asset",1) ALORS
ADO2WD:mySQLPremier(1)
TANTQUE PAS ADO2WD:mySQLEnDehors
Trace(ADO2WD:mySQLLitCol(1,1))
ADO2WD:mySQLSuivant(1)
FIN
FIN
ADO2WD:mySQLFerme(1)


Lien de téléchargement

Téléchargez DB24WD 1.0.1

Informations

Ce projet permet un accès natif à la base de données DB2. Il est composé d'une fenêtre de test, d'une classe et d'une DLL.

DB24WD est entièrement open-source (classe et dll). Il encapsule la librairie OTL de Sergei Kuchin.

Le kit de développement DB2 est basé sur les CLI ().

La librairie OTL

OTL pour "Oracle, Odbc and DB2-CLI Template Library" (Copyright © 1996, 2005) est une librairie C. Cette librairie est constituée d’un unique fichier .h de près de 22000 lignes écrites par Sergei Kuchin. Elle permet, depuis la même source C, d’obtenir les 8 modes d’accès suivants :

  • ODBC
  • MySQL par MyODBC
  • DB2 CLI
  • Oracle 7
  • Oracle 8
  • Oracle 8i
  • Oracle 9i
  • Oracle 10g

Extrait du site de l’auteur : "The current version of the OTL supports Oracle 7 (natively via OCI7), Oracle 8 (natively via OCI8), Oracle 8i (natively via OCI8i), Oracle 9i (natively via OCI9i), Oracle 10g (natively via OCI10g), DB2 (natively via DB2 CLI), ODBC 3.x as well as ODBC 2.5 compliant data sources in MS Windows and Unix (e.g. Oracle, MS SQL Server, Sybase, MySQL, DB2, Interbase / Firebird, PostgreSQL, SQLite, etc.). The list of supported database backends is constantly growing."

Tout l'intérêt de cette librairie est démontrée !

Pour rappel, l’entête de la librairie OTL utilisée :

// ==============================================================
// Oracle, ODBC and DB2/CLI Template Library, Version 4.0.106,
// Copyright (C) Sergei Kuchin, 1996,2005
// Author: Sergei Kuchin
// This library is free software. Permission to use, copy,
// modify and redistribute it for any purpose is hereby granted
// without fee, provided that the above copyright notice appear
// in all copies.
// ==============================================================

Les types de données supportées par OTL4WD

  • NUMBER (entier et monétaire)
  • CHAR (chaine de caractères de type asciiz)
  • TEXT (chaine de caractères de type asciiz correspondant au type LONG de Oracle).
  • DATE au format JJ/MM/AAAA HH:mm:SS. Ce format est défini au moment de la compilation, il est donc statique dans cette version.
  • BLOB (binaire et texte)

Lien de téléchargement

Téléchargez la dernière version : FB4WD 2.1.4

Informations

FireBird4WD est compatible SQLManagerX et SQLManagerXConverter

FireBird4WD apparait comme étant la suite d’InterBase.

La DLL se base sur le client IBPP (IBPP, A C++ client interface for Firebird Server & InterBase®). IBPP est une couche écrite en C++ permettant de communiquer de manière simple avec un serveur Firebird ou InterBase.

Les avantages de FireBird4WD sont les suivants :

  • l’install est inférieur à 4Mo
  • l’installation sous Windows se fait très simplement

Les développements de l’accès natif ont été simplifiés grâce à une documentation sur les API C très complète (400 pages).

Merci à notre testeur anonyme qui se reconnaitra et qui nous permet de toujours vous présenter une version aboutie.

Quelques liens

Le site de FireBird est ici : Firebird™ - Relational Database

Vous trouverez ici un programme vous permettant de gérer les bases de données gratuitement : < a target="blank" href=" http://ibexpert.net/ibe/">http://ibexpert.net/ibe/

Utilisation

Une fois Firebird installé, les login et mot de passe par défaut sont SYSDBA et MASTERKEY

Lancer un script :

Se placer dans le répertoire BIN de Firebird

isql -i monscript.sql

Modifier une colonne :

ALTER TABLE MaTable ALTER COLUMN MaColonne TYPE VARCHAR (80)
ALTER TABLE correspondant ALTER COLUMN cor_politesse TYPE VARCHAR (115)

Ajouter une colonne :

ALTER TABLE ma_table ADD ma_colonne varchar(xx), BLOB SUB_TYPE 1 SEGMENT SIZE 4096 etc...

Renommer une colonne :

ALTER TABLE ma_table ALTER ma_colonne TO new_colonne

Index primaire :

ALTER TABLE LISTE_ACTE ADD CONSTRAINT PK_LISTE_ACTE PRIMARY KEY (LST_ACT_ACTE);

Index secondaire :

CREATE INDEX liste_acte_IDX1 ON liste_acte (lst_act_categorie);

Sup index primaire :

alter table liste_acte drop constraint PK_LISTE_ACTE;

Exemple de connexion et requête :

connect localhost:d:ma_base.fdb user 'SYSDBA' password 'masterkey';SET SQL DIALECT 3;
SET NAMES NONE;
alter table SOCIETE drop constraint PK_SOCIETE;
alter table societe alter num_compte type varchar(15);
ALTER TABLE SOCIETE ADD CONSTRAINT PK_num_compte PRIMARY KEY (num_compte);
alter table SOCIETE add soc_type varchar(60);
alter table SOCIETE add soc_cmt BLOB SUB_TYPE 1 SEGMENT SIZE 2048;
CREATE INDEX SOCIETE_IDX1 ON SOCIETE (soc_type);
:commit;

Exemple en vue de créer un Trigger AutoInc :

connect localhost:test user 'SYSDBA' password 'masterkey';
SET SQL DIALECT 3;
SET NAMES NONE;
CREATE TABLE CLIENT (
ID_CLIENT
INTEGER NOT NULL,
CLI_DATE_CREATION
DATE,
CLI_CMT
BLOB SUB_TYPE 1 SEGMENT SIZE 2048
);
ALTER TABLE LIEN ADD CONSTRAINT PK_CLIENT PRIMARY KEY (ID_CLIENT);
CREATE GENERATOR GEN_ID_CLIENT;
SET TERM ^ ;
CREATE TRIGGER TRI_CLIENT FOR CLIENTACTIVE BEFORE INSERT POSITION 0ASBEGIN IF (NEW.ID_CLIENT IS NULL) THEN
NEW.ID_CLIENT = GEN_ID(GEN_ID_CLIENT,1);
END^SET TERM ^ ;
:commit;

Réindexer la base :

1) "C:Program FilesFirebird ingbak.exe" -b -g -user sysdba -pas masterkey "C:ma_base.fdb" "C:sauve_base.sav"
2) gbak -r -v -user sysdba -pas masterkey c:ma_base.sav c:ma_base.fdb
pause

Les membres

Membres Fonction
myEspaceSignificatif pour retirer ou non les espaces dans une champ lu

Lien de téléchargement

Téléchargez la dernière version : HF4WD 3.0.6

Téléchargez la version compatible WinDev 12 : C_HF4WD.WDC

Téléchargez la version compatible WinDev 14 : C_HF4WD.WDC

Informations

HF4WD est compatible avec SQLManagerX et Data Center.

Il rend lui-même SQLManagerX compatible avec HyperFile.

HF4WD est composé d'une unique classe. Il a été créé pour les développeurs soucieux de commencer des développements SQLManagerX tout en utilisant HyperFile.

Connexion

mySQLConnecte utilise 3 paramètres :

  • le chemin pour le wdd
  • le chemin (répertoire) pour les fichiers
  • le mot de passe analyse

monAcces:mySQLConnect("c:monProjetmonAnalyse.wdd", "c:monProjetfic", "monMotDepasseAnalyse")

Connexion pour les versions 12 et 14 de WinDev

Les versions 12 et 14 de WinDev exigent des changements dans mySQLConnecte pour un accès a HyperFile Client/serveur.

Fonction virtuelle mySQLConnecte(p_typeConnecte=1, WDDfile="", DataPath="",user="", passwd="")

TypeConnecte 2 acces HyperFile Client / serveur
WDDFile Adresse du serveur:Port (exemple : 192.168.1.20:4900)
DataPath Chemin du fichier WDD (obligatoire pour la connexion SQL)
User Utilisateur pour la connexion au serveur
Passwd Mot de passe pour l'utilisateur de la connexion au serveur

TypeConnecte 1 acces HyperFile Standard
WDDFile Chemin du fichier WDD (analyse)
DataPath Chemin des fichiers FIC
User Non utilisé
Passwd Mot de passe pour l'analyse si l'analyse a un mot de passe

Lien de téléchargement

Téléchargez la dernière version : MSSQL4WD 3.0.2.8

Informations

MSSQL4WD est compatible SQLManagerX, c_GestionSQL (gestion des Blobs incluse).

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. Les sources de la DLL sont disponibles gratuitement.

Le nombre de paramètres maximums de procédures stockées est de 256.

La gestion des Blobs au niveau de la DLL ADO fonctionne également avec Access.

Utilisation générale

La DLL fournie se base essentiellement sur l’éléments suivant :

  • ADO (ActiveX Data Objects)

Cet objet repose sur les APIs OLEDB.

Attention : certaines fonctionnalités de ADO ne sont pas supportées par toutes les bases car dépendantes du fournisseur (provider) OLEDB.

Pour utiliser la DLL il est nécessaire d’avoir :

  • le MDAC version 2.6
  • le provider OLE DB correspondant à SQLServer installé
  • un server SQLServer disponible

clearComment :

Dans cette version, clearComment est manuelle, vous devez l'appeler afin d’enlever les commentaires dans votre requête.

Blocage :

Le blocage à la ligne comprend deux paramètres :

  • timeOut : ce paramètre permet de modifier le temps d'attente pour obtenir un retour
  • LockSelect : ce paramètre permet de spécifier pour les autres utilisateurs si le blocage doit se faire au niveau du SELECT ou simplement de l’UPDATE. Les blocages initialisés à vrai seront bloqués au niveau SELECT, sinon c'est l'UPDATE qui renverra le blocage.

Clause LIMIT :

L'accès natif accepte les requêtes de la forme select * from matable LIMT 2,5, ce qui peut être parfois très utile pour obtenir une navigation par page. Dans ce cas de figure, la syntaxe MySQL a été reprise telle quelle.

Les Memos :

SQLServer par ADO demande une gestion particulière des blobs et memos binaire ou photos.

Voici la démarche à suivre pour envoyer un memo :

v_retCode = MSSQL:MySQLAttacheMemo(0, fichier_logo, "logo")
v_retCode = MSSQL:mySQLFlushMemo(0, "mesBlobs", "id=1")

La première ligne sert à lier le memo a un fichier. La seconde ligne (dont le troisième paramètre n’est autre que le where utilisé pour identifier la ligne, ici : id=1) sert ensuite à l'envoyer dans la base.

Et voici le code nécessaire 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 fenêtre windev
FIN

Procédures Stockées :

Ci-dessous, un exemple simple de procédure stockée :

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

Afin de gérer les procédures stockées, la classe possède les constantes suivantes :

Type de paramètre IN/OUT
BIN paramètre en entrée
BOUT paramètre en sortie

Type des variables entier chaine, double ou date
BINTEGER paramètre de type entier
BCHAR paramètre de type chaine
BLONG paramètre de type long
BDOUBLE paramètre de type double, ou décimal
BDATE paramètre de type date

Pour définir defBind, l’ordre des paramètres doit être respecté comme suit :

FONCTION mySQLDefBind(p_num, p_nom, p_sens, p_type, p_valeur="", p_longueur)

p_type voir les constantes pour caBINTERGER, BC§HAR, BDATE, BDOUBLE, etc.
p_sens IN - OUT

Ci-dessous, un exemple de récupération des paramètres envoyés à la procédure après son exécution :

FONCTION mySQLGetBind(p_indice, p_resultat)

p_indice est un nombre 1 à n comme défini dans le DefBind (1 étant le premier, etc.) et où p_resultat est la chaine qui reçoit le résultat.

Attention : si la procédure renvoie un résultat, le résultat 1 sera le celui de la procédure.

Ci-dessous, un nouvel exemple de procédure stockée :

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

Ci-dessous, la description des différents paramètres (ceux-ci sont définis dans l’ordre attendu par la procédure) :

// premier paramètre : @IN1
MSSQL:mySQLDefBind(1, "@IN1", MSSQL:BIN, MSSQL:BDOUBLE, 40.5676)

// deuxième paramètre : en entrée/sortie entier
MSSQL:mySQLDefBind(2, "@outInt", MSSQL:BOUT, MSSQL:BINTEGER)

// troisième paramètre en entrée/sortie chaine
MSSQL:mySQLDefBind(3, "@OutChar", MSSQL:BOUT, MSSQL:BCHAR)

// quatrième paramètre en entrée/sortie chaine
MSSQL:mySQLDefBind(4, "@outDecimal", MSSQL:BOUT, MSSQL:BDOUBLE)

// cinquième paramètre en entrée/sortie chaine
MSSQL:mySQLDefBind(5, "@outDate", MSSQL:BOUT, MSSQL:BDATE)

IF (MSSQL:MySQLExecPS("sp_OutputTest")) THEN

// récupération des résultats (dans notre exemple, on récupère tout)

// le résultat de la procédure
MSSQL:mySQLGetBind(0, v_reponse)
Trace(v_reponse)

// le premier paramètre envoyé
MSSQL:mySQLGetBind(1, v_reponse)
Trace(v_reponse)

// le deuxième paramètre envoyé
MSSQL:mySQLGetBind(2, v_reponse)
Trace(v_reponse)

// le troisième paramètre
MSSQL:mySQLGetBind(3, v_reponse)
Trace(v_reponse)

// le quatrième paramètre
MSSQL:mySQLGetBind(4, v_reponse)
Trace(v_reponse)

ELSE
Erreur(MSSQL:mySQLGetErrorMessage())
END

Le projet exemple a été testé sur un serveur SQLServer 2005 et contient les nouvelles mises a jour. N'hésitez pas a nous contacter si vous rencontrez des problèmes.

Connexion

Il est inutile de passer par la fenêtre w_connexion. Vous pouvez, dans l'init du projet, faire :

MonAcces est un c_msSQL4WD()

La DLL sera chargée à la connexion. Si vous avez par exemple des Set a faire, cela devra être fait après la connexion :

v_retCode = MSSQL:mySQLConnecte(EDT_connectString)
MSSQL:SetDateFormat("AAAA/MM/JJ")

Exemple de connexion :

v_retCode =MSSQL:mySQLConnecte(
"Provider=SQLOLEDB;
server=192.6.1.231;
UID=root;
PWD=fred;
database=Mabase;"
)


Lien de téléchargement

Télécharger la dernière version Oracle : OTL4WD 3.0.5.0

Projet d’exemple de Thierry Jacquart, ou comment bien débuter avec OTL4WD

Informations

Ce projet permet un accès natif à la base de données Oracle. Il est composé d'une fenêtre de test, d'une classe et d'une DLL.

Cet accès natif est entièrement open-source (classe et dll). Il encapsule la librairie OTL de Sergei Kuchin.

Cet accès natif a été développé avec WinDev 7.5 pour la partie classe et Dev-C++ pour la partie DLL. Il a été testé sur une plateforme Windows XP.

Le kit de développement Oracle est basé sur les OCI8i (voir : http://www.oracle.com).

La librairie OTL

OTL pour "Oracle, Odbc and DB2-CLI Template Library" (Copyright © 1996, 2005) est une librairie C. Cette librairie est constituée d’un unique fichier .h de près de 22000 lignes écrites par Sergei Kuchin. Elle permet, depuis la même source C, d’obtenir les 8 modes d’accès suivants :

  • ODBC
  • MySQL par MyODBC
  • DB2 CLI
  • Oracle 7
  • Oracle 8
  • Oracle 8i
  • Oracle 9i
  • Oracle 10g

Extrait du site de l’auteur : "The current version of the OTL supports Oracle 7 (natively via OCI7), Oracle 8 (natively via OCI8), Oracle 8i (natively via OCI8i), Oracle 9i (natively via OCI9i), Oracle 10g (natively via OCI10g), DB2 (natively via DB2 CLI), ODBC 3.x as well as ODBC 2.5 compliant data sources in MS Windows and Unix (e.g. Oracle, MS SQL Server, Sybase, MySQL, DB2, Interbase / Firebird, PostgreSQL, SQLite, etc.). The list of supported database backends is constantly growing."

Tout l'intérêt de cette librairie est démontrée !

Pour rappel, l’entête de la librairie OTL utilisée :

// ==============================================================
// Oracle, ODBC and DB2/CLI Template Library, Version 4.0.106,
// Copyright (C) Sergei Kuchin, 1996,2005
// Author: Sergei Kuchin
// This library is free software. Permission to use, copy,
// modify and redistribute it for any purpose is hereby granted
// without fee, provided that the above copyright notice appear
// in all copies.
// ==============================================================

Les types de données supportées par OTL4WD

  • NUMBER (entier et monétaire)
  • CHAR (chaine de caractères de type asciiz)
  • TEXT (chaine de caractères de type asciiz correspondant au type LONG de Oracle).
  • DATE au format JJ/MM/AAAA HH:mm:SS. Ce format est défini au moment de la compilation, il est donc statique dans cette version.
  • BLOB (binaire et texte)

Utilisation

Pour utiliser la DLL dans sa version Oracle il est nécessaire d'accéder à une base Oracle version 7.3 ou supérieure.

Une fenêtre affichant les metadata sous forme de TV a été ajouté au projet.

La gestion des limites a entièrement été revue pour cette dernière version. Attention : le SELECT ne doit pas être un "select *".

Ce projet comporte également un mode "label" qui, s’il est activé, permet d’afficher un label REQUETEx au lieu de la requête SQL envoyée à la base.

Si la description d'une colonne est de type NULL (issue d'une select '' from dual), la longueur est forcée à 0 pour contenir un '\0' au lieu d’une valeur NULL.

Les membres

Membre Fonction
myEspaceSignificatif pour retirer ou non les espaces dans une champ lu

Les méthodes

Methode Fonction
mySQLDécritTable pour retirer ou non les espaces dans une champ lu
mySQLGetFieldName encapsule mySQLColName pour éviter les regressions
mySQLGetFieldLength encapsule mySQLColLength pour éviter les regressions
mySQLGetFieldType encapsule mySQLColType pour éviter les regressions
mySQLGetClientInfo renvoie l'adresse IP du poste connecté
mySQLGetServeurInfo renvoie le nom de la base de données
mySQLGetServerInfo renvoie le numéro de version du noyau oracle
mySQLPing fait un select sysdate from dual dans la base
>mySQLLitLigne Par souci d’optimisation


Lien de téléchargement

Télécharger la dernière version : SQLLite4WD 3.6.0.5

Informations

SQLite4WD est un projet compatible SQLManagerX.

SQLite4WD offre un accès aux bases de données SQLite :

  • Base sans serveur entièrement réalisée en C
  • Base réseau Incluse dans le pack PHP5
  • Base rapide

La compatibilité de ce projet s’étend jusqu’à la version 3.6.18 de SQLite.

La limite des blob qui s’arrêtait à 1Mo dans les versions antérieurs de SQLite4WD s’étend aujourd’hui à 16Mo.

La classe de cet accès natif a été développée avec Windev 7.5. La DLL a quant à elle été développée avec borland C++ builder. L’accès a été testé sur une plateforme Win9x, NT4, Windows 2000 et Windows XP.

Utilisation

Pour fonctionner, vous devez utiliser la DLL SQLite4WD.dll.

Depuis la version 3.2.0.0 de SQLite4WD, deux membres permettent de choisir la DLL à utiliser selon que vous souhaitez vous connecter à une base SQLite de version égale ou supérieur à 3.0.0 ou à une base SQLite de version inférieur (limitée à 2.8.6). La procédure est la suivante :

Dans le constructeur de la classe, vous devez apporter ces modifications :

//--- SQLite 3.2.0
:NomDllOrigine = "SQLite4WD3"
:NomDLL = "SQLite4WD3"

//--- SQLite 2.8.6
:NomDllOrigine = "SQLite4WD"
:NomDLL = "SQLite4WD"

Cela vous permet de disposer d'une DLL dédiée pour chaque version de base SQLite. SQLManagerX reste entièrement compatible.

Cryptage

Pour vous connecter a la base SQLite vous pouvez maintenant renseigner en plus un nom d’utilisateur et un mot de passe. S’ils sont présents, ils seront alors utilisés pour crypter la base, sinon la base ne sera pas cryptée. Cela permet d’éviter que des applications tierces utilisent votre base. Le Data Center reste compatible avec ce processus.

Principe de SQLite

SQLite n'est pas une bibliothèque cliente permettant la connexion a un serveur de base de données mais une bibliothèque implémentant une base de données embarquée. SQLite est donc la base de données à proprement parler.

La bibliothèque SQLite permet directement l'écriture et la lecture sur le fichier représentant la base de données. L'auteur de cette bibliothèque est D. Richard Hipp.

SQLite est multi-utilisateurs et multithread, ce qui signifie que plusieurs applications ou plusieurs instances d'une même application peuvent accéder en même temps à une base SQLite.

La gestion des locks avec SQLite

SQLite gère les blocages en fonction de l’occupation éventuelle de la base ou de la table. Si une table est occupée pendant des INSERT rien n'empêche d’éventuels INSERT sur une autre table.

La mise en place de sémaphores est possible, mais qu'en est-il de l'accès à la base par d'autres processus ? Le problème des timeOut reste également à régler.

Fonctionnement de SQLite4WD

La DLL que nous vous proposons utilise et encapsule les sources de la base SQLite, c'est pour cette raison que vous n'avez besoin de rien d'autre que de la DLL SQLite4WD pour accéder à une base SQLite. Il existe bien une version de SQLite.dll, mais cette dll ne suit pas toujours aussi rapidement que souhaité les mises à jour de la version source de SQLite. Par ailleurs, SQLite.dll ne possède pas encore les fonctions présentes dans SQLLite4WD permettant de gérer la compatibilité avec SQLManagerX.

La DLL SQLite4WD permet également de pouvoir faire certaines améliorations et surtout des ajouts de fonctionnalités (certaines fonctions n'existant pas en SQLite comme IF ou encore DayOfWeek qui s'obtient autrement avec strFtime). Cette opportunité apparaît non négligeable pour accentuer la compatibilité entre un code SQL MySQL et SQLite.

Les méthodes

Methode Fonction
mySQLgetFieldType (uniquement pour les versions de SQLite 3.x) Renvoie le type de la colonne correspondant à la requête avec les constantes suivantes :
SQLITE_INTEGER = 1
SQLITE_FLOAT = 2
SQLITE_TEXT = 3
SQLITE_BLOB = 4
SQLITE_NULL = 5
Le résultat est donc comparable avec MonAcces::SQLITE_INTEGER
mySQLGetType Renvoie 2 valeurs :
  • Le type de la colonne (dépendant du retour de la requête)
  • Une chaine (paramètre 3) contenant le type du CREATE TABLE (par exemple "CHAR (50)" ou "BLOB"
Exemple d’utilisation :
// v_chaine est une chaine
Trace(SQLite4WD:mySQLGetFieldType(0, v_indice, v_chaine))
trace(v_chaine)
getFieldName Renvoie le nom de la colonne
getFieldType Renvoie le type de la colonne
getNumField Renvoie le nombre de champs d’une colonne
MySQLLitColLong

Attention : la récupération des nom et type des colonnes doit se faire après l’exec.

Projet d’exemple

Téléchargez ici le projet d'exemple SQLite4DW

Le fichier zip téléchargeable ci-dessus comprend la classe et la DLL SQLLite accompagnées d'un projet d'exemple.

La fenêtre vous montrera a peu près toutes les fonctions de la classe accès natif.


Liens de téléchargement

Télécharger la version MySQL4WD 2.0.0.2 (contient les classes 7.5 et 11)

Télécharger la version MySQL4WD 2.0.0.1 (contient les classes 5.5, 7.5 et 9)

Informations

Ce projet est compatible SQLManagerX.

Site de l’auteur : Rodolphe Jouannet

Ce projet offre un accès aux bases de données MySQL en s'appuyant sur la couche ODBC. Il est composé d'une fenêtre de test, d'une classe et d'une DLL. Les sources de la DLL sont fournies gratuitement.

La classe de ce projet a été développée avec WinDev 5.5b et 7.5 et sa DLL avec Visual C++ 6 SP5. MySQL4WD a été testé sur une plateforme Win9x, NT4, Windows 2000 et Windows XP.

Il s’agit en réalité du projet "pilote" de la suite SQLManagerX maintenant disponible. Ce projet avait initialement été créé par Eric Roumegou et modifié par Daniel Vauterin pour le rendre compatible SQLManagerX et proposait un accès aux bases de données par l'intermédiaire de SQLManagerX via les accès natifs du fournisseur PCSoft, la même programmation étant ainsi conservée quelle que soit l'accès choisi : SQLManagerX ou PCSoft. Pour fonctionner, vous devez utiliser la classe c_natif4WD.

MySQL4WD accepte les connexions et les requêtes multiples.

Attention : le nombre de connexion simultanées a volontairement été limitée au nombre de 4.

Utilisation

Pour faire fonctionner l’accès, vous devez utiliser les DLL mySQL4WD.dll et libmysql.dll (fournie par MySQL) en les copiant dans votre répertoire WINxxSYSTEM32.

Nouveautés

Votre accès natif MySQL est modernisé (compilée avec Visual Studio 2005), corrigé (correction de la gestion des BLOBs) et modifiée (ajout de la méthode mySQLGetAffectedRows() qui permet de récupérer le nombre d'enregistrements affecté par un SELECT, un INSERT, un UPDATE...).

Méthodes

Voici un exemple d’utilisation de la méthode mySQLGetAffectedRows() :

SQL is c_mySQL4WD()
retCode is Boolean
affectedRows is int
sqlQuery = "UPDATE myTable SET myField = 12 WHERE myOtherField <= 20"
retCode = mSQL:mySQLExec(sqlQuery, 0)
if (retCode = True) then
mSQL:mySQLPremier(0)
affectedRows = mSQL:mySQLGetAffectedRows(0)
end
mSQL:mySQLFerme(0)
info("Affected Rows = " + NumeriqueVersChaine(affectedRows))

Compilation de MySQL4WD avec Dev-cpp

Rappel important : il convient d’utiliser la DLL compilée par Rodolphe Jouannet qui est et restera la seule valable pour remonter d’éventuels dysfonctionnements. Par ailleurs, MySQL conseille fortement l’utilisation de VC++.

Pour les personnes qui souhaiteraient tout de même modifier ou adapter la DLL mais qui ne posséderaient pas VC++, nous vous présentons le mode opératoire pour compiler les sources à partir de Dev-cpp. Ce mode vous est donné à titre purement informatif. Ce paragraphe s’adresse donc aux développeurs soucieux d’agrémenter leurs connaissances. En outre, nous partons du principe que la personne possède les compétences nécessaires pour créer un projet de type DLL sous Dev-cpp et a intégré les sources de Rodolphe à ce projet.

Le problème qui se présente et que nous allons résoudre est une erreur du type : au moment de l’édition de liens (link). Voici la démarche à suivre :

  1. Téléchargez le package mingw32.
  2. Décompressez le package mingw32 dans le répertoire c:/dev_cpp/mingw32 (en partant du principe que vous avez installé dev-cpp de manière standard).
  3. Copiez libmysql.lib et libmySQL.dll dans le répertoire c:/dev_cpp/mingw32/bin.
  4. Sous DOS, placez-vous dans le répertoire c:/dev_cpp/mingw32/bin.
  5. Générez le fichier .def : reimp -d libmysql.lib
  6. Générez la librairie .a : dlltool --input-def libmySQL.def --dllname libmySQL.dll --output-lib libmySQL.a -k
  7. Copiez le fichier c:/dev_cpp/mingw32/bin/libmySQL.a dans le répertoire DevC++lib.
  8. Ajoutez -lmySQL dans les options du projet (project=>projectOption=>LinkerOptions ou Alt+P)

Votre DLL MySQL4WD est prête !

Pour les utilisateurs d'une version de dev-cpp supérieure ou égale à la 4.9.8.10, vous pouvez télécharger le MySQL DevPak au travers du WebUpdate qui contient entre autres les fichiers d'include et de link. Notre manipulation n'est tout de même pas inutile car elle peut être effectuée à chaque release de la DLL de MySQL sans attendre que le DevPak soit versionné.

Pour les personnes utilisant un autre compilateur Windows, rendez-vous ici : https://dev.mysql.com/doc/


Lien de téléchargement

Télécharger la dernière version PostGreSQL4WD 1.0.0.2

Informations

Ce projet permet un accès à aux bases de données PostGre. Il est composé d'une fenêtre de test, d'une classe et d'une DLL. Les sources de la DLL sont fournies gratuitement.

La classe de PostGreSQL4WD a été développée avec WinDev 7.5 et la DLL avec Visual C++ 6 SP5.

Ce projet a été testé sur une plateforme Win9x, NT4, Windows 2000 et Windows XP.

Utilisation

Pour fonctionner, vous devez utiliser les DLL postgreSQL4WD.dll et libpq.dll (toutes deux fournies par le projet) en les copiant dans votre répertoire WINxxSYSTEM32.