Sqlite : Comment gérer une bibliothèque ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

Message par GeBonet »

Ben, voilà tu commence à maitriser SQLite, qui parait pas mal... :lol:
Il ne reste presque plus qu'à écrire cela sur disque en premier lieu... Pour au moins sauver les livres que tu vas y ajouter pendant les tests..
Pour ma part le seul modèle assez complet que j'ai existe sous Access et je te le fait parvenir... Via autre chemin...

Tiens voilà un test au cas ou tu voudrais tester la validité de L'ISBN...

Code : Tout sélectionner

;  ***************************************************************************************
;    Test de validité d'un N° ISBN .... (Numéro d'identification d'un Livre quelconque.... 
;    Traduction d'un vieux code .....                                       GeBonet  26-11-2008  **
; -----------------------------------------------------------------------------------------------------------
Procedure ControleISBN(Donnee.s)

   ; Premier test de validité 
    Resultat = CountString(Donnee, "-")
    If Resultat = 0 
        Etat = False: ProcedureReturn  Etat
    EndIf
   Chaine.s = RemoveString(Donnee,"-")          ; Retire tout les tirets
    ;                                                                        On continue
    Validation.s = UCase(Right(Donnee, 1))
    If Validation = "X"                                           ; Il se peut que le dernier soit un X alors on valide...
            Cas = 1
    Else
        Cas = 0: Valide = Val(Validation)
    EndIf
    ; Début du calcul ..........
   Total = 0
    For I = 1 To L
        PremierChiffre = Val(Mid(Chaine, I, 1))
        SecondChiffre = 11 - I
        Valeur = PremierChiffre * SecondChiffre
        Total = Total + Valeur
    Next I
    ; Test de la validation de l'ISBN entrée 
    Reste = 11 - (Total1 - Int(Total / 11) * 11)
    If Cas = 0 :
          If Valide = Rest : Etat = True:  ProcedureReturn  Etat:EndIf
    Else
          If Valide = 0  :Etat = True :Else :Etat = False :EndIf
    EndIf
    ProcedureReturn  Etat
        
EndProcedure

; ================= Début Test ====ICI 4 TEST ================
Rep$="Non OK"
Etat=ControleISBN("2-7429-0698-3")
If Etat=0:Rep$="OK":EndIf
Debug "------------------- Premier "+Rep$

Rep$="Non OK"
Etat=ControleISBN("2-7361-1388-8")
If Etat=0:Rep$="OK":EndIf
Debug "------------------- Second "+Rep$

Rep$="Non OK"
Etat=ControleISBN("2-260-015573-5")
If Etat=0:Rep$="OK":EndIf
Debug "------------------- Troisième "+Rep$

Rep$="Non OK"
Etat=ControleISBN("0-672-30385-X")
If Etat=0:Rep$="OK":EndIf
Debug "------------------- Quatrième "+Rep$
voilà,voilà,
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

GeBonet a écrit :Il ne reste presque plus qu'à écrire cela sur disque en premier lieu... Pour au moins sauver les livres que tu vas y ajouter pendant les tests..
C'est à dire ? c'est déjà le cas. à moins que tu ne penses à un truc en particulier ? là je ne vois pas.

Merci pour le code, il a sa place dans ce post dédié aux livres :)
Je n'envisage pas de gérer le numéro ISBN pour l'instant.

Ce soir je vais virer les boutons supprimer ,et les remplacer par un drag&drop dans la poubelle.
Ajouter un raccourci clavier pour remplacer le bouton [ajouter], comme ça il n'y aura plus de boutons, tout avec le drag&drop.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

Message par GeBonet »

