|
| enregistrer un chaîne de données entière |
| Iniciado por Maxime, 23,may. 2019 14:37 - 11 respuestas |
| |
| | | |
|
| |
Miembro registrado 106 mensajes |
|
| Publicado el 23,mayo 2019 - 14:37 |
Bonjour ,
J'aimerai pouvoir enregistré une chaîne dans sa totalité . Actuellement ma chaîne ce compose de la sorte : 256 ,512 , ... , 2048 avec un Retour chariot a chaque valeur. lors de l'enregistrement je n'ai que 256 sur 8 lignes.
Mon programme ce connecte sur un automate et lit les valeurs toutes les 5 secondes ces valeurs change mais ne s'enregistre pas correctement . En utilisant aucune interface graphique. Avez vous des idées de fonction a utilisé pour mon cas ?
Cordialement M.Plouy |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 948 mensajes |
|
| Publicado el 23,mayo 2019 - 16:50 |
Bonjour, "J'aimerai pouvoir enregistré une chaîne dans sa totalité" mais vous ne précisez pas l'endroit ou vous voulez sauver !! Fichier à plat type txt, csv xls ou base de données ?? |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 3.778 mensajes |
|
| Publicado el 23,mayo 2019 - 16:52 |
| Maxime, avec un bout de code on pourra t'aider plus efficacement. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 106 mensajes |
|
| Publicado el 24,mayo 2019 - 09:24 |
Bonjour ,
voici mon code ceci est un protocole modbus tcp/ip . Il ce connecte a un automate et récupère une chaîne. J'aimerai savoir comment j'enregistre la totalité de la chaîne dans une base de donnée HFSQL directement sur windev.
Cordialement M.Plouy
Procedure _ID_Etat()
Nom_socket est une chaîne = "connexion" Debut_registre est un entier = "1" Nb_mots est un entier = "8" i est un entier Tailleréponse est un entier nValeur est un entier nValeur1 , nValeur2 sont des entier sans signe sur 1 octet nNb_octet_reponse est un entier sans signe sur 1 octet nStartLow est un entier sans signe sur 1 octet StartHigh est un entier sans signe sur 1 octet LengthLow est un entier sans signe sur 1 octet LengthHigh est un entier sans signe sur 1 octet sReponseautomate est une chaîne Reponse_autom est un Buffer MbusQuery est un Buffer sur 12 octet
nStartLow = Modulo(Debut_registre ,256) StartHigh = Debut_registre / 256 LengthLow = Modulo( Nb_mots, 256) LengthHigh = Nb_mots / 256
MbusQuery[[1]] = 0 MbusQuery[[2]] = 3 MbusQuery[[3]] = 0 MbusQuery[[4]] = 0 MbusQuery[[5]] = 0 MbusQuery[[6]] = 6 MbusQuery[[7]] = 0 MbusQuery[[8]] = 3 MbusQuery[[9]] = StartHigh MbusQuery[[10]] = nStartLow MbusQuery[[11]] = LengthHigh MbusQuery[[12]] = LengthLow
SI SocketEcrit(Nom_socket,MbusQuery)= Vrai ALORS Reponse_autom=SocketLit(Nom_socket,Faux) Tailleréponse=Taille(Reponse_autom) nNb_octet_reponse=Reponse_autom[[9]] POUR i=10 À nNb_octet_reponse + 9 PAS 2 nValeur1=BufferVersEntier(Reponse_autom,i,1) nValeur2=BufferVersEntier(Reponse_autom,i-1,1) nValeur=(nValeur2*256) + nValeur1 sReponseautomate=sReponseautomate+NumériqueVersChaîne(nValeur)+RC Metier.IDMachine=sReponseautomate HAjoute(Metier,hIgnoreDoublon) FIN RENVOYER(sReponseautomate) SINON RENVOYER("Erreur lors de la demande de lecture ") FIN |
| |
| |
| | | |
|
| | |
| |
| Publicado el 24,mayo 2019 - 11:01 |
Les deux seules lignes intéressantes là dedans sont :
Metier.IDMachine=sReponseautomate HAjoute(Metier,hIgnoreDoublon)
et là tout semble bizarre ! Vous mettez la réponse de l'automate dans la rubrique IDMachine ? c'est un jeu de piste ? Et, elle est déclarée comment cette rubrique ?Vu le besoin, il faut un texte au format Memo.
Quant au HAjoute avec un hIgnoreDoublon, ce n'est pas l'objet du post, mais comment dire... ce n'est pas une utilisation normale... |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.362 mensajes |
|
| Publicado el 24,mayo 2019 - 12:38 |
Dominique a écrit : > Quant au HAjoute avec un hIgnoreDoublon, ce n'est pas l'objet du post, mais comment dire... ce n'est pas une utilisation normale...
Oui mais comme ça il n'y a plus d'erreur d'intrégrité 
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 106 mensajes |
|
| Publicado el 24,mayo 2019 - 12:47 |
Le soucis c'est que dans ma chaîne j'ai plusieurs valeurs qui ce suivent et uniquement la premier s'enregistre . je sais pas comment faire pour avoir la totalité de ma chaîne dans ma BDD |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.362 mensajes |
|
| Publicado el 24,mayo 2019 - 14:02 |
C'est ,êntre autre, une question d'affectation. Tu affectes une chaîne à un entier (qui plus est une PK mais là, c'est un autre problème.) La machine essaye de faire de son mieux, elle récupère la première chose qui ressemble à un entier. Elle ne sait pas que c'est une suite d'entier, pour elle, 256,.... c'est un réel. On lui a dit que Metier.IDMachine c'était un entier donc elle récupère la partie entière de ce qu'on lui envoie.
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 948 mensajes |
|
| Publicado el 24,mayo 2019 - 14:03 |
Bonjour, quel est le type exacte de la colonne : Metier.IDMachine ? |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 106 mensajes |
|
| Publicado el 24,mayo 2019 - 15:03 |
| metier.IDmachine est un numerique de type entier |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 948 mensajes |
|
| Publicado el 24,mayo 2019 - 15:40 |
Bonjour Vous essayez de mettre dans un entier, une chaine de caractère et ça ce n'est pas correct ! Vous devez mettre la chaine sReponseautomate dans une colonne de type chaine ou de type memo |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 1.640 mensajes |
|
| Publicado el 24,mayo 2019 - 16:54 |
Si le but c'est de créer autant d’enregistrements de Metier qu'il y a de lignes dans ta chaine, il faut faire :
POUR TOUTE chaîne sID de sReponseautomate SEPAREE PAR RC Metier.IDMachine=sID HAjoute(Metier,hIgnoreDoublon) FIN |
| |
| |
| | | |
|
| | | | |
| | |
|