Recherche d'un framework / base de données

Partagez votre expérience de PureBasic avec les autres utilisateurs.
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Recherche d'un framework / base de données

Message par bombseb »

Bonjour,

Je me posait une question, peut être que l'un d'entre vous saura me répondre (c'est pas vital, c'est juste une question par curiosité)
Existe t-il une base de données avec laquelle on pourrait faire des requêtes SQL, mais sans avoir besoin d'un programme serveur ? ca pourrait être utile quand on aurait envie de stocker des données à partir d'un programme sans pour autant être obligé d'installer toute une usine à gaz.
Je verrais bien ca sous la forme d'une lib, qu'on pourrais utiliser dans un prog PB par exemple une base de données pour répertorier des cds ou des dvd par exemple
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Recherche d'un framework / base de données

Message par falsam »

Mono utilisateur ?
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%
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Re: Recherche d'un framework / base de données

Message par Cls »

SQLite ne te convient pas ?
GG
Messages : 239
Inscription : jeu. 09/déc./2004 12:23

Re: Recherche d'un framework / base de données

Message par GG »

>> SQLite <<.
Personnellement, j'adore, j'ai créé un programme au boulot autour de cette architecture, en mono utilisateur, pas d'installation fastidieuse.
PureBasic 6.03 - Windows 11 22H2 (64 bits)
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Recherche d'un framework / base de données

Message par Guimauve »

