Connecteur C / MariaDB - C - Programmation
Marsh Posté le 19-07-2019 à 18:51:38
Je suppose que tu compiles déjà avec -Wall -Werror ou un truc semblable et que ça ne sors rien?
C'est quoi usage_evo2.h? Le moteur de recherche ne connaît pas...
Essaye de simplifier ton problème en virant la partie MQTT et si possible le evo_mystère, ça sera plus facile (même déjà possible) pour nous de compiler et débugger ce truc.
Marsh Posté le 20-07-2019 à 09:10:09
bind[1].is_null= 0;
bind[1].length= 0;
Si je lis bien la doc, https://dev.mysql.com/doc/refman/8. [...] tures.html
is_null is a pointer to a boolean scalar, not a boolean scalar,
donc ça fait un premier truc qui me semble plantogène, et
For input parameter data binding, set *length to indicate the actual length of the parameter value stored in *buffer.
donc on devrait avoir
size_t timesize = sizeof(MYSQL_TIME);
bind[1].buffer_type= MYSQL_TYPE_DATETIME;
bind[1].length=×ize;
bind[1].buffer_length=timesize;
bind[1].buffer= (char *)×tamp;
et ça devrait suffire, non?
A+,
Marsh Posté le 20-07-2019 à 09:41:51
J'ai pas la main là dessus tout de suite, mais je promets de regarder ça de plus prêt
Comme je débute en C, je maitrise pas forcément très bien les pointeurs : par exemple, (char *)×tamp, j'ai pas encore compris comment ça marche
Marsh Posté le 20-07-2019 à 14:13:14
Tu compiles bien avec -Wall -Werror? Indispensable pour un débutant, surtout quand on bricole les pointeurs!
Marsh Posté le 20-07-2019 à 18:16:08
Oui, j'utilise code block et gcc. C'est par défaut et je n'ai aucune erreur. Mais j'ai pas encore eu le temps de tester les propositions de gilou. J'étais sur la doc de Maria DB, bien moins complète que celle de mysql.
Marsh Posté le 22-07-2019 à 10:48:49
Pour repartir sur de bonnes bases, la version épurée :
Code :
|
Marsh Posté le 22-07-2019 à 10:52:27
En corrigeant avec la proposition de Gilou,
j'ai une erreur de type sur le ×ize. :
Code :
|
C:\C\test2\main.c|3|warning: assignment from incompatible pointer type.
Marsh Posté le 22-07-2019 à 11:49:18
Tu remplaces 1 par
unsigned long timesize = sizeof(MYSQL_TIME);
et ça devrait coller.
Et comme buffer devrait être un void *, au vu de la doc, tu peux aussi tant que tu y es faire pour 5
bind[3].buffer= (void *)×tamp;
A+,
Marsh Posté le 22-07-2019 à 12:26:56
ça marche mieux ! enfin, j'en reviens au départ, ça compile avec des données sans doute mieux traitées.
Par contre :
Citation : Program received signal SIGSEGV, Segmentation fault. |
D'autre part, sachant que :
Citation : length is ignored for numeric and temporal data types because the buffer_type value determines the length of the data value. |
J'ai carrément viré la ligne 3, mais ça ne change rien au problème.
Marsh Posté le 22-07-2019 à 16:35:37
Bon désolé, j'ai finalement réussi à compiler le truc mais je sais pas le faire fonctionner, pourtant j'ai investi du temps...
Pour ceux qui veulent tester et qui sont sous Debian faut être sous Debian 10.
Marsh Posté le 22-07-2019 à 16:49:35
Merci d'avoir essayé en tout cas
J'vais essayer de contacter les dev via IRC, parce que je suis bien coincé là
ça fait un peu 4 jours que je suis sur cette connerie.
Marsh Posté le 22-07-2019 à 17:08:12
rat de combat a écrit : Bon désolé, j'ai finalement réussi à compiler le truc mais je sais pas le faire fonctionner, pourtant j'ai investi du temps... |
pourquoi Debian 10 d'ailleurs ?
(j'suis sous windows )
Marsh Posté le 22-07-2019 à 18:24:11
sinon, j'ai trouvé cette page là dans la doc de MYSQL :
https://dev.mysql.com/doc/refman/8. [...] dling.html
mais ça m'aide pas trop
Marsh Posté le 22-07-2019 à 18:32:11
_pollux_ a écrit : |
Parce que il faut une version assez récente de MariaDB et celle de Debian 9 semble trop ancienne. J'ai pas poussé trop loin, j'ai changé de machine virtuelle.
Marsh Posté le 22-07-2019 à 18:34:53
ok.
Bon, personne ne répond sur IRC, semblerait qu'il y ait des plages horaires pour les réponses ... par désespoir, j'ai laissé un message ici : https://mariadb.zulipchat.com/#narr [...] ew-members
C'est compliqué de joindre les teams de dev maintenant, on est loin de la facilité d'un forum
Marsh Posté le 24-07-2019 à 14:25:16
Bon, problème non résolu frontalement. Cependant, d'un strict point de vue fonctionnel, j'ai fait sans "prepared statement functions" et ça marche.
Marsh Posté le 18-07-2019 à 15:15:01
Salut, je galère...
Je souhaite faire une application en C qui récupère des données d'un broker MQTT pour les stocker dans une bdd MariaDB.
Je m'en sors globalement, sauf au moment de l'insertion du DATETIME.
Il m'a fallut déjà un jour pour comprendre que je ne pouvais pas mettre un simple string correctement formaté mais qu'il fallait une structure MYSQL_TIME.
Maintenant, le programme plante sans explication. Par d'erreur SQL, rien, ça sort du programme avec l'erreur suivante :
Program received signal SIGSEGV, Segmentation fault.
In mysql_stmt_warning_count () (C:\Users\c.dutriez\Documents\Programmation_EVO2\usage_evo2\bin\Debug\libmariadb.dll)
#3 0x00401f30 in main (argc=1, argv=0xd2ef0) at C:\Users\c.dutriez\Documents\Programmation_EVO2\usage_evo2\main.c:375
C:\Users\c.dutriez\Documents\Programmation_EVO2\usage_evo2\main.c:375:10954:beg:0x401f30
At C:\Users\c.dutriez\Documents\Programmation_EVO2\usage_evo2\main.c:375
#3 0x00401f30 in main (argc=1, argv=0xd2ef0) at C:\Users\c.dutriez\Documents\Programmation_EVO2\usage_evo2\main.c:375
C:\Users\c.dutriez\Documents\Programmation_EVO2\usage_evo2\main.c:375:10954:beg:0x401f30
voici une partie du programme :
Pour info, j'ai bien le message ERREUR qui s'affiche, mais pas celui ISNCRIPTION, ça plante donc bien après le paramétrage de stmt, mais pendant son exécution.
Si vous avez une piste, je suis preneur. PS : si à la place de datetime, je remplace par n'importe quelle autre type de données (string, ....), la donnée s'inscrit dans la BDD sans problème.
Message édité par _pollux_ le 18-07-2019 à 15:26:50
---------------
Le topic du sport électronique@hfr : watch the l33t !