comtois a écrit :
GeBonet a écrit :Il ne reste presque plus qu'à écrire cela sur disque en premier lieu... Pour au moins sauver les livres que tu vas y ajouter pendant les tests..
C'est à dire ? c'est déjà le cas. à moins que tu ne penses à un truc en particulier ? là je ne vois pas.
Autant pour moi :( Comme j'avais lu le Post de KCC, je me suis mis directement sous PB 4..3 b4, l'ai "copié, collé...Listé et Exécuté.". Parfais, puis regardé le code de plus prêt... Comme il me le semblait il faut écrire une langage dans le langage... Mais bon, ça fonctionne bien. Puis l'essaye de voir le fichier... Il n'y en à pas ! Regarde le code encore et vois que la biblio est en mémoire à travers des AddItems... Sqlite est en mémoire... Puis après ta contestation :lol: Je vérifie et me rend compte que le fichier à bien été crée dans le répertoire d'ou j'avais travaillé avant... Soit dans celui de PB 4.2...
Bref il y a quand même un problème, il faut au moins relire les données sur disque et pas ceux qui sont en mémoire... ! Ou ne travailler d'avec ceux en mémoire. Car j'ai crée deux livres, banal... Avec auteurs et éditeurs... Et tout à bien fonctionné jusqu'au moment ou j'ai arrêté le programme, puis l'ai relancé...

Et je me retrouve avec les livres du début, ceux que j'ai ajouté n'y sont pas ! Donc ceux en mémoire via les Item sont là et les autres non....
>>> Pouf, Pouff...:lol:
Donc je reprend mon "autant pour moi" :lol: Et je vais rédiger une explication plus complète et par rapport à ton code auquel il ne faut surtout rien toucher (exepté tes supprimer ou autre Drag&Drop)...
Il s'agit d'un problème assez simple !

Il faut savoir distingué deux choses : Les données écrites en mémoire mais finalement sur disques et le système qui exploite ces données... Les données sont répartie en un ou plusieurs fichiers qui alors sont appelée Bases de Données. Donc dans tous les cas, les données doivent-être lue si elles existent, et écrite quand on à finis d'y ajouter des données.

Le système complet qui exploite ces données, les lira, les écrira et sera doté de tout ce qu'il faut pour les gérées... C'est un SGBD. Si les données (fichiers) on des relation entres elles cela devient SGBDR (R de relationnel :? ). C'est tout.... Mais pour que ces données soient exploitable par tous et compatibles entres elles il faut et il suffit qu'elles puissent être interrogée par SQL, qui lui est un "Structured Query Language (Langage de requêtes structurées). Langage d'accès à certaines bases de données." Et c'est ce que fait SQLite "je crois" sauf que lui le fais au niveau de la mémoire". Donc on charge ses données, on utilise SQL pour obtenir les infos qu'il faut à partir de cette mémoire. Puis quand on en a terminé, il faut sauver ses données (ses fichiers, ici, livres, auteurs, editeurs...)... Que l'on rechargera au lancement de la gestion de la bibliothèque....

Essaye... Tu me dis quoi, en direct ou indirect... A partir de TON code je peux arranger une lecture à l'ouverture, écriture à la sortie (Quitter)...Mais je suggère un sauver de temps à autre sur un timer par exemple...

Voilà, voilà...
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

En fait si tu perds tes données, c'est parce que je réécris la base entièrement dans le code à chaque fois, c'est juste pour mes essais, je ne vais pas tarder à supprimer cette partie :)

ça se passe à ce niveau :

Code : Tout sélectionner

If CreateFile(0,"MaBiblio.sqlite")
   CloseFile(0)
   
   If OpenDatabase(0, "MaBiblio.sqlite", "", "")

Je vais compléter le menu , ça deviendra un truc de ce genre :
Fichier
'Nouveau'
'Ouvrir...'
'Quitter'

'Nouveau' pour créer une nouvelle bibliothèque
'Ouvrir' pour continuer sur une bibliothèque existante.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

Message par GeBonet »

Parfait... C'est ce qu'il manquait... Mais tu peux y ajouter un petit "timer" pour provoquer des sauvetages si par hasard l'utilisateur va boire un coup.. :lol:

Excuse pour les explications... Mais de temps à autre, sur un sujet qui n'est pas vraiment la panacée du Forum, je me suis permis ce rappel 8O

A, j'oubliais, il serais intéressant d'avoir les choses en séquence quand on crée un nouveau livre... Après, le saut vers l'auteur puis enfin l'éditeur...
Et les liaisons (relations) peuvent alors se créer "seules"...
A+
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

C'est sauvegardé au fur et à mesure. à chaque ajout ou suppression dans la base.

Voila j'ai modifié le code, cette fois ci il faut passer par le menu pour ouvrir ou créer une base, mais attention c'est pas trop testé ! j'ai vu des trucs à améliorer , et y'a sûrement plein de bogues !

J'ai mis des poubelles sur toutes les fiches, j'ai des améliorations à faire aussi à ce niveau.

ça me plait bien le drag&drop , c'est la première fois que je l'utilise.

Voila, c'est tout pour ce soir.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

J'ai fait une archive, le programme est un peu plus complet.

l'archive se trouve ici

Petite question : Est-ce que quelqu'un a déjà utilisé COLLATE NOCASE avec succès ? J'ai fait très peu de tests, mais j'ai l'impression que ça ne fonctionne pas.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Répondre