C'est vrai que SQLite est bien pour ce genre de chose. D'ailleurs si je ne me trompe pas, cette lib ("libpbsqlite3.a") est déjà présente dans le répertoire des librairies de PB alors son utilisation devrait donc être simple à faire. (un petit Import et l'affaire est dans le sac.)

Si non, il est possible de faire un truc similaire avec un fichier xml qui peut être lu avec n'importe quel éditeur texte (Bloc-Note, gedit, etc.).
C'est ce qui est utilisé par Rhythmbox par exemple pour les listes de lecture des fichiers de musique.

A+
Guimauve
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Re: Recherche d'un framework / base de données

Message par bombseb »

ah oui SQLLite....Merci les gars j'en avait entendu parler mais je croyais que c'était une base classique client/serveur
bon bah j'y jeterais un oeil à l'occaze alors
et avec SQLite, les données sont enregistrées dans une seul fichier de données ? est-ce qu'on peux mettre plusieurs tables par fichier de données ?
et au niveau des perf ca vas ?
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Recherche d'un framework / base de données

Message par Guimauve »

Un petit exemple avec SQLite

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; CODE GÉNÉRÉ AUTOMATIQUEMENT, NE PAS MODIFIER À
; MOINS D'AVOIR UNE RAISON TRÈS TRÈS VALABLE !!!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Code généré par : Dev-Type V1.4.2
; Nom du projet : Le nom du projet ici
; Nom du fichier : Nom du fichier
; Version du fichier : 0.0.0
; Programmation : À vérifier
; Programmé par : Votre Nom Ici
; Alias : Votre Pseudo Ici
; Courriel : adresse@quelquechose.com
; Date : 27-03-2009
; Mise à jour : 27-03-2009
; Codé pour PureBasic V4.30
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

UseSQLiteDatabase()

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<

Structure Student
  
  Name.s
  Age.b
  Gender.s
  id.l
  
EndStructure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<

Macro GetStudentName(StudentA)
  
  StudentA\Name
  
EndMacro

Macro GetStudentAge(StudentA)
  
  StudentA\Age
  
EndMacro

Macro GetStudentGender(StudentA)
  
  StudentA\Gender
  
EndMacro

Macro GetStudentID(StudentA)
  
  StudentA\id
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<

Macro SetStudentName(StudentA, P_Name)
  
  GetStudentName(StudentA) = P_Name
  
EndMacro

Macro SetStudentAge(StudentA, P_Age)
  
  GetStudentAge(StudentA) = P_Age
  
EndMacro

Macro SetStudentGender(StudentA, P_Gender)
  
  GetStudentGender(StudentA) = P_Gender
  
EndMacro

Macro SetStudentID(StudentA, P_ID)
  
  GetStudentID(StudentA) = P_ID
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Update <<<<<

Macro UpdateStudent(StudentA, P_Name, P_Age, P_Gender, P_ID = 0)
  
  SetStudentID(StudentA, P_ID)
  SetStudentName(StudentA, P_Name)
  SetStudentAge(StudentA, P_Age)
  SetStudentGender(StudentA, P_Gender)
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Macro de déboguage <<<<<

Macro DebugStudent(StudentA)
  
  Debug Str(GetStudentID(StudentA)) + " : " +  GetStudentName(StudentA) + " : " + Str(GetStudentAge(StudentA)) + " : " + GetStudentGender(StudentA)
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.016 secondes (6687.50 lignes/seconde) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Procedure InsertDataBaseStudentElement(DatabaseID.l, *StudentA.Student)
  
  DatabaseUpdate(DatabaseID, "INSERT INTO Student (Name, Age, Gender) VALUES ('" + GetStudentName(*StudentA) + "', '" + Str(GetStudentAge(*StudentA)) + "', '" + GetStudentGender(*StudentA) + "')")
  
EndProcedure

Procedure UpdateDataBaseStudentElement(DatabaseID.l, *StudentA.Student)
  
  DatabaseUpdate(DatabaseID, "UPDATE Student SET Name='" + GetStudentName(*StudentA) + "', Age='" + Str(GetStudentAge(*StudentA)) + "', Gender='" + GetStudentGender(*StudentA) + "' WHERE ID='" + Str(GetStudentID(*StudentA)) + "'")
  
EndProcedure

Procedure DeleteDataBaseStudentElement(DatabaseID.l, *StudentA.Student)
  
  DatabaseUpdate(DatabaseID, "DELETE FROM Student WHERE ID='" + Str(GetStudentID(*StudentA)) + "'")
  
EndProcedure

Procedure CreateDatabaseStudentTable(DatabaseID.l)
  
  DatabaseUpdate(DatabaseID, "CREATE TABLE Student (ID INTEGER PRIMARY KEY, Name TEXT, Age INTEGER, Gender TEXT)")
  
EndProcedure

Procedure DeleteDatabaseStudentTable(DatabaseID.l)
  
  DatabaseUpdate(DatabaseID, "DELETE FROM Student")
  
EndProcedure

Procedure ExtractDataBaseStudentElement(DatabaseID.l, *StudentA.Student)
  
  SetStudentID(*StudentA, GetDatabaseLong(DatabaseID, 0))
  SetStudentName(*StudentA, GetDatabaseString(DatabaseID, 1))
  SetStudentAge(*StudentA, GetDatabaseLong(DatabaseID, 2))
  SetStudentGender(*StudentA, GetDatabaseString(DatabaseID, 3))
  
EndProcedure

Procedure.l CreateStudentDataBase(DatabaseID.l, FileName.s)
  
  Success.l = CreateFile(DatabaseID, FileName)
  
  If Success
    
    CloseFile(DatabaseID)
    
    If OpenDatabase(DatabaseID, FileName, "", "", #PB_Database_SQLite)
      CreateDatabaseStudentTable(DatabaseID)
      CloseDatabase(DatabaseID)
    EndIf    
    
  EndIf
  
  ProcedureReturn Success
EndProcedure


Procedure Database_To_LinkedList(DatabaseID.l, List This.Student())
  
  DatabaseQuery(DatabaseID, "SELECT * FROM Student")
  
  While NextDatabaseRow(DatabaseID)
    AddElement(This())
    ExtractDataBaseStudentElement(DatabaseID, This())
  Wend
  
EndProcedure

Procedure LinkedList_To_Database(DatabaseID.l, List This.Student())
  
  ForEach This()
    InsertDataBaseStudentElement(DatabaseID, This())
  Next
  
EndProcedure

NewList Eleve0.Student()
NewList Eleve1.Student()
NewList Eleve2.Student()
NewList Eleve3.Student()
NewList Eleve4.Student()
NewList Eleve5.Student()

AddElement(Eleve0())
UpdateStudent(Eleve0(), "Pierre", 18, "Homme")

AddElement(Eleve0())
UpdateStudent(Eleve0(), "Paul", 18, "Homme")

AddElement(Eleve0())
UpdateStudent(Eleve0(), "Marcel", 20, "Homme")

AddElement(Eleve0())
UpdateStudent(Eleve0(), "Julie", 19, "Femme")


Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
Debug "; Liste original d'élèves"
Debug "ID : Nom : Age : Sexe"

ForEach Eleve0()
  DebugStudent(Eleve0())
Next

Debug ""

FileName.s = "Student.sqlite"

If CreateStudentDataBase(0, FileName)
  
  If OpenDatabase(0, FileName, "", "")
    
    LinkedList_To_Database(0, Eleve0())
    Database_To_LinkedList(0, Eleve1())
    
    Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
    Debug "; Liste d'élèves depuis la base de données"
    Debug "ID : Nom : Age : Sexe"
    
    ForEach Eleve1()
      DebugStudent(Eleve1())
    Next
    
    Debug ""
    
    
    UpdateStudent(Chantale.Student, "", 0, "", 2)
    DeleteDataBaseStudentElement(0, Chantale)
    
    UpdateStudent(Chantale, "Chantale", 28, "Femme", 3) 
    UpdateDataBaseStudentElement(0, Chantale)
    
    Database_To_LinkedList(0, Eleve2())
    
    Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
    Debug "; Liste d'élèves depuis la base de données"
    Debug "; Après suppression élément ID = 2 et mise à jour ID = 3"
    Debug "ID : Nom : Age : Sexe"
    
    ForEach Eleve2()
      DebugStudent(Eleve2())
    Next
    
    Debug ""
    
    
    AddElement(Eleve3())
    UpdateStudent(Eleve3(), "Alexandre", 33, "Homme")
    
    AddElement(Eleve3())
    UpdateStudent(Eleve3(), "Guillaume", 30, "Homme")
    
    AddElement(Eleve3())
    UpdateStudent(Eleve3(), "Ariane", 35, "Femme")
    
    Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
    Debug "; Ajout à la Liste original d'élèves"
    Debug "ID : Nom : Age : Sexe"
    
    ForEach Eleve3()
      DebugStudent(Eleve3())
    Next
    
    LinkedList_To_Database(0, Eleve3())
    
    Debug ""
    
    Database_To_LinkedList(0, Eleve4())
    
    Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
    Debug "; Liste augmenté d'élèves depuis la base de données"
    Debug "ID : Nom : Age : Sexe"
    
    ForEach Eleve4()
      DebugStudent(Eleve4())
    Next
    
    Debug ""
    
    
    DeleteDatabaseStudentTable(0)
    
    Database_To_LinkedList(0, Eleve5())
    
    
    Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
    Debug "; Liste  d'élèves détruite de la base de données"
    Debug "ID : Nom : Age : Sexe"
    
    ForEach Eleve5()
      DebugStudent(Eleve5())
    Next
    
    Debug ""
    
    
    CloseDatabase(0) ;ferme la base de donnée
    
  EndIf
  
EndIf

; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
En espérant qu'il pourra t'aider.

A+
Guimauve
GG
Messages : 239
Inscription : jeu. 09/déc./2004 12:23

Re: Recherche d'un framework / base de données

Message par GG »

Oui, un seul fichier de données pour plusieurs tables, et oui, un seul fichier de données pour y stocker la table, en tout et pour tout.
PureBasic 6.03 - Windows 11 22H2 (64 bits)
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Re: Recherche d'un framework / base de données

Message par Cls »

Et coté perfs, c'est très bon. ;)
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Re: Recherche d'un framework / base de données

Message par Geo Trouvpatou »

Sinon Progi1984 a fait un petit tutoriel sur developpez.com
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Re: Recherche d'un framework / base de données

Message par bombseb »

super, merci beaucoup
j'ai de quoi faire maintenant :mrgreen:
Répondre