Db gestion de base de données

Programmation d'applications complexes
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Db gestion de base de données

Message par microdevweb »

Il n'y que les idiots qui ne change pas d'avis :roll:. Donc je continue malgré tout mon RAD purebasic.

En voici une première partie pour la gestion d'une base de données.

Note: il s'agit d'une DLL et c'est full object (je ne tiens pas à lancer la polémique)

Téléchargement de la dll et du code exemple ICI

Contenu du zip:
  • README
  • x86
    • main.pb (fichier de test à lancer en mode x64)
    • DB.pbi
    • DB.dll
  • x64
    • main.pb (fichier de test à lancer en mode x86)
    • DB.pbi
    • DB.dll
Manuel (en cours d'écriture)

Et voici un petit code exemple avec juste deux fichiers, pays et localités

Code : Tout sélectionner

XIncludeFile "DB.pbi"

; Création de la base de données
Global myDb.DB::Db=DB::NewDb("maBase.db")
Global.DB::Table tbPays=DB::NewTable("pays","id")
Global.DB::Table      tbLocalites=DB::NewTable("localites","id")
Global.DB::Column paysNom=DB::NewTextColumn("nom","nom",DB::#COLUMN_IS_UNIQUE|DB::#COLUMN_IS_NOT_NULL),
      locNom=DB::NewTextColumn("nom","nom",DB::#COLUMN_IS_NOT_NULL),
      locCode=DB::NewTextColumn("code","code postal",DB::#COLUMN_IS_NOT_NULL),
      locPays=DB::NewLinkedColumn("id_pays","pays",tbPays,paysNom,DB::#COLUMN_IS_NOT_NULL)
tbPays\addColumn(paysNom)
tbLocalites\addColumn(locNom)
tbLocalites\addColumn(locCode)
tbLocalites\addColumn(locPays)
myDb\addTable(tbPays)
myDb\addTable(tbLocalites)
;génération de la base de données
myDb\build()
;Ajout de quelques enregistrement
;--> Des pays
Define ins.DB::TableInsertion=DB::NewTableInsertion(myDb,tbPays) ;en mode autofree pas besoin de libèré l'objet
ins\setValue(paysNom,"Belgique")
ins\execute()
Define ins.DB::TableInsertion=DB::NewTableInsertion(myDb,tbPays) ;en mode autofree pas besoin de libèré l'objet
ins\setValue(paysNom,"France")
ins\execute()
Define ins.DB::TableInsertion=DB::NewTableInsertion(myDb,tbPays) ;en mode autofree pas besoin de libèré l'objet
ins\setValue(paysNom,"Espagne")
ins\execute()
Define ins.DB::TableInsertion=DB::NewTableInsertion(myDb,tbPays) ;en mode autofree pas besoin de libèré l'objet
ins\setValue(paysNom,"Italie")
ins\execute()
;--> Des localités
Define ins.DB::TableInsertion=DB::NewTableInsertion(myDb,tbLocalites) ;en mode autofree pas besoin de libèré l'objet
ins\setValue(locNom,"Liège")
ins\setValue(locCode,"4000")
ins\setValue(locPays,"1")
ins\execute()
Define ins.DB::TableInsertion=DB::NewTableInsertion(myDb,tbLocalites) ;en mode autofree pas besoin de libèré l'objet
ins\setValue(locNom,"Waremme")
ins\setValue(locCode,"4300")
ins\setValue(locPays,"1")
ins\execute()
Define ins.DB::TableInsertion=DB::NewTableInsertion(myDb,tbLocalites) ;en mode autofree pas besoin de libèré l'objet
ins\setValue(locNom,"Trooz")
ins\setValue(locCode,"4870")
ins\setValue(locPays,"1")
ins\execute()
Define ins.DB::TableInsertion=DB::NewTableInsertion(myDb,tbLocalites) ;en mode autofree pas besoin de libèré l'objet
ins\setValue(locNom,"Paris")
ins\setValue(locCode,"75000")
ins\setValue(locPays,"2")
ins\execute()
Define ins.DB::TableInsertion=DB::NewTableInsertion(myDb,tbLocalites) ;en mode autofree pas besoin de libèré l'objet
ins\setValue(locNom,"Reims")
ins\setValue(locCode,"69000")
ins\setValue(locPays,"2")
ins\execute()

;Affichage
;--> On défini un ordre de tri
Define ord.DB::OrderClause=DB::NewOrderClause()
ord\addColumn(tbPays,paysNom)
ord\addColumn(tbLocalites,locNom)
;--> On défini une sélection
Define sel.DB::TableSelection=DB::NewTableSelection(myDb,tbLocalites,locNom)
sel\addColumn(tbLocalites,locCode)
sel\addColumn(tbPays,paysNom,tbLocalites,locPays)
sel\setOrderClause(ord)
sel\execute()
While sel\nextRow()
  Debug PeekS(sel\getColumnValue(0))
  Debug PeekS(sel\getColumnValue(1))
  Debug PeekS(sel\getColumnValue(2))
Wend
sel\free()
ord\free()
; Teste d'une modification
Define myWhere.DB::WhereClause=DB::NewWhereClause(tbLocalites)
myWhere\setClauseOfId("=",1)
Define myMod.DB::TableUpdate=DB::NewTableUpdate(myDb,tbLocalites,myWhere,#False)
myMod\addColumn(locNom,"Teste modif")
myMod\execute()
; Affichage de cette dernière
Define mySel.DB::TableSelection=DB::NewTableSelection(myDb,tbLocalites,locNom)
mySel\setWhereClause(myWhere)
mySel\execute()
If mySel\firstRow()
  Debug "Enregistrement modifié"
  Debug PeekS(mySel\getColumnValue(0))
EndIf
myMod\free()
myWhere\free()
mySel\free()

Dernière modification par microdevweb le mar. 17/oct./2017 11:23, modifié 3 fois.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Db gestion de base de données

Message par Micoute »

NOT FOUND
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

Re: Db gestion de base de données

Message par GallyHC »

Bonjour,

Juste une lettre en trop a la fin donc le lien est "https://github.com/microdevweb/DB/archive/master.zip".

GallyHC
Dernière modification par GallyHC le lun. 16/oct./2017 10:27, modifié 1 fois.
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Db gestion de base de données

Message par microdevweb »

Merci GallyHC,

Le lien est modifié et testé, j'ai également apporté quelque modif, entre autre on peut placer la dll dans un autre répertoire et choisir le chemin relatif en modifient exemple Global path.s="LIB\" dans le fichier DB.pbi
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Db gestion de base de données

Message par falsam »

microdevweb a écrit :Il n'y que les idiots qui ne change pas d'avis . Donc je continue malgré tout mon RAD purebasic.
je navais aucun doute je savais que tu allais revenir.
bonjour chez les ch'ti. a écrit :Dans le nord tu pleures deux fois : la première en arrivant, et la deuxième parce que tu ne veux plus repartir.
C'est un peu pareil avec PureBasic.
microdevweb a écrit :il s'agit d'une DLL et c'est full object (je ne tiens pas à lancer la polémique)
Pas de polémique effectivement car tout a déja été dit.

Par contre tu dis que tu as testé ? Quand je lance main.db j'ai le message "cannot open LIB\DB.dll" ce qui explique d'ailleurs pourquoi je ne peux pas lister les fonctionnalités de ta DLL.

Et puisque je parle fonctionnalités, je trouve que tu aurais pu faire une présentation de ta DLL
- Liste des fonctionnalités, paramétres, Aide.
- Liste des constantes et significations.

Ta fonction NewInsert() pourquoi l'appeler comme ça ? Une insertion c'est forcément un nouveau membre de la table en question. Je pense par contre que DN::TableInsert() était plus parlant.

Ton code n'étant pas fonctionnel je ne peux pas en dire plus. Quoi que ...

Code : Tout sélectionner

Define myWhere.DB::WhereClause=DB::NewWhereClause(tbLocalites)
:mrgreen: héhé::no-comment::pas de polémique.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Db gestion de base de données

Message par Kwai chang caine »

Et ben moi j'suis drôlement content que tu soit pas idiot :mrgreen:
Un membre de la famille qui part, c'est toujours triste.....surtout quant on l’apprécie 8) et même quand c'est un que j'aime pas, c'est pour dire. :lol:

Comme le dit FALSAM, c'est pas si facile de partir de PB
Y'eeeeeeeen a plein qu'ont éééééééssayééééé...et y zon u des proooobleeeemes :mrgreen:

Image

Et puis moi, ça m'intéresse drôlement comment on peut faire de la POO avec PB, même si perso, je ne pense pas faire des applis assez grosses pour que je l'utilise un jour 8)
Cette valse de pointeurs c'est du grand art, et puis tu as raison de ne pas te laisser influencer, regarde FRED combien de personnes ont essayé de le décourager, l'influencer, etc...avec PB et surtout avec SB...il reste solide comme un roc, il croit en ce qu'il fait....et il le prouve.
Parce que quoi que l'on fasse dans la vie, tu trouveras toujours un abruti comme moi pour t'empêcher de tourner en rond :D

Toi tu sais de quoi tu parles, alors que pas mal des détracteurs à la POO ne la connaisse pas.
Donc, continue si tu le veux bien, à nous montrer ce qu'est ce genre de prog.
Et apres tout c'est pas la fin du monde si au milieu d'un de nos codes, il faille taper un CreateObject, NewCakeChose, ou autre, du moment que derrière ça fait du bon job :wink:

Je viens de tester et ça me dit que la DLL est pas faite pour windows, je suis sous W7 X86 v5.61 8O
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Db gestion de base de données

Message par microdevweb »

@Kwai chang caine, heu oui la dll est compilée en 64, je ferais un version 32. Concernant le choix de la POO,je vais essayé de faire court

Un j'ai prévu également de faire ce rad pour java. (pas tout de suite évidement)

Deux imaginons la construction d'une maison avec un seul ouvrier, ben il sera vite dépassé le pauvre.
Maintenant si ou délègue le travail à plusieurs ouvriers qualifié pour chaque tache se sera surement plus efficace. Bon ça on sait déjà le faire avec les modules et en procédural, mais si par contre je veux plusieurs ouvriers avec les même qualifications se sera plus difficile (pas impossible bien sur), par contre en POO cela est assez facile il suffis d'instancier un nouvel objet.

Bon maintenant restons les pieds sur terre et la je donne raison à falsam, Purebasic n'est pas idéal pour le développement en POO, cela demande quelques bricolages et on peu oublier certains principe tel que le polymorphisme. Donc ce n'est qu'un simulacre de Poo.

@falsam, tu à raison pour la doc que je compte la faire sur le wiki de github et merci pour tes conseilles sur le nom de certaines méthodes.

Ce qui est prévu pour l'avenir de ce RAD.

Db est le cœur du système

Dans un avenir proche

un module DIALOG, pour créer des fenêtres avec des layouts et possibilité de lier les champs de la base de donnée.

un module tbs, j'ai déjà réalisé ce module mais il va être refait pour affiché les données sous forme de tableau.

Dans avenir nettement plus éloigné:

Un soft pour créer la Db (via la dll) qui fonctionnera par copier coller, pour créer des requêtes de sélection, insertion etc...

La j’hésite encore, soit des modules pour créer les fenêtres fiches et tables (qui utiliserais dialog) ou un soft qui par copier coller générerais le code nécessaire.

Pour résumé: cela fait pas mal de temps que teste et essaye de faire ce fameux Rad. J'en fais un premier fonctionnel que j'ai utilisé pour un soft client (suivant +- le même principe mais nettement moins orienté objet) et cela ma permis de gérer tout les fichiers annexes en moins d'une heure.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Db gestion de base de données

Message par Kwai chang caine »

Je me doutais un peu pour la dll :wink:

En fin de compte, la poo étant arrivé après le procédural, of course puisque elle est faite avec, et bien on en a fait une question de goût, de mode, d'époque.
Mais maintenant qu'on parle de plus en plus des deux styles de prog, qu'on les compare, je me rend compte qu'on compare un cheval de course et de labour

Bien sûr on peut courir avec un cheval de trait, et labourrer avec "ideal du gazon", mais là aussi y'en a qui vont avoir des problèmes...

Ce sont en fin de compte deux choses incomparable directement, alors on peut le faire comme on le ferait entre java et pb, vb et pb, etc..
Mais pour ce qui est du c++, soit il est nécessaire de programmer poo, plusieurs equipes, gros projet, soit c'est de l'ordre de la preference ou du j'suis "in"et j'me la pète

Au final, ça rejoint la même philosophie du vrai programmeur, imposant que l'on ne choisis pas un langage pour coder ses applications, c'est l'application qui le choisi pour vous.
Si on travaille sur un tableur, avec des options graphiques, on a beau détester excel, mais le vba est une bonne option, ou d'autres logiciels de ce style.
Le faire en pb, c'est possible, mais long et jamais aussi complet.

Comme quoi, je me suis réconcilié avec la poo, maintenant que je lui ai trouvé sa place.
Ce qui est le plus triste, c'est que peu de personnes ont été foutues de m'expliquer ça, même les pro poo.. :|
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Db gestion de base de données

Message par microdevweb »

Nouvelle version:

Pas de gros changement, certaine méthodes on été renommée et il y a 2 version x64 et x86
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Db gestion de base de données

Message par Kwai chang caine »

Marche nickel cette fois, merci 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Db gestion de base de données

Message par falsam »

microdevweb a écrit :Dans un avenir proche
un module DIALOG, pour créer des fenêtres avec des layouts et possibilité de lier les champs de la base de donnée.
microdevweb a écrit :Dans avenir nettement plus éloigné:
Un soft pour créer la Db (via la dll) qui fonctionnera par copier coller, pour créer des requêtes de sélection, insertion etc...
Aie !!! Peut être que tu pourrais te contenter de la création de la base de données ?

Il y a déja eu SpeedDev et RAD purebasic (speedev), deux projets abandonnés. Quel nom pour le suivant ? :wink:

Concentre toi sur la base de données.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Db gestion de base de données

Message par Kwai chang caine »

On a tous ce défaut...la "frivolité" :oops:
Comme on peut presque tout faire avec PB, dans presque tous les sujets...et ben on a envie de tout bouffer...et on a qu'un estomac..

Les journées ne faisant que 24h, et comme il faut faire des trucs inutiles, comme travailler, dormir, manger, boire, évacuer, honorer son épousailles (pas en même temps hein !!! :? enfin faut voir :lol: ), promener le chien, les gosses et aussi bobonne...
Bref ça fait pleins d'heures en moins pour l'accomplissement de nos nouvelles envies....
Du coups, des centaines de cadavres le bide ouvert ou fini à X pour cent :|
Toujours ce satané proverbe des cordonniers les moins bien chaussés...ce qui y connaissent fifre..y vont sur telecharger.com et utilisent les freewares qu'on leur proposent et sont pas emmerdés :mrgreen:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Db gestion de base de données

Message par microdevweb »

@falsam,

je ferais en fonction de mes disponibilités, actuellement j' ai mis en route le soft pour la base de donnée. Ce sera un outils simple sans fioriture.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Db gestion de base de données

Message par falsam »

microdevweb a écrit :Ce sera un outils simple sans fioriture.
Voila une bonne nouvelle :wink:
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre