PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Utilisation lien ODBC
Utilisation lien ODBC
Iniciado por Florent VANFRAECHEM, set., 18 2020 2:36 PM - 4 respostas
Membro registado
13 mensagems
Popularité : +1 (1 vote)
Publicado em setembro, 18 2020 - 2:36 PM
Bonjour à tous,

Dans le cadre d'un projet, j'utilise pour la première fois Windev (j'ai déjà utilisé Webdev) mais également pour la première fois un connecteur ODBC (je récupère les données d'un AS400).

J'ai réussi à me connecter à l'AS400 (bien que je pense que ma méthode n'est pas la meilleure).
Voici ma méthode :

NumConnexion est un entier
NumConnexion = SQLConnecte("as400","TEST","TEST")
SI NumConnexion<>0 ALORS

// Mon code

SINON
// Connexion échouée
SQLInfoGene()
Erreur("Erreur de connexion")
SQLTransaction(sqlAnnule)
FIN
SQLDéconnecte()



Suite à cette connexion, je souhaite récupérer les données d'une table afin de comparer si la valeur dans le champ de saisie sur ma fenêtre est présent dans les données de ma table.
J'aurais pu réaliser cela avec les fonctions HLit.., Htrouve et etc mais cela n'est pas possible avec un lien ODBC.

J'ai trouvé les fonctions commençant par SQL, à savoir, SQLExec, SQLAvance etc.

Mais en faisant :
SI PAS SQLExec("SELECT CDART FROM VM003P10 WHERE CDART='"+SAI_SansNom1+"'","REQ_BaseAccess") ALORS
Erreur("Erreur 1")
SINON
Info("OK")
FIN


Cela me permet uniquement de savoir si ma commande a été exécutée, or ce que je souhaite savoir c'est si ma requête retourne une valeur ou non. J'ai effectué des recherches mais je n'ai pas trouvé ce qu'il me fallait.

Si quelqu'un maîtrisant mieux les interactions Windev avec lien ODBC, pouvait m'indiquer ou m'aiguiller sur comment analyser si ma requête retourne quelque chose plutôt que savoir si ma requête s’exécute cela me serait d'une grande aide.

Merci d'avance :)

Cordialement
Florent VANFRAECHEM

--
Cordialement

Florent VANFRAECHEM
Membro registado
160 mensagems
Popularité : +18 (22 votes)
Publicado em setembro, 18 2020 - 4:20 PM
ResSQL =SQLExec("SELECT CDART FROM VM003P10 WHERE CDART='"+SAI_SansNom1+"'","REQ_BaseAccess")
SI PAS ResSQL ALORS
Erreur("Erreur 1")
SINON
Info("OK")
SQLInfoGene("ResSQL ")
Info("Nombre de lignes du résultat. "+SQL.NbLig)
FIN
Membro registado
13 mensagems
Popularité : +1 (1 vote)
Publicado em setembro, 21 2020 - 11:45 AM
J'ai essayé cela, ça ne fonctionne pas. :(

Dans le SQLInfoGene j'ai remplacé ResSQL car ce n'est pas une requête. Malgré ça je n'ai pas de résultat, ma requête se passe correctement mais pas de résultats avec SQL.NbLig

--
Cordialement

Florent VANFRAECHEM
Membro registado
505 mensagems
Popularité : +18 (18 votes)
Publicado em setembro, 21 2020 - 3:25 PM
Bonjour Florent,

Si on recherche un peu sur les forums, on trouve 2 pistes.

La première concerne la bibliothèque qui contient la table requêtée. Si on ne paramètre pas les bibliothèques courantes, alors dans le SQL il vaut mieux préfixer le nom de la table avec le nom de sa bibliothèque.

Suivant le pilote ODBC et son paramétrage, la syntaxe utilise soit le point soit la barre oblique :
SELECT * FROM bibli.TABLE
SELECT * FROM bibli/TABLE


Une autre piste est tout simplement le type du pilote ODBC DB/2 iSeries (AS/400) qui pourrait ne pas fonctionner correctement selon la configuration.
Il faut trouver un moyen de vérifier qu'il fonctionne, et en dehors de WINDEV si possible.

Bon courage.
Membro registado
13 mensagems
Popularité : +1 (1 vote)
Publicado em setembro, 21 2020 - 4:08 PM
Bonjour JBO,

Oui effectivement dans mon exemple j'avais oublié de préfixer le nom de la table, c'est chose faite maintenant.
Egalement j'ai corrigé SAI_SansNom1 en SAI_SansNom1..ValeurAffichée, c'est tout de suite mieux pour la requête :D

J'ai finalement trouvé la solution, en cherchant des pistes sur SQL.NbLig je suis tombé sur un forum qui préconise au préalable d'effectuer un SQLPremier(). J'ai quelque peu adapter pour que cela corresponde avec mon cas est désormais tout est OK.

Merci encore ! :)

--
Cordialement

Florent VANFRAECHEM