PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Connexion SQL Server
Connexion SQL Server
Débuté par Mus, 19 juil. 2020 16:42 - 26 réponses
Membre enregistré
48 messages
Posté le 19 juillet 2020 - 16:42
Bonjour
Je suis entrin de devlopper une application qui a une connexion multi base une HFSQl et SQL SERVER, je me connecte au sql server avec succee mais je n'arrive pas recuperer les enregistrement d'une table sql server
voila mon code :
Nouvelle_connexion est une Connexion
// Paramètres de la connexion
Nouvelle_connexion ..Provider = hOledbSQLServer
Nouvelle_connexion ..Utilisateur = "********"
Nouvelle_connexion ..MotDePasse = "********"
Nouvelle_connexion ..Serveur = "****"
Nouvelle_connexion ..BaseDeDonnées = "*****"
Nouvelle_connexion ..Accès = hOLectureEcriture
// Ouverture de la connexion
SI PAS HOuvreConnexion ( Nouvelle_connexion ) ALORS
Erreur(HErreurInfo())
RETOUR
SINON
Info("connexion réussi")
FIN
sdReqSQL est une Source dede Données
sReq est une chaîne
sdData est une Source dede Données
sReq = [
SELECT * FROM CHARGEMENT
]
TableSupprimeTout(TABLE_CHARGEMENT)
SI HExécuteRequêteSQL(sdData,hRequêteDéfaut,sReq) ALORS
TableAjoute(TABLE_CHARGEMENT,sdData)
FIN
Membre enregistré
1 151 messages
Posté le 19 juillet 2020 - 17:11
Bonjour,

il y a quoi dans sdData après exécution de la requête?

--
Thierry TILLIER
Développeur Windev-Webdev
Formation Windev : https://coursdinfo.teachable.com/
Formation bureautique : https://coursdinfo.net
Membre enregistré
2 677 messages
Posté le 19 juillet 2020 - 19:56
Bonjour,

Vu d'ici je dirais qu'il manque un HChangeConnexion("*",Nouvelle_connexion). C'est bien beau d'ouvrir la connexion mais si tu ne dis pas que les fichiers de ton analyse doivent utiliser la nouvelle connexion ça ne peut pas fonctionner.

--
Cordialement,

Philippe SAINT-BERTIN
Posté le 20 juillet 2020 - 11:26
Bonjour,

A mon sens, ce qui manque est la déclaration des tables que l'on souhaite accéder avec la connexion dans l'analyse, du genre
HDéclareExterne("CHARGEMENT","CHARGEMENT",Nouvelle_connexion).
Sinon, pour éviter cela, il faut plutôt utiliser le SQLConnecte.

Cordialement,

Didier
Membre enregistré
48 messages
Posté le 20 juillet 2020 - 12:45
Bonjour
dans le sdData il ya un parametre
Membre enregistré
1 151 messages
Posté le 20 juillet 2020 - 13:54
sdData devrait contenir toutes les données de la requêtes

pour la table TABLE_CHARGEMENT : FichierVersTableMémoire(TABLE_CHARGEMENT , sdData ) ..?
ou alors une boucle ..?

il est clair que sdData doit contenir plus d'une ligne

--
Thierry TILLIER
Développeur Windev-Webdev
Formation Windev : https://coursdinfo.teachable.com/
Formation bureautique : https://coursdinfo.net
Membre enregistré
2 677 messages
Posté le 20 juillet 2020 - 17:29
@Mustapha: Tu n'es pas sur la bonne connexion !!!

--
Cordialement,

Philippe SAINT-BERTIN
Membre enregistré
48 messages
Posté le 21 juillet 2020 - 10:47
explique??
Membre enregistré
2 677 messages
Posté le 21 juillet 2020 - 11:04
Je te l'ai dit plus haut. Tu crées une connexion mais tu ne dis jamais à ton application de l'utiliser. Pour ça il y a HChangeConnexion().

--
Cordialement,

Philippe SAINT-BERTIN
Membre enregistré
48 messages
Posté le 21 juillet 2020 - 11:38
Le message d'erreur qui provien est:
Vous avez appelé la fonction HExécuteRequêteSQL.
erreur dans le code sql de la requete <_Source_SdData_1>.initialisation de la requete impossible.
Fichier CHARGEMENT inconnu
erreur détéctée :
SELECT * FROM >>>>CHARGEMENT<<<<<
Membre enregistré
951 messages
Posté le 21 juillet 2020 - 12:58
bonjour Mustapha,

avez vous utilisez la fonction que Philippe à indiqué ? ( HChangeConnexion() ) ?

Si oui, est-ce que ce fichier CHARGEMENT est présent dans votre analyse ?
Si il ne l'est pas voir cet exemple de l'aide qui vous aidera :

