PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Instruction "SQLConnecte" et accés natif AS400
Instruction "SQLConnecte" et accés natif AS400
Débuté par Jean-Christophe CHERID, 03 déc. 2015 10:07 - 20 réponses
Posté le 03 décembre 2015 - 10:07
Bonjour

je n'arrive pas à me connecter à notre AS400 via l'instruction "SQLConnecte".

Le système me renvoie l'erreur "Code erreur IM002 [Microsoft][Gestionnaire pilote OBDC] source de données introuvable et nom de pilote non spécifié".

Que vient fait faire cette histoire de pilote OBDC alors que je cherche à me connecter via l'accès natif AS400.

J' ai épluché l'aide en ligne, et j'ai rédigé mon code tel que :

"SI SQLConnecte("Mon_Adresse_IP", "WEBDEV", "WEBDEV",Mon_AS400,hAccèsNatifAS400) ALORS"


Quelqu'un a t-il une idée ?


Merci pour votre aide !
Posté le 03 décembre 2015 - 11:38
Bonjour Jean-Christophe,

Je ne vois pas trop d'explication, mais avez vous les mêmes problèmes de connexion en utilisant les ordres :

HDécritConnexion
HOuvreConnexion
HExécuteRequêteSQL


Bon courage.
Membre enregistré
367 messages
Popularité : +17 (17 votes)
Posté le 03 décembre 2015 - 11:58
euh question toute bête :
tu as bien sur acheter le connecteur as400 pour windev.

--
Dominique "QNX" Lecocq
IC Industrie - Binary Activity
Développement enfoui - M2M
Posté le 03 décembre 2015 - 12:16
Bonjour Dominique,

Tu fais sans doute référence au connecteur natif Easycom ?

Tous nos développements se font en accès natif AS/400.

A travers ma question, j'essaie de d'expérimenter une autre manière de lancer une requête SQL via l'accès NAtif.

JCC
Membre enregistré
367 messages
Popularité : +17 (17 votes)
Posté le 03 décembre 2015 - 13:47
Oui EasyCom. avec ce connecteur depuis 1995 jamais eu le moindre pb.
je ne comprends pas
tu écris :
"Que vient fait faire cette histoire de pilote OBDC alors que je cherche à me connecter via l'accès natif AS400."
hors le connecteur natif as400 est payant :
" Le module d'accès natif AS/400 a été conçu par la société "Aura Equipements". Un fichier d'aide contenant toutes les spécificités de cet Accès Natif est livré avec l'Accès Natif AS/400."
je ne connais pas d'autre module "natif AS400" !

Le connecteur peut paraitre cher, mais Aura est au top du top, hot line super, et puis ce sont des jours entiers de dev gagnés à utiliser ce connecteur.

Bon Dev.

--
Dominique "QNX" Lecocq
IC Industrie - Binary Activity
Développement enfoui - M2M
Posté le 03 décembre 2015 - 14:12
Bonjour

heuuuuu

le connecteur natif easycom -EST- l'accès natif AS400...

Donc, je ne comprend pas bien, la...

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

A votre disposition : WXShowroom.com, WXReplication (open source) et
maintenant WXEDM (open source)

Plus d'information sur http://fabriceharari.com


On 12/3/2015 6:16 AM, Jean-Christophe CHERID wrote:
Bonjour Dominique,

Tu fais sans doute référence au connecteur natif Easycom ?

Tous nos développements se font en accès natif AS/400.

A travers ma question, j'essaie de d'expérimenter une autre manière
de lancer une requête SQL via l'accès NAtif.

JCC
Posté le 04 décembre 2015 - 11:53
Si c'est pour utiliser avec l'ccés natif, il faut bien respecter cette syntaxe :

SQLConnecte(AdresseServeur,LoginServeur, MdpServeur,"",AS400,hAccèsNatifAS400)


Personellement j'utilise cette procédure dans mon QueryManager et ça marche du feu de dieu !

Procedure ExecuteSQL(sMaRequete est une chaîne) : tableau de tableau associatif de chaînes

tabResult est un tableau de tableau associatif de chaînes

i est un entier
nNB_Colonnes est un entier

