Section DATABASE
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Section DATABASE
Il existe une section jeux dans ce forum. Pourquoi pas une section Base de données ?
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Section DATABASE
T'es un calé SQL?
Cela pourrait être utile, c'est vrai qu'il y a un bon nombre de topics sur ce sujet.

Cela pourrait être utile, c'est vrai qu'il y a un bon nombre de topics sur ce sujet.
Re: Section DATABASE
Il n'y a pas que MySQL non plus!
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Section DATABASE
@Mekkisoft : Ma demande n'est pas axée sur Mysql exclusivement, d'autant plus que MySql n'est pas natif dans PureBasic. Purebasic supporte en natif SQLite et PostgreSQL.
@Wakering :J'ai quelques connaissance en base de donnés mais peut être pas suffisamment pour être si calé que ça.
D'autres par je suis surtout un peu dérouté par le jeu d'instruction de la bibliothèque database.
un exemple: Pourquoi avoir l'instruction DatabaseQuery et DatabaseUpdate ?
Pourquoi la requete "select * from mytable" exécutée par DatabaseQuery, serait différente de "Delete from mytable where mycondition" exécutée par DatabaseUpdate.
En langage Php quelques soit la requête on utilise mysql_query($strSQL). Pourquoi il n'en est pas de même avec Pure basic ?
Dans d'autres langages, INSERT, UPDATE, DELETE, DROP, etc., retourne TRUE en cas de succès ou FALSE en cas d'erreur.
En pure basic on sait par exemple que la requête "Delete from mytable where mycondition" est correctement exécuté meme si l'enregistrement n'existe pas !! C'est très surprenant. (Ou alors j'ai fait une erreur dans mon code que je n'ai pas vu :p)
@Wakering :J'ai quelques connaissance en base de donnés mais peut être pas suffisamment pour être si calé que ça.
D'autres par je suis surtout un peu dérouté par le jeu d'instruction de la bibliothèque database.
un exemple: Pourquoi avoir l'instruction DatabaseQuery et DatabaseUpdate ?
Pourquoi la requete "select * from mytable" exécutée par DatabaseQuery, serait différente de "Delete from mytable where mycondition" exécutée par DatabaseUpdate.
En langage Php quelques soit la requête on utilise mysql_query($strSQL). Pourquoi il n'en est pas de même avec Pure basic ?
Dans d'autres langages, INSERT, UPDATE, DELETE, DROP, etc., retourne TRUE en cas de succès ou FALSE en cas d'erreur.
En pure basic on sait par exemple que la requête "Delete from mytable where mycondition" est correctement exécuté meme si l'enregistrement n'existe pas !! C'est très surprenant. (Ou alors j'ai fait une erreur dans mon code que je n'ai pas vu :p)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Section DATABASE
Parce que leur fonctions sont différentes:Pourquoi avoir l'instruction DatabaseQuery et DatabaseUpdate ?
1. DatabaseQuery sert à filtrer des enregistrements qui répondent aux critères fixés par la commande SELECT
2. DatabaseUpdate exécute une opération de mise à jour sur un fichier (création d'un nouvel enregistrement, modification ou suppression d'un enregistrement).
Tout simplement parce que la première consiste à sélectionner des enregistrements (comme expliqué en 1), tandis que la seconde, elle consiste à mettre à jour le contenu d'un fichier.Pourquoi la requete "select * from mytable" exécutée par DatabaseQuery, serait différente de "Delete from mytable where mycondition" exécutée par DatabaseUpdate.
Tout simplement parce que les deux opérations se font (une à une) grâce à une seule instruction mais définie par une ou plusieurs conditions (dans $strSQL)En langage Php quelques soit la requête on utilise mysql_query($strSQL). Pourquoi il n'en est pas de même avec Pure basic ?
Pure pasic aussi retourne toujours une valeur (1 ou 0, remplaçant true ou false justement)Dans d'autres langages, INSERT, UPDATE, DELETE, DROP, etc., retourne TRUE en cas de succès ou FALSE en cas d'erreur.
Oui c vrai, mais vous pouvez demander à purebasic de vous retourner l'état de l'exécution en ajoutant un IF avant l'instruction DatabaseUpdate.En pure basic on sait par exemple que la requête "Delete from mytable where mycondition" est correctement exécuté meme si l'enregistrement n'existe pas !! C'est très surprenant.
Anissa
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Section DATABASE
Anissa merci de vos réponses mais malheureusement ne m'apportent pas de réponse.
Voici un code exemple qui montre par exemple qu'une requete de suppression d'un enregistrement me retournera une réponse Vrai (Valeur 1) alors que cet enregistrement n'existe pas.
Ce qui me laisse à penser que ce code retour ne fait que dire que la requête a bien été exécuté, mais ce qui est demandé n'est pas vérifié.
Il aurait été bon que la requête retourne le nombre d'enregistrement concerné par la requête.
J'ai comme solution pour le moment, d’exécuter une requête select pour vérifier que l'enregistrement a bien été supprimer !! 
Voici un code exemple qui montre par exemple qu'une requete de suppression d'un enregistrement me retournera une réponse Vrai (Valeur 1) alors que cet enregistrement n'existe pas.
Ce qui me laisse à penser que ce code retour ne fait que dire que la requête a bien été exécuté, mais ce qui est demandé n'est pas vérifié.
Il aurait été bon que la requête retourne le nombre d'enregistrement concerné par la requête.
Code : Tout sélectionner
UseSQLiteDatabase()
Enumeration
#MaBase; Base de données
EndEnumeration
ReqSql.s ;Requéte SQL
;Creation de la base de données
If CreateFile(#MaBase,"mabase.db3")
CloseFile(#Mabase)
EndIf
If OpenDatabase(#MaBase, #PB_Compiler_FilePath+"/mabase.db3", "", "", #PB_Database_SQLite)
;Création de la table
ReqSql="Create Table MaTable (nom Char(10), id Char(2))"
DatabaseUpdate(#MaBase, ReqSql)
;J'insere quelques enregistrement pour le test
ReqSql= "insert into matable (nom, id) values ('Alain','1')"
DatabaseUpdate(#Mabase, ReqSql)
ReqSql = "insert into matable (nom, id) values ('Marc','2')"
DatabaseUpdate(#Mabase, ReqSql)
ReqSql = "insert into matable (nom, id) values ('Durand','3')"
DatabaseUpdate(#Mabase, ReqSql)
;Suppression des enregistrement dont le code id=1
ReqSql="delete from MaTable where id='1'"
Debug DatabaseUpdate(#Mabase, ReqSql)
;Suppression des enregistrement dont le code id=5 alors que l'enregistrement n'existe pas.
ReqSql="delete from MaTable where id='5'"
Debug DatabaseUpdate(#Mabase, ReqSql)
FinishDatabaseQuery(#Mabase)
CloseDatabase(#MaBase)
EndIf

Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Section DATABASE
Je trouve qu'une section Base de données n'est pas une mauvais idée.
Concernant ton problème, il faut te faire un jeu de fonction qui vérifiera que l'enregistrement existe avant de faire ton ajout/édition/suppression. Du coup il y aura 2 niveaux de contrôle : un niveau technique , la requête a - t - elle fonctionnée ou pas ? ; et un niveau fonctionnel, l'enregistrement que je souhaitais modifié était - il disponible ?
En natif ce n'est pas géré afin de coller au plus grand nombre de SGBD.
Concernant ton problème, il faut te faire un jeu de fonction qui vérifiera que l'enregistrement existe avant de faire ton ajout/édition/suppression. Du coup il y aura 2 niveaux de contrôle : un niveau technique , la requête a - t - elle fonctionnée ou pas ? ; et un niveau fonctionnel, l'enregistrement que je souhaitais modifié était - il disponible ?
En natif ce n'est pas géré afin de coller au plus grand nombre de SGBD.
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Section DATABASE
D'aprés ce que je lis sur ce lien consacré à la norme SQLCls a écrit :... En natif ce n'est pas géré afin de coller au plus grand nombre de SGBD.
Pour le moment j'effectue une requête Select pour vérifier que mon ou mes enregistrements sont bien supprimés.DELETE efface les enregistrements de nom_de_table qui satisfont la condition donnée par clause_where, et retourne le nombre d'enregistrements effacés.

Merci pour ta réponse Cls
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Section DATABASE
Oui tu as raison, comme a dit Cls, le meilleur contrôle est de vérifier d'abord l'existence de l'enregistrement avant de le modifier ou le supprimer. Au fait, les valeurs retournées par
Pure basic concerne seulement le côté syntaxique de l'instruction, comme quoi l'instruction a bien été exécutée mais sans dire si oui ou non l'enregistrement a été bel et bien supprimé par exemple. De toute façon, en ce qui me concerne, je vérifie toujours l'existence d'un enregistrement avant de le supprimer ou modifier.
Pure basic concerne seulement le côté syntaxique de l'instruction, comme quoi l'instruction a bien été exécutée mais sans dire si oui ou non l'enregistrement a été bel et bien supprimé par exemple. De toute façon, en ce qui me concerne, je vérifie toujours l'existence d'un enregistrement avant de le supprimer ou modifier.