|
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 SINON 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
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 |
| |
| |
| | | |
|
| | | | |
| | |
|