IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

LabVIEW Discussion :

[LabWindows/CVI 8.0] Question sur DBActivateMap


Sujet :

LabVIEW

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 44
    Points : 30
    Points
    30
    Par défaut [LabWindows/CVI 8.0] Question sur DBActivateMap
    Bonjour,

    J'avais lancé un post sur un problème de lenteur pour récupérer la valeur max d'un champ (nom du post : Vitesse d'exécution de requête entre max et order desc limit 1).

    En fait, il y a bien un problème de vitesse (ou de lenteur) mais il ne vient pas de la requête "select max". Du coup, pour ne pas mélanger les questions, je débute un nouveau post (j'espère bien faire).

    Après avoir appris comment mettre des points d'arrêt dans un programme en LabWindows par un programmeur (je ne suis qu'utilisateur), il semble (je ne jure plus de rien maintenant) que le temps d'attente important vienne de la commande
    statementHandle=DBActivateMap(mapHandle, "Table1");
    (et il y a aussi un rescode=DBDeactivateMap(mapHandle); après l'enregistrement des données).

    Je ne sais pas à quoi sert cette commande mais elle est lancée à chaque fin d'acquisition avant de copier les données dans la base MySQL (une acquisition dure environ 1 seconde mais cette commande rajoute 8 secondes !!! - 8 secondes perdues avant de passer à l'acquisition suivante).

    Est-ce que quelqu'un pourrait m'expliquer à quoi sert cette commande et si c'est nécessaire de la lancer avant d'écrire quelque chose dans la base ?

    Merci par avance,
    Bonne fin de journée,
    Ptit Bleu.

  2. #2
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Quel est le langage de programmation utilisé ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 44
    Points : 30
    Points
    30
    Par défaut
    Bonjour Smyley,

    Le programme a été développé en LabWindows/CVI 8.0.
    Je ne fais qu'utiliser le programme mais je peux regarder comment il marche (c'est comme ça que j'ai vu ce problème de lenteur) et le modifier (si on me dit comment faire car je n'y connais pas grand chose).

    Merci par avance pour un petit tuyau pour booster le programme,
    Ptit Bleu.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 44
    Points : 30
    Points
    30
    Par défaut
    Juste pour information : si on fait tourner le programme avec une base vierge, il n'y a plus d'attente entre 2 acquisitions.
    Mais comme mon but est de faire des acquisitions pour ensuite analyser les données, la table va forcément grossir (et assez vite) et le délai aussi


    Merci par avance pour votre aide,
    Bon week-end,
    Ptit Bleu.

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 47
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par ptit_bleu Voir le message
    Juste pour information : si on fait tourner le programme avec une base vierge, il n'y a plus d'attente entre 2 acquisitions.
    Mais comme mon but est de faire des acquisitions pour ensuite analyser les données, la table va forcément grossir (et assez vite) et le délai aussi


    Merci par avance pour votre aide,
    Bon week-end,
    Ptit Bleu.
    Bonjour,

    Peux tu me dire plus sur le source STP afin que je puisse investiguer davantage.
    Merci

  6. #6
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 47
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par ptit_bleu Voir le message
    Bonjour,

    J'avais lancé un post sur un problème de lenteur pour récupérer la valeur max d'un champ (nom du post : Vitesse d'exécution de requête entre max et order desc limit 1).

    En fait, il y a bien un problème de vitesse (ou de lenteur) mais il ne vient pas de la requête "select max". Du coup, pour ne pas mélanger les questions, je débute un nouveau post (j'espère bien faire).

    Après avoir appris comment mettre des points d'arrêt dans un programme en LabWindows par un programmeur (je ne suis qu'utilisateur), il semble (je ne jure plus de rien maintenant) que le temps d'attente important vienne de la commande
    statementHandle=DBActivateMap(mapHandle, "Table1");
    (et il y a aussi un rescode=DBDeactivateMap(mapHandle); après l'enregistrement des données).

    Je ne sais pas à quoi sert cette commande mais elle est lancée à chaque fin d'acquisition avant de copier les données dans la base MySQL (une acquisition dure environ 1 seconde mais cette commande rajoute 8 secondes !!! - 8 secondes perdues avant de passer à l'acquisition suivante).

    Est-ce que quelqu'un pourrait m'expliquer à quoi sert cette commande et si c'est nécessaire de la lancer avant d'écrire quelque chose dans la base ?

    Merci par avance,
    Bonne fin de journée,
    Ptit Bleu.
    excuses moi juste que j'arrive pas trouver sur help la commande en question peux tu STP me dire plus.
    Merci

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 44
    Points : 30
    Points
    30
    Par défaut
    Salut Beginner,

    Désolé pour la réponse tardive mais je ne m'étais pas connecté depuis longtemps mais j'ai toujours le même problème : dès que la base grossit, le temps d'accès augmente et d'après mes tests, c'est la commande DBActivateMap qui pose problème.

    Je ne peux pas mettre le script en ligne mais juste un petit bout générique, en espérant que ça te permette de m'aider.
    La ligne qui pose problème est la première :
    statementHandle = DBActivateMap (mapHandle, "Table1");

    Au niveau doc, j'ai trouvé des infos dans ce document :
    http://www.ni.com/pdf/manuals/320960a.pdf
    qui décrit DBActivateMap (page 35 / 99)

    Un collègue m'a dit qu'en remplaçant la commande DBActivateMap par une requête bâteau cherchant un n° dans une colonne indexée permettrait peut-être une connexion et serait plus rapide.
    Mais je ne sais pas tester son idée

    Si tu as une idée (ou quelqu'un d'autres bien sûr),
    Je suis preneur.

    Bon week-end,
    Ptit Bleu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    // Activate the link with the variables 
    statementHandle = DBActivateMap (mapHandle, "Table1");
    if (statementHandle < 0 )
    {
    sprintf ( errMessage, " Error Activating Database");
    return 1;
    }
    
    // Create the record
    resCode = DBCreateRecord (statementHandle);
    if (resCode != DB_SUCCESS)
    {
    sprintf ( errMessage, " Error Creating Record Datadase");
    return 1;
    }
    
    // Insert the data into the database
    resCode = DBPutRecord (statementHandle);
    if (resCode != DB_SUCCESS)
    {
    sprintf ( errMessage, " Error Putting Record Datadase");
    return 1;
    }
    
    // Deactivate the links with variables
    resCode = DBDeactivateMap(mapHandle);

  8. #8
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    Citation Envoyé par ptit_bleu Voir le message
    Un collègue m'a dit qu'en remplaçant la commande DBActivateMap par une requête bâteau cherchant un n° dans une colonne indexée permettrait peut-être une connexion et serait plus rapide.
    Mais je ne sais pas tester son idée
    Probablement. A ce qu'il semble, d'après la doc, DBActivateMap récupère toute la table ou quelque chose comme ça. Donc plus il y a de données dedans plus ça va prendre de temps.

    Mais je ne vois pas dans la doc comment on est supposé faire des ajouts sans d'abord récupérer des données... Une recherche indexée minimaliste est peut-être justement le contournement usuel.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 44
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    Un petit message juste pour vous tenir au courant (même si le problème étant assez spécifique, je ne suis pas sûr que cela intéresse beaucoup de monde).

    Grâce à l'équipe de National Instruments que j'avais contactée sur leur forum, le problème est résolu.

    Sans rentré dans le détail, ils ont remplacé la connexion par DBActivateMap avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dbHandle = DBConnect (SaveNomDataBase);
    et créer une requête pour insérer les données avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sprintf (requete,"INSERT INTO ...
    DBImmediateSQL (dbHandle, requete);
    Et on finit avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resCode = DBDisconnect(dbHandle);
    Depuis ces modifs, plus de perte de vitesse

    Ils avaient d'autres propositions pour optimiser le code mais ça demandait de revoir le code plus en profondeur et je ne m'en sentais pas capable.
    Déjà que pour faire ces petites modifs, ça m'a pris une plombe (j'en profite d'ailleurs pour féliciter l'équipe de NI pour leur patience car il leur en a fallu ...).

    Voilà, c'est tout (pour le moment)
    Bonne journée,
    Ptit Bleu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [debutant] Questions sur 1 futur projet
    Par cyrull22 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 28/04/2003, 21h49
  2. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 21h23
  3. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  4. Réponses: 2
    Dernier message: 11/08/2002, 21h27
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo