[RESOLU]Erreur insert (UseMySqlDataBase)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
omega
Messages : 617
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

[RESOLU]Erreur insert (UseMySqlDataBase)

Message 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
Dernière modification par omega le sam. 03/avr./2021 16:31, modifié 3 fois.
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Erreur insert (UseMySqlDataBase)

Message 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 ?)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
omega
Messages : 617
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Erreur insert (UseMySqlDataBase)

Message 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à
Win7 (x64) 64 bits Pb 5.72
Mesa
Messages : 1093
Inscription : mer. 14/sept./2011 16:59

Re: Erreur insert (UseMySqlDataBase)

Message par Mesa »

Avatar de l’utilisateur
omega
Messages : 617
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Erreur insert (UseMySqlDataBase)

Message 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)
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
omega
Messages : 617
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Erreur insert (UseMySqlDataBase)

Message 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...)
*
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
case
Messages : 1527
Inscription : lun. 10/sept./2007 11:13

Re: Erreur insert (UseMySqlDataBase)

Message 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');")
ImageImage
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: Erreur insert (UseMySqlDataBase)

Message 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.
Avatar de l’utilisateur
omega
Messages : 617
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Erreur insert (UseMySqlDataBase)

Message 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
Win7 (x64) 64 bits Pb 5.72
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: Erreur insert (UseMySqlDataBase)

Message 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 ? :arrow: DatabaseUpdate(0, "COMMIT")

Annuler ? :arrow: 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 8)
Avatar de l’utilisateur
omega
Messages : 617
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Erreur insert (UseMySqlDataBase)

Message par omega »

Merci encore c'est très gentil, je vais tester...
Win7 (x64) 64 bits Pb 5.72
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: Erreur insert (UseMySqlDataBase)

Message par Marc56 »

Après essai, cela ne fonctionne pas ainsi dans PB (pas deux commandes SQL en même temps)

Code : Tout sélectionner

DatabaseUpdate(0, "BEGIN; SELECT ... FOR UPDATE)
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

Code : Tout sélectionner

DatabaseUpdate(0, "COMMIT;")
ou annuler

Code : Tout sélectionner

DatabaseUpdate(0, "ROLLBACK;")
Reste à tester sur l'autre poste quel message d'erreur est envoyé si on tente d'éditer un enregistrement verrouillé.
À suivre...

:wink:
Répondre