From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

Discussions au sujet de NI LabVIEW

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

Problème récupération donnée Base de donnée SQL

Bonjour à tous,

 

Je réalise actuellement un banc de test qui est composé en gros d'un générateur de signal, une carte matrice et une carte scope. Pour mes tests et vérification futur, je dois stocker le signal généré pour chaque test dans une base de donnée ce qui permet, le jour ou il y a un soucis, de pouvoir vérifier l'allure du signal qui avait été envoyé pour ce test.

 

Je ne récupère qu'une petite partie du signal, juste pour voir l'allure, l'amplitude du signal etc... Cela représente 5000 points capturés et sauvegardés dans la base de données. Pour cela, j'utilise une base de donnée SQL en local sur le PC et SQL Management studio, je veux dire par la que niveau gestion de la base, je fais ce que je veux. Au niveau LabVIEW, j'utilise le toolkit database connectivity.

 

Pour le stockage, je procède de cette façon, j'enregistre tout d'abord la totalité du signal dans un fichier temporaire:

Save to file.png

Si le test ce passe bien jusqu'à la fin, je met en forme ce signal pour l'enregistrer dans la base de donnée avec ce VI:

save file to database.png

Ouvre le fichier => récupère 5000 point de la courbe => ajoute un séparateur | entre chaque point => décompose la chaine de point obtenu en plusieurs colonne de 8000 caractère => converti en variant pour envoyer dans la Base de donnée.

 

Bon jusque la tout va bien, j'ai bien tout les points de mon signal dans ma base de donnée stocké dans différentes colonnes.

 

C'est pour la relecture que je rencontre un problème...

Read DataBase.png

Je crée ma requête SQL qui va ressembler à ca: SELECT Curve1 FROM Curves WHERE Id_Test ='1' AND Numero_Test ='12' par exemple. J'ai bien testé ma requête directement dans Management Studio et il me revoit bien ma chaine caractère contenant mes points donc elle est bonne. Sauf que dans labview, le VI FETCH ALL me renvoi une chaine qui n'est pas vide mais ou les points sont invisibles... j'ai ca Variant = " ?                                                                " du coup, je ne peux pas reconstruire mon signal pour l'afficher sur un graphe...

 

Pourquoi, Labview me renvoi une chaine de caractère invisible?

Quelqu'un a déjà eu ce soucis? Avez vous une autre méthode pour stocker et relire un grand nombre de point a partir d'une Base de Donnée?

 

Merci d'avance pour votre aide.

 

0 Compliments
Message 1 sur 8
1 064 Visites

Bonjour JC51,

 

As-tu regarder ce que renvoie le VI Fetch Recordset Data? Ton soucis vient peut etre du fait que tu n'indexe pas correctement le tableau 2D renvoyé. 

 

De manière générale, j'utilise le VI Database Variant To Data pour redresser mes données en tableau 2D de chaine de caractere, puis je viens récupérer les éléments d'intérêt en indexant ce tableau. 

 

    Benjamin R.


Senior LabVIEW Developer @Neosoft


0 Compliments
Message 2 sur 8
1 026 Visites

Bonjour Benjamin et merci pour ta réponse,

 

Oui j'ai bien regardé ce que me ressort le VI Fetch Recordset Data et il me renvoi bien un tableau mais les donnée présentes sont invisibles ( il me renvoi ca exactement: variant _ ? _ >                               ). 

Je peux sélectionner manuellement tout ces caractères invisible après le ?_> et lorsque que je les copies/colles dans un Excel par exemple, je vois bien les valeurs…

Les donnée sont stocké en type nvarchar(Max), apparemment le max est de 4000 points du coup j'ai fait en sorte de limiter le nombre de caractère enregistré dans la base à 3000 caractères donc je ne dépasse pas la limite de nvarchar(Max)

 

Autre découverte, dans SQL Management Studio, lorsque je vais voir les données qui ont été enregistré dans ma table en faisant "Modifier les 200 premiers enregistrement" je vois bien les 200 premiers enregistrement avec tout les points enregistré sauf que lorsque je clic sur une case particulière, les données présentes dans cette case deviennent invisibles aussi... et meme chose, je peux tout sélectionner, copier /coller dans un excel et je vois bien les données.

 

Du coup, je me demande si il s'agit d'un problème au niveau de Labview, de SQL server ou de ma méthode pour enregistrer dans la base de donnée qu'il n'apprécie pas... Le truc c'est que je n'ai pas de problème pour les autres "petit" enregistrements mais des qu'il y a beaucoup de caractère ca ne fonctionne plus...

 

0 Compliments
Message 3 sur 8
1 016 Visites

Bonjour,

 

Pourquoi est il nécesseraire de transformer le cluster en variant ?

Pourrait on avoir également des informations sur la commande d'INSERT INTO pour voir la réparation des données lors de l'écriture?

0 Compliments
Message 4 sur 8
998 Visites

 

Selon moi tu devrais avoir un string à cet endroit, et non pas un cluster :

Walker34_0-1648136477147.png

 

0 Compliments
Message 5 sur 8
994 Visites

Merci pour l'intérêt que vous portez  a mon problème,

 

Cependant le problème de vient pas de la reconversion de variant en tableau de chaine.

 

Je n'ai aucune donnée au niveau de la sortie du sous VI database FETCH ALL alors que j'ai bien testé ma requêtée SQl directement dans management studio et elle est correct, elle me renvoi bien les donnée que je veux.

 

J'ai fait d'autres test: Sur mon PC de développement principal, je me suis connecté à la base de donnée et  j'arrive à récupérer les données sans soucis.

 

La différence entre les 2 PC, Mon PC et sous Windows 10 et avec la version 2021 de Labview alors que le PC du banc de test est sous Windows 7 et en version 2020 de Labview. J'ai voulu mettre a jour la version de Labview en 2021 mais cette version n'est pas disponible pour Windows 7....

 

Je commence vraiment a penser qu'il y a un soucis au niveau du VI fetch all dans la version 2020 de labview... ou alors c'est Windows 7 qui pose problème...

 

Voici deux VI que j'ai créé pour tester plus rapidement mon problème, plutôt que de toucher directement au programme du banc. Le Vi d'écriture reprend le même principe que pour mon programme principal et le VI de lecture vient récupérer les données inscrites dans la base de donnée.

Tout télécharger
0 Compliments
Message 6 sur 8
983 Visites

Windows7 LV2020.png

Voila ce que j'obtiens... les caractères sont présents mais invisibles... alors que sur mon PC sous Winows 10 et Labview 2021 aucun problème.

0 Compliments
Message 7 sur 8
977 Visites

Bonjour,

 

Pour tenter de cerner le problème, est-ce que vous avez testé l'enregistrement avec un autre séparateur ? Au hasard, un point-virgule, par exemple. Pas sûr que le "pipe" soit le meilleur caractère à utiliser pour ce genre de manip...

 

Cordialement,

0 Compliments
Message 8 sur 8
951 Visites