Probleme de vitesse - SQL
Developpeur WDF
Inscrit:
02/05/2003 09:10
Post(s): 103
Bonjour,
voila, nous avons constaté une différence de vitesse selon ce qu'on utilise pour executer et afficher nos requetes.
J'aurais avoir votre avis la dessus.

Nous utilisons cette syntaxe pour l'instant :
1)
sql est une chaîne
r est une Source de Données()
ind est un entier

sql = "SELECT * FROM Client"
IF NOT HExécuteRequêteSQL(r,sql) THEN msg(2,sql)
IF HNbEnr(r) > 0 THEN
HLitPremier(r)
WHILE NOT HEnDehors(r)
ind = tableajouteligne(table,"")
table.nom[ind] = r.nom
table.Prenom[ind] = r.prenom
HLitSuivant(r)
END
END

2)
Nous avons essayé cette méthodes :
- on crée une requete (.WDR)
- On lui passe un parametre : HExécuteRequête(Requête_Client_test,1)
et on lie une table a ce fichier.

Avis :
A mon avis, la 1ere méthode est plus lente dû a l'ajout et a l'affichage dans la table mémoire.
Comme dans la deuxieme méthodes, la table est liée au fichier, c'est plus rapide.

Question :
Si c'est bien comme je pense... Y a t il moyen de lier une table a une source de données ? ou y a t il moyen de modifier totalement une requete WDR par programmation ?

Merci pour vos réponses.


Contribution le : 25/09/2006 11:20
Créer un fichier PDF de la contribution Imprimer


Re: Probleme de vitesse - SQL
DSI WDF
Inscrit:
15/03/2005 14:22
Post(s): 238
Le plus simple :
NomTable.NomColone..LiaisonFichier= "NomSource.NomCol"
...
NomTable..FichierParcouru = "NomSource"

Cela permet d'avoir la souplesse de l'utilisation des requetes "texte" (hexecuterequeteSQL) et de bénéficier de la rapiditée des tables fichiers.

NB : Pour l'ajout de l'enegistrement, il est préférable de faire ainsi :
tableajouteligne(table,r.nom + tab + r.prenom)

Contribution le : 25/09/2006 13:56
Créer un fichier PDF de la contribution Imprimer


Re: Probleme de vitesse - SQL
Developpeur WDF
Inscrit:
02/05/2003 09:10
Post(s): 103
Voila, j'ai effectué le test.

Code :
------
sql est une chaîne
ind est un entier
r est une Source de Données()
sql = "SELECT * FROM Client_fournisseur where type = 2"
IF NOT HExécuteRequêteSQL(r,sql) THEN msg(2,sql)

Table..FichierParcouru = r


Constatation :
--------------
Les champs se remplissent bien mais j'ai une erreur lors du clic sur une ligne de la table en question :

Dump de l'erreur du module <WD90OBJ.DLL> <9.00Drf>.

- Niveau : erreur fatale (EL_FATAL)

- Code erreur : 10085

- Code erreur WD55 : 0

- Pas de code d'erreur système

- Pas de message d'erreur système

- Que s'est-il passé ?
Le champ 'Table' n'a pas pu s'initialiser, car il a rencontré l'erreur Hyper File suivante :
=============================
L'objet r n'a pas été trouvé.
=============================

- Infos de debug :
Chargement de la partie exécution d'un objet
Nom logique : r
Type cherché : 5

- Pas d'info attachée

- Identifiant dans le .err : 10085

Apparament, il ne reconnait plus r(ma source de données).
PS : je n'ai pas de code dans la sélection de la table, ni dans le clic.

Contribution le : 26/09/2006 14:02
Créer un fichier PDF de la contribution Imprimer


Re: Probleme de vitesse - SQL
DSI WDF
Inscrit:
15/03/2005 14:22
Post(s): 238
il faut que la source de données soit encord déclaré...
Solution : Déclarer cette source en global dans la fenetre.

Contribution le : 26/09/2006 15:27
Créer un fichier PDF de la contribution Imprimer


Re: Probleme de vitesse - SQL
Developpeur WDF
Inscrit:
02/05/2003 09:10
Post(s): 103
juste .... ;o) j'essaie ca de suite... erreur conne, désolé.

Contribution le : 26/09/2006 15:37
Créer un fichier PDF de la contribution Imprimer


Re: Probleme de vitesse - SQL
Developpeur WDF
Inscrit:
21/06/2005 18:17
Post(s): 115
Juste une proposition ... je ne sais pas si ça sera plus rapide ou non !

Moi au lieu de ça :

sql est une chaîne
r est une Source de Données()
ind est un entier

sql = "SELECT * FROM Client"
  IF NOT HExécuteRequêteSQL(r,sql) THEN msg(2,sql)
    IF HNbEnr(r) > 0 THEN
      HLitPremier(r)
      WHILE NOT HEnDehors(r)
        ind = tableajouteligne(table,"")
        table.nom[ind] = r.nom
        table.Prenom[ind] = r.prenom
        HLitSuivant(r)
      END
    END


Je ferai ça :

sql est une chaîne
r est une Source de Données()
ind est un entier

sql = "SELECT * FROM Client"
SI HExécuteRequêteSQL(r,hRequêteDéfaut,sql) ALORS
    FichierVersTableMémoire(table,r)
FIN


Bon cela reste a tester pour voir la différence de temps d'affichage.

Contribution le : 27/09/2006 11:27
Créer un fichier PDF de la contribution Imprimer


Re: Probleme de vitesse - SQL
Developpeur WDF
Inscrit:
02/05/2003 09:10
Post(s): 103
Je pense que se serait la meme chose.
Mais merci

Est-ce que qq aurait encore une autre facons ?
a part Hfiltre

Contribution le : 27/09/2006 13:59
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


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.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2