|
Erreur ConstruitTablefichier |
|
Stagiaire WDF
Inscrit: 08/11/2006 15:47
De Suisse
Post(s): 32
|
J'ai crée une procedure locale en thread automatique et j'ai un problème assez bizarre....
Voici mon code :
SI PAS HExécuteRequêteSQL(gsdsqlvue,hRequêteDéfaut,"SELECT * FROM BIG_FILE") ALORS Erreur(ErreurInfo(errComplet)) RETOUR FIN
Info(HNbEnr(gsdSqlVue))
ConstruitTableFichier(TABLE_REQ,gsdsqlvue,taSansMémoImage+taAvecIdAuto+taSans Ajuste+taSansMémoTexte+taRemplirTable)
Aucune errreur sur Hexecuterequete.... Info me donne 75148 (extact)
Apres j'ai une erreur
L'objet gsdSqlVue n'a pas été trouvé.
Traitement de <ZDA_fenGraphe.PROCEDURE.PRECALCUL>, ligne <26>, thread <0> Fonction <ConstruitTableFichier>, n° de syntaxe <1>
- Niveau : erreur fatale (EL_FATAL)
- Code erreur : 1025
Si quelqu'un peut me dire comment résoudre sela car moi, je suis dans le noir....
JFG
Contribution le : 08/11/2006 15:52
|
|
|
Re: Erreur ConstruitTablefichier |
|
Stagiaire WDF
Inscrit: 08/11/2006 15:47
De Suisse
Post(s): 32
|
Bon, je m'auto-réponds moi-même personnelement...
A priori, si on à un tread avec des fonctions SQL dedans, cela ne fonctionne pas (il remonte pas l'info), quelque soit le type de tread crée (avec l'outil de création des tread automatiques dans le générateur de code )
Le même code, mais sans le tread, joue sans problèmes...
J'vais chercher une autre solution....
Contribution le : 14/11/2006 16:48
|
|
|
Re: Erreur ConstruitTablefichier |
|
Animateur WDF
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Bonjour, La fonction ConstruitTableFichier() fonctionne très bien dans un thread en respectant une contrainte: La requete doit être créée a partir de l'éditeur de requête de WinDev. voici un exemple:
//Code d'un bouton
//Execution d'un thread avec comme paramètre:
//Nom du thread
//Constante
//Nom de la procédure a exécuter
//Paramètre 1, 2, n
//ici param1 : le nom de la table
// param2 : le nom de la requete
sReq est une chaîne = "ReqCliNom"
ThreadExécute("THR1",threadUtiliseHyperFile,proRempliTable,"TABLE",sReq)
//Code la procedure proRempliTable
PROCEDURE proRempliTable(pTableNom est une chaine, pRequeteNom est une chaine)
SI PAS HExécuteRequête(pRequeteNom,hRequêteDéfaut) ALORS
Erreur(HErreurInfo())
RETOUR
FIN
ConstruitTableFichier(pTableNom,pRequeteNom,taRemplirTable+taAvecBinaire+taLibelléRubrique)
Ce code fonctionne correctement
Contribution le : 16/11/2006 00:06
|
|
|
Re: Erreur ConstruitTablefichier |
|
Stagiaire WDF
Inscrit: 08/11/2006 15:47
De Suisse
Post(s): 32
|
Merci pour l'explication de cette erreur de thread, il faut avoir crée la requête dans le générateur de requêtes de Windev... Cela n'arange pas mes bidons car j'ai crée des composants où les requêtes sont crées dynamiquement ou bien stockées dans des tables. Cela m'est sûrtout utile quand je doit créer des outils de recherche complexes (style recherche de tous les fournisseurs qui ont signé les conditions d'achats). Souvent, les demandes des utlisateurs viennent APRES la création de l'appli et je ne désire plus recompler tous le 2 jours pour chaque modif... En résumé, je vais continuer à chercher la solution allieurs (snif) Bonne journée, soirée, nuit... JF Georgy
Contribution le : 16/11/2006 20:10
|
|
|
Re: Erreur ConstruitTablefichier |
|
Animateur WDF
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Bonjour, Dans ce cas je vais te proposer une astuce. la technique consiste dans un premier temp et en dehors du trhead à créer le tableau qui va recevoir les données via la fonction ConstruitTableFichier() mais sans la remplir. On a constaté que l'execution de la fonction HExceuteRequeteSql etait très rapide cette action peut être réalisé en dehors du thread secondaire Reste plus qua intégrer le remplissage de table dans un thread secondaire.
//Code du bouton
gsdsqlvue est une Source de Données
Sql est une chaîne
Sql = "gsdsqlvue,hRequêteDéfaut,"SELECT * FROM BIG_FILE"
//Execution de la requête pour construire la table
SI PAS HExécuteRequêteSQL(gsdsqlvue,Cnx,hRequêteDéfaut,Sql) ALORS
Erreur(HErreurInfo())
RETOUR
FIN
ConstruitTableFichier(Table1,gsdsqlvue)
//Remplissage via un thread
ThreadExécute("THREADNAME",threadUtiliseHyperFile,"pExecReq",Table1..Nom,Sql)
PROCEDURE pExecReq(pTable est une chaîne, pSql est une chaîne)
Rsl est une Source de Données
i est un entier
sBuff est une chaîne
SI PAS HExécuteRequêteSQL(Rsl,hRequêteDéfaut,pSql) ALORS
Erreur(HErreurInfo())
RETOUR
FIN
//On rempli la table
POUR TOUS Rsl
//On récupère les donnees d'un enregistrement
sBuff = HRécupèreEnregistrement(Rsl,TAB)
TableAjoute(pTable,sBuff)
FIN
Avec cette methode vous pouvez meme ajouter une jauge pour le remplissage de la table et ce a partir du thread
Contribution le : 17/11/2006 10:41
|
|
Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.
|
Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
|