SI SQLConnecte(AdresseServeur,LoginServeur, MdpServeur,"",AS400,hAccèsNatifAS400) ALORS
SQLTransaction(sqlDébut,AS400)
SI SQLExec(sMaRequete,"REQ1") ALORS
i = 0
SQLInfoGene("REQ1")
nNB_Colonnes = SQL.NbCol
k est un entier = 0
l est un entier = 0
TANTQUE SQLAvance("REQ1") = 0
i++
k = Ajoute(tabResult)
POUR j = 1 _A_ nNB_Colonnes
tabResult[k][SQL.TitreCol[j]] = SQLLitCol("REQ1", j)
FIN
FIN
SINON
SQLInfoGene("REQ1")
Info("Erreur SQL : " + SQL.MesErreur)
FIN
SQLFerme("REQ1")
SQLTransaction(sqlFin,AS400)
SINON
// La connexion a échoué : affichage d'un message explicatif
SQLInfoGene()
Erreur("La connexion à la source de données a échoué." + RC + ...
"Code erreur : " + SQL.Erreur + RC + SQL.MesErreur)
FIN
SQLDéconnecte()

RENVOYER tabResult
Posté le 04 décembre 2015 - 11:56
En fait après avoir relu ton code, il me semble que tu est oublié le "" qui spécifie la bibliothéque a attaquer, entre le param mdp et le param connexion.
Posté le 08 décembre 2015 - 14:09
Bonjour Yann,


Je n'avais pas vu que tu avais répondu à mon message !

Merci pour ton aide et ta réponse.

Malgré tes conseils, ma ligne d'instruction ne fonctionne toujours pas !

Voici le message d'erreur ([Microsoft][Gestionnaire de pilotes OBDC] Source de donnéees introuvable et nom de pilote non spécifié ) :






Je continue à batailler sur cette histoire, car j'aime comprendre !

En tout cas merci pour ton coup de main..

Jean-Christophe
Membre enregistré
367 messages
Popularité : +17 (17 votes)
Posté le 08 décembre 2015 - 15:05
Je vais reposer la question :
le connecteur AURA est il installé?
SI la réponse est NON, alors pour moi je pense que cela n'a AUCUNE chance de fonctionner !

--
Dominique "QNX" Lecocq
IC Industrie - Binary Activity
Développement enfoui - M2M
Posté le 08 décembre 2015 - 15:32
Bonjour Dominique,

Oui, le connecteur AURA est bien installé :





Membre enregistré
70 messages
Popularité : +4 (4 votes)
Posté le 08 décembre 2015 - 15:43
Bonjour Jean-Christophe,

Si tu essaye d'ajouter un fichier AS400 dans l'analyse, il l'ajoute correctement? Le sous-système easycom est bien lancé sur l'AS ?

Il me semble avoir déjà eu cette erreur, j'avais recréer la connexion dans l'analyse et ça avait réglé mon problème ( Si je te dis pas de connerie ).

Après si tu bosses pas sur des données sensible et que tu as teamviewer, envoi moi un mail a dubranayann@gmail.com et on regardera ton soucis! ( Et puis nous on a un contrat de maintenance chez easycom, donc au pire je leur enverrais un petit mail, ils sont efficace !!! )
Posté le 08 décembre 2015 - 16:11
Merci Yann,

Mais tu t'en doutes surement (!), je ne peux pas utiliser ce type d'outil chez le client ou je suis actuellement.

Pour répondre à ta question, oui j'arrive parfaitement à ajouter des fichiers dans l'analyse, et lorsque je lance un test de connexion, tout est oK.


C'est à se demander si cette instruction est compatible avec l'AS400 ??!!

Pour le support, cela ne concerne t-il pas plutôt PCSOFT ?


Bon en tout cas, merci pour ton aide.


Si la situation se débloque, je communiquerais la solution sur ce forum ( ça peut toujours aider...).


J.C
Membre enregistré
367 messages
Popularité : +17 (17 votes)
Posté le 08 décembre 2015 - 16:11
Est ce que je dit une connerie si je pense que SQLConnecte utilise la connexion OLEDB ?
Ce qui explique le message d'erreur.
Dans ce cas, il faut créer un "driver" dans les connexions windows avec les bon paramètres.
Je suis désolé, pas la possibilité de faire de tests, car je n'utilise plus les AS400, mais je chercherai dans ce sens