https://doc.pcsoft.fr/fr-FR/?3044084&name=HExecuteRequeteSQL#NOTE0_6
Membre enregistré
1 151 messages
Posté le 21 juillet 2020 - 13:53
Vous dites aux début que votre application est multi base : est-ce la même base de données à chaque fois, identique à l'analyse du projet ? ou bien des bases de données différentes (structures différentes)?

--
Thierry TILLIER
Développeur Windev-Webdev
Formation Windev : https://coursdinfo.teachable.com/
Formation bureautique : https://coursdinfo.net
Membre enregistré
48 messages
Posté le 21 juillet 2020 - 15:24
Jutilise une base de données en HFSQL c/s et une auttre en SQL SERVER.
je fait une ecriture dans la base SQL server depuis ma base hfsql.
pour la connexion ca marche avec :
Nouvelle_connexion est une Connexion
// Paramètres de la connexion
Nouvelle_connexion ..Provider = hOledbSQLServer
Nouvelle_connexion ..Utilisateur = "********"
Nouvelle_connexion ..MotDePasse = "********"
Nouvelle_connexion ..Serveur = "****"
Nouvelle_connexion ..BaseDeDonnées = "*****"
Nouvelle_connexion ..Accès = hOLectureEcriture
// Ouverture de la connexion
SI PAS HOuvreConnexion ( Nouvelle_connexion ) ALORS
Erreur(HErreurInfo())
RETOUR
SINON
Info("connexion réussi")
FIN
ca marche mais le probleme je veux remplire le champ table pour afficher les enregistrement dans la table chargement qui ce trouve dans SQL serer, jai executer ce code :
sdReqSQL est une Source de Données
sReq est une chaîne
sdData est une Source de Données
sReq = [
SELECT * FROM CHARGEMENT
]
TableSupprimeTout(TABLE_CHARGEMENT)
SI HExécuteRequêteSQL(sdData,hRequêteDéfaut,sReq) ALORS
TableAjoute(TABLE_CHARGEMENT,sdData)
FIN
il me retourne une erreur que la table chargement est inconu ??? ( la table chargement est dans le SQL SERVER.
Membre enregistré
48 messages
Posté le 21 juillet 2020 - 15:26
Bonjour Christophe
j'ai fait comme l'exemple que tu ma envoyer mais tj le meme pb l'erreur retourné est que la table chargement qui ce trouve dans sql server est inconu?
Membre enregistré
1 151 messages
Posté le 21 juillet 2020 - 15:56
Problème d'orthographe sur le nom de la table dans SQL Server ?

--
Thierry TILLIER
Développeur Windev-Webdev
Formation Windev : https://coursdinfo.teachable.com/
Formation bureautique : https://coursdinfo.net
Membre enregistré
2 677 messages
Posté le 21 juillet 2020 - 16:16
Bonjour,

Je persiste et je pense que ta requête n'est pas effectuée sur la bonne connexion. Pour le moment ta requête s'exécute sur la base HF qui ne contient peut-être pas ce fameuse table chargement.

Il faudrait faire
SI HExécuteRequêteSQL(sdData,Nouvelle_connexion ,hRequêteDéfaut,sReq) ALORS
TableAjoute(TABLE_CHARGEMENT,sdData)
FIN


--
Cordialement,

Philippe SAINT-BERTIN
Membre enregistré
48 messages
Posté le 21 juillet 2020 - 16:29
Bonjour Philippe SB
Sa na pas marcher tj le meme message d'erreur :
Vous avez appelé la fonction HExécuteRequeteSQL.
Erreur dans le code SQL de la requete <_Source_sdData_1>. Initialisation de la requete impossible.
Fichier CHARGEMENT Inconu
Membre enregistré
48 messages
Posté le 21 juillet 2020 - 16:36
Bonjour THIERRY TILLIER
Non ya pas d'erreur d'ortographe j'ai verifier
Membre enregistré
1 151 messages
Posté le 21 juillet 2020 - 16:40
@Philippe
ce ne serait pas mieux avec une autre option : hRequêteSansCorrectionHF
HExécuteRequêteSQL(sdData,Nouvelle_connexion ,hRequêteSansCorrectionHF,sReq)


--
Thierry TILLIER
Développeur Windev-Webdev
Formation Windev : https://coursdinfo.teachable.com/
Formation bureautique : https://coursdinfo.net
Membre enregistré
2 677 messages
Posté le 21 juillet 2020 - 17:28
@THIERRY TILLIER: L'option importe peu, c'est juste pour lui dire sur quelle connexion il doit effectuer la requête. Si rien n'est précisé, la requête s'effectue sur la connexion en cours

@Mustapha
Si tu lances la requête dans SQL Management ça dit quoi ?

--
Cordialement,

Philippe SAINT-BERTIN
Membre enregistré
1 151 messages
Posté le 22 juillet 2020 - 08:57
avec ou sans hRequêteSansCorrectionHF le résultat peut être différent. Sous Oracle j'ai eu le même type d'erreur si j'utilisais juste hRequêteDéfaut, alors qu'avec hRequêteSansCorrectionHF la requête s'exécutait bien.

--
Thierry TILLIER
Développeur Windev-Webdev
Formation Windev : https://coursdinfo.teachable.com/
Formation bureautique : https://coursdinfo.net
Membre enregistré
2 677 messages
Posté le 22 juillet 2020 - 10:13
C'est bon à savoir, pourtant il me semblait que ce paramètre ne servait que pour formater la requête correctement.

--
Cordialement,

Philippe SAINT-BERTIN
Posté le 22 juillet 2020 - 10:17
Bonjour,

J'insiste par rapport à la déclaration de la table SQL à manipuler dans l'analyse, comme indiqué dans mon post du 20 juillet :

"Bonjour,

A mon sens, ce qui manque est la déclaration des tables que l'on souhaite accéder avec la connexion dans l'analyse, du genre
HDéclareExterne("CHARGEMENT","CHARGEMENT",Nouvelle_connexion).
Sinon, pour éviter cela, il faut plutôt utiliser le SQLConnecte."

Cordialement,

Didier
Membre enregistré
1 151 messages
Posté le 22 juillet 2020 - 11:15
@Philippe Oui c'est exact, mais l'erreur renvoyée par WINDEV n'indique pas le vrai problème (dans ce cas de figure)

--
Thierry TILLIER
Développeur Windev-Webdev
Formation Windev : https://coursdinfo.teachable.com/
Formation bureautique : https://coursdinfo.net
Membre enregistré
48 messages
Posté le 22 juillet 2020 - 12:26
Bonjour
J'ai resolu mon pb car le etais dans la definition de la connexion alors j'ai changer la connexion :
H.ModeSQLServer = 0
SI PAS HDécritConnexion(gsConnSQL,SAI_User,SAI_MP,SAI_Adr,SAI_Database,hOledbSQLServer,hOLectureEcriture,"WD Command Timeout=120;WD Lock Timeout=30;WD Connection Timeout=10",hCurseurClient+hCurseurPessimiste) ALORS
Info(HErreurInfo(hErrComplet))

RENVOYER Faux
SINON
SI PAS HOuvreConnexion(gsConnSQL) ALORS
Info(HErreurInfo(hErrComplet))
RENVOYER Faux
FIN
FIN

comme ca j'ai pu lire et ecrire dans les tables SQLSERVER
Merci a tous :merci:
Membre enregistré
5 messages
Posté le 10 septembre 2020 - 19:33
Bonsoir, as-tu réglé ton probléme ou pas encore ?
Membre enregistré
48 messages
Posté le 13 septembre 2020 - 10:14
Salut
J'ai reglé le probleme de la connexion ca marche meme pour une requete de update ca marche mais un probleme persiste, c'est que l'execution de cette requette ne donne rien:
PROCÉDURE Chargement()
HLitRecherchePremier(Centre, Flag, "S")
SI HTrouve() = Vrai ALORS
//Info("Enregistrement trouvé"+Centre.Des)
SINON
Erreur("Aucun enregistrement ne correspond")
FIN
H.ModeSQLServer = 0
SI PAS HDécritConnexion(gsConnSQL,"*****"************************************",hOledbSQLServer,hOLectureEcriture,"WD Command Timeout=120;WD Lock Timeout=30;WD Connection Timeout=10",hCurseurClient+hCurseurPessimiste) ALORS
Info(HErreurInfo(hErrComplet))
RENVOYER Faux
SINON
SI PAS HOuvreConnexion(gsConnSQL) ALORS
Info(HErreurInfo(hErrComplet))
RENVOYER Faux
FIN
FIN
sReq est une chaîne
sdData est une Source de Données
sReq = [
INSERT INTO TRF_CHARGEMENT
([TYPE_DOCUMENT]
,[REFERENCE]
,[Centre]
,[Produit]
,[EMBALLAGE]
,[DATE_OPERATION]
,[QTE]
)
SELECT
dbe.Type_Doc,
dbe.reference_doc_fa,
be.Code_cds_source,
dbe.Code_Prod,
dbe.code_emballage,
dbe.Date_BE,
dbe.Quantite
FROM
Detail_BE AS dbe LEFT JOIN Bon AS be ON bon.Num_Date = dbe.bon.Num_Date
WHERE
dbe.bon.Num_Date= SAI_Reference
]
HExécuteRequêteSQL(sdData,gsConnSQL,hSansBind+hRequêteSansCorrection,sReq)
HFermeConnexion(gsConnSQL)