Page 1 sur 1
[RESOLU]Erreur insert (UseMySqlDataBase)
Publié : dim. 21/mars/2021 20:21
par omega
Bonsoir,
Franchement je suis bloqué, je n'arrive pas à comprendre comment faire pour enregistrer des données dans ma table, modifier ou supprimer des enregistrements... J'ai vu le tuto de MariaDB et même l'aide de Pb, j'ai appliqué l'exemple de la création de table, mais en vain.
J'obtiens toujours erreur de syntaxe ou erreur au niveau debug.
Ce que je voudrais savoir:
1. Comment créer une table en codant sans utiliser l'éditeur MariaDB
2. Comment Ajouter, Modifier ou supprimer des enregistrements
3. Comment parcourir le contenu de ma table.
C'est tout ce que je veux savoir (en utilisant UseSqliteDatabase, je n'ai aucun problème), par contre en utilisant MySqlDb, je suis coincé, j'ai même repris le même exemple donné par MariaDB, une erreur de syntaxe est affiché.
Regardez ce code:
Code : Tout sélectionner
UseMySQLDatabase()
;If OpenDatabase(0, "host=192.168.1.36 port=3306 dbname=elevage", "root", "123456")
If OpenDatabase(0, "host=127.0.0.1 port=3306 dbname=elevage", "root", "123456")
Debug "Connecté à MySQL"
Else
Debug "La connexion a échoué: "+DatabaseError()
EndIf
;Jusqu'ici c bon pas d'erreur (connecté à MySql) le confirme
; , CREATE TABLE `employes` (
; `id` Int(11) Not NULL AUTO_INCREMENT;,
; `nom` VARCHAR(20) NULL Default NULL,
; `prenom` VARCHAR(20) NULL Default NULL,
; `telephone` VARCHAR(20) NULL Default NULL,
; `datedenaissance` DATE NULL Default NULL,
; PRIMARY KEY (`id`)
;)
;COLLATE='utf8_general_ci'
;ENGINE=InnoDB
;
If DatabaseUpdate(0, "INSERT INTO employes (nom, weight) VALUES ('apple', '10')")
DatabaseUpdate(0, "INSERT INTO food (prenom, weight) VALUES ('pear', '5')")
DatabaseUpdate(0, "INSERT INTO food (telephone, weight) VALUES ('banana', '20')")
Debug "insert ok"
Else
Debug "erreur insert"
EndIf
;là une erreur d'affiche : (erreur insert)
If DatabaseQuery(0, "SELECT * FROM employes WHERE weight > 7")
While NextDatabaseRow(0)
Debug GetDatabaseString(0, 0)
Wend
FinishDatabaseQuery(0)
EndIf
là, rien ne fonctionne! le debug ne s'affiche pas
CloseDatabase(0)
End
Merci de votre aide
Re: Erreur insert (UseMySqlDataBase)
Publié : dim. 21/mars/2021 21:16
par Ar-S
Salut.
Je n'ai jamais utilisé de MySQL en PB mais ne faut il pas appeler DatabaseQuery avant update ? (vu ce que montre la doc ?)
Re: Erreur insert (UseMySqlDataBase)
Publié : dim. 21/mars/2021 22:05
par omega
Salut Ar-s
Moi non plus je n'ai jamais utilisé MySql en Pb. J'ai un logiciel commercial que je dois installer chez mon client en réseau de 3 postes + le serveur. C'est pour cette raison que je dois utiliser UseMySqlDataBase() pour ça vu que SqLite ne marche pas en réseau. J'ai donc installé MariaDB sur le Pc (host), puis j'ai copié-collé LibMariaDb.lib dans le répertoire de l'application. J'ai réussi (difficilement) à connecter sur la base de données (elevage) mais je n'ai pas pu créer de tables. Je suis obligé de créer toutes les tables que j'utilise (environ une trentaine), je dois ensuite importer mes données en utilisant (je suppose) des fichiers csv. Ensuite, je dois modifier toutes le instructions liées aux tables (update, insert etc...), ce n'est pas très difficile mais c très lourd et cela prend beaucoup de temps. Ce qui est difficile, c'est de trouver quelqu'un qui m'aidera à créer au moins une table (avec 2 champs par exemple), puis comment ajouter, modifier, supprimer et parcourir une table. j'ai fouillé sur internet mais rien à faire malgré la présence des exemples de syntaxe... j'espère trouver quelqu'un ici qui va m'aider j'espère....
voilà
Re: Erreur insert (UseMySqlDataBase)
Publié : mar. 23/mars/2021 10:08
par Mesa
Re: Erreur insert (UseMySqlDataBase)
Publié : mar. 23/mars/2021 13:00
par omega
Merci pour le lien Mesa, mais cette page concerne que les bases de données sqlite moi ce qui m'intéresse c'est la syntaxe MySql. Il y a un seul exemple sur MySql (le dernier post), c'est très intéressant mais dommage que l'exemple donné ne concerne que la lecture des tables. J'aurais souhaité voir la syntaxe pour ajouter des enregistrements, modifier ou supprimer. C'est ça qui m'intéresse vraiment. J'ai cherché partout dans le forum français mais rien de tout ça. Je vais encore chercher dans le forum anglais.
Merci quand même c'est toujours ça (mieux que rien)
Re: Erreur insert (UseMySqlDataBase)
Publié : mar. 23/mars/2021 14:47
par omega
La base existe et la table existe, le problème est une affaire de syntaxe.
J'ai essayé ce code!
Code : Tout sélectionner
Enumeration
#MySql
EndEnumeration
UseMySQLDatabase()
If OpenDatabase(#MySql, "host=127.0.0.1 port=3306 dbname=MaBase", "root", "123456")
Debug "Connecté à MySQL"
Else
Debug "La connexion a échoué: "+DatabaseError()
EndIf
;Jusqu'ici c bon pas d'erreur (connecté à MySql) le confirme
;Ajouter des enregistrements
If DatabaseQuery(#MySql, "INSERT INTO client (id_client,nom,email) values ('2','ali','contact22@gmail.com');")
Debug "insert ok"
Else
Debug "erreur insert"
EndIf
Le message d'erreur est affiché ("erreur insert")
Le 2ème code
Code : Tout sélectionner
Enumeration
#MySql
EndEnumeration
UseMySQLDatabase()
If OpenDatabase(#MySql, "host=127.0.0.1 port=3306 dbname=MaBase", "root", "123456")
Debug "Connecté à MySQL"
Else
Debug "La connexion a échoué: "+DatabaseError()
EndIf
;Jusqu'ici c bon pas d'erreur (connecté à MySql) le confirme
;Ajouter des enregistrements
If DatabaseUpdate(#MySql, "INSERT INTO client (id_client,nom,email) values ('2','ali','contact22@gmail.com');")
Debug "insert ok"
Else
Debug "erreur insert"
EndIf
Le message d'erreur est affiché ("erreur insert")
Je suis vraiment étonné que personne n'a pu répondre à mon appel et le pire c'est qu'il n' a aucun post qui explique comment créer ou modifier une table (en mysql) même sur le forum anglais...
J'ai vu un post de Falsam qui explique en détail ces syntaxes de mises à jour des tables (postgree je crois, mais je ne sais plus où les trouver si seulement Falsam pourrait voir mon message...)
*
Re: Erreur insert (UseMySqlDataBase)
Publié : mar. 23/mars/2021 15:10
par case
je n'y connais rien en base de données mais en relisant ceci je me pose une question
If DatabaseUpdate(#MySql, "INSERT INTO client (id_client,nom,email) values ('2','ali','
contact22@gmail.com');")
le champ id_client est sans doute numerique , ne devrais tu pas noter
Code : Tout sélectionner
If DatabaseUpdate(#MySql, "INSERT INTO client (id_client,nom,email) values (2,'ali','contact22@gmail.com');")
Re: Erreur insert (UseMySqlDataBase)
Publié : mar. 23/mars/2021 15:45
par Marc56
Les seules différences entre les base de données utilisés dans PB sont:
- La chaine de connexion utilisée dans OpenDatabase()
- La syntaxe des requêtes préparées (Prepared statement) (SetDatabaseString()) qui est "?" pour tous et "$1" pour PostgreSQL
https://en.wikipedia.org/wiki/Prepared_ ... #PureBasic
Pour le reste c'est du SQL ordinaire, rien de spécial à PB.
Une bonne adresse:
https://sql.sh/
CREATE TABLE, INSERT étant des requêtes qui modifient des données, on utilise DatabaseUpdate()
Et ne pas oublier qu'avec une base de données multi-utilisateurs, il faut verrouiller la ligne si deux postes accèdent en même temps au même enregistrement en écriture/modification, sinon c'est le dernier qui "écrit" qui efface les données du précédent.
Re: Erreur insert (UseMySqlDataBase)
Publié : mar. 23/mars/2021 16:28
par omega
Merci Marc56
Effectivement rien ne change à part l'ouverture de la bdd. Je viens d'utiliser mes syntaxes (sqlite) dans mon code source (Mysql). Tout fonctionne à merveille et moi qui piétine depuis plus de 4 jours croyant que les syntaxes sont différentes.... Ce sont exactement les mêmes.
Maintenant il me reste un point TRES IMPORTANT A REGLER, tu viens de me dire qu'en cas d'écriture sur la même table par 2 utilisateurs en même temps, il va falloir verrouiller l'enregistrement. Comment faire pur vérrouiller l'enregistrement et où faut il le mettre? et par conséquent comment déverrouiller ???
Merci beaucoup Marc56
Re: Erreur insert (UseMySqlDataBase)
Publié : mar. 23/mars/2021 17:36
par Marc56
Le principe: SELECT ... FOR UPDATE
https://mariadb.com/kb/en/for-update/
1. Verrouiller (en ouvrant une
transaction suivie de la requête)
Par exemple un bouton
éditer qui lance
DatabaseUpdate(0, "
BEGIN; SELECT ... FOR UPDATE)
(deux instructions dans la même)
Modifier les champs
2. Une fois que l'enregistrement est modifié on valide ou on annule.
Deux boutons
OK ?

DatabaseUpdate(0, "
COMMIT")
Annuler ?

DatabaseUpdate(0 , "
ROLLBACK")
Nécessaire pour relâcher le verrou.
On prend même le soin de le relâcher si l'utilisateur passe à autre chose en oubliant
Je te laisse chercher des détails plus récents car ça fait quelques années que je ne l'ai pas fait.
Il faudrait que je m'y remette un jour

Re: Erreur insert (UseMySqlDataBase)
Publié : mar. 23/mars/2021 20:43
par omega
Merci encore c'est très gentil, je vais tester...
Re: Erreur insert (UseMySqlDataBase)
Publié : mer. 24/mars/2021 22:10
par Marc56
Après essai, cela ne fonctionne pas ainsi dans PB (pas deux commandes SQL en même temps)
On a le message "
Commands out of sync; you can't run this command now"
(Sur la console, SQL ça fonctionne pourtant)
Il semble qu'il faut envoyer en deux fois via PB
Comme ça, ça fonctionne.
Code : Tout sélectionner
DatabaseUpdate(0, "BEGIN;")
DatabaseUpdate(0, "SELECT ... FOR UPDATE)
Puis on édite l'enregistrement.
Après, il suffit de valider
ou annuler
Reste à tester sur l'autre poste quel message d'erreur est envoyé si on tente d'éditer un enregistrement verrouillé.
À suivre...