--
Dominique "QNX" Lecocq
IC Industrie - Binary Activity
Développement enfoui - M2M
Membre enregistré
367 messages
Popularité : +17 (17 votes)
Posté le 08 décembre 2015 - 16:19
Si je me souviens c'est pas un truc du genre paramètrage de "client access"?
Avec l'ajour de Source de données ?

--
Dominique "QNX" Lecocq
IC Industrie - Binary Activity
Développement enfoui - M2M
Posté le 08 décembre 2015 - 16:55
Merci Dominique,

C'est une piste, je vais fouiller dans ce sens.


J.C
Membre enregistré
70 messages
Popularité : +4 (4 votes)
Posté le 09 décembre 2015 - 11:26
Honnetement, si ça merde avec SQLConnecte, te fais pas chier !

Tu ajoute le fichier dans l'analyse, tu créer ta requete dans l'editeur windev ( si tu n'utilise pas de fonction alacon genre YEAR(CURRENT DATE) il la rétroanalyse même) et aprés

SI HExécuteRequête(REQ_1,DELZONGA,hRequêteSansCorrection,param1) ALORS
TableSupprimeTout(maTable)
POUR TOUT REQ_1
k est un entier = TableAjouteLigne(maTable)
maTable[k].COL_1= REQ_1zone1
FIN
FIN


La deux choix s'offre à toi. Soit tu ne peux pas rétroanlyser la requete, et alors faut utiliser le code si dessus.

Soit elle se retroanalyse et tu fais :

SI HExécuteRequête(REQ_1,hRequêteDéfaut,param1) ALORS
TableSupprimeTout(maTable)
POUR TOUT REQ_1
k est un entier = TableAjouteLigne(maTable)
maTable[k].COL_1= REQ_1zone1
FIN
FIN


Avec ça sa marche à tout les coups. Ma méthode servant uniquement a pouvoir générer des tables ou des ZR Dynamique. En utilisant la méthode ci dessus ( que j'utilise dans 90% des cas ), ça doit marcher !
Membre enregistré
70 messages
Popularité : +4 (4 votes)
Posté le 09 décembre 2015 - 11:27
REQ_1.zone1 vous me pardonnerz la faute de frappe
Posté le 09 décembre 2015 - 16:50
Bonjour Yann


Merci pour post, c'est une bonne idée !


Pour info, j'ai contacté le support AURA, j'ai eu confirmation que l'instruction "SQLConnecte" n'est absolument pas compatible avec l'accès natif AS400... On pouvait toujours chercher dans ces conditions !

J'utilise pour mes requêtes l'instruction "HexecuteRequeteSQL" ( j'attaque une BASE AS400), mais je me prends la tête pour récupérer le nombre de colonne renvoyée par ma requête.

L'utilisation des infos renvoyées par SQLInfogene étaient pour moi du bain béni !



Jean-Christophe
Membre enregistré
367 messages
Popularité : +17 (17 votes)
Posté le 09 décembre 2015 - 18:15
"SQLConnecte" n'est absolument pas compatible avec l'accès natif :
c'est bien ce que je pensais, c'est l'oledb + client acces
mais je me prends la tête pour récupérer le nombre de colonne renvoyée par ma requête.???
je ne comprends pas, tu as bien tes colonnes dans ton select? donc tu connais le nombre non?

--
Dominique "QNX" Lecocq
IC Industrie - Binary Activity
Développement enfoui - M2M
Posté le 09 décembre 2015 - 18:35
Bonjour ,

A force de batailler, j'ai trouvé le code qui me convient pour extraire le nombre de colonnes du résultat renvoyée par une requête de type "HexecuteRequeteSql" :

// { Extrait la LISTE des colonnes renvoyées par la rubqrique }
LNom_Rubrique = HListeRubrique(Ma_Requete_Src,hLstDétail)
// { Extrait le NOMBRE de colonnes }
Lnbre_Rubrique = ChaîneOccurrence(LNom_Rubrique ,RC)+1


Par cette méthode, je récupère le titre des colonnes et le nombre de colonnes de ma requête.

Prochaine étape : récupérer les valeurs de chaque colonne dans une boucle de lecture du résultat de ma requête :

pour tout ma_requête
......
fin