[OK]PB SQLITE et DATETIME

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

[OK]PB SQLITE et DATETIME

Message par Ar-S »

Salut, je pète un cable.
Depuis hier j'essaye d'insérer via PB des date en SQLITE.. Sans succés.
ça doit être une histoire de syntaxe mais je vois pas pourquoi.. Si j'entre mes requêtes via une interface sqlite ça fonctionne mais pas via PB.
Les enregistrements se font (incrémentation de ID) mais le champ dateR reste vide (je l'ai mis à NULL donc pas d'erreur)

J'ai découpé mon code en procédures.
C'est à insert que ça chie. Vous pouvez le tester. Enregistrez au préalable le code dans un fichier pour que la bdd se créée au même endroit.

D'avance merci, ça me gonfle de bloquer là dessus.

Code : Tout sélectionner

UseSQLiteDatabase()

Enumeration 
    #Fichier
    #MaBase
EndEnumeration


Global Filename$ = GetCurrentDirectory()+"bbDate2.sqlite"
Global TableName$ = "datetest"
Global id$ = "id"
Global ColDate$ = "dateR"

;**********************************
;       GESTION DE LA BASE
;**********************************
Procedure.b CreerFichier()
    If OpenFile(#Fichier, Filename$,#PB_File_SharedWrite)
        Debug "Fichier de base de données ouvert"
        CloseFile(#Fichier)
        Debug "Fichier créé"
        ProcedureReturn 1
    Else
        Debug "Erreur création du fichier"
        ProcedureReturn 0
    EndIf
EndProcedure

Procedure.b CreerBase()
        If OpenDatabase(#MaBase, Filename$, "", "")
            Requete$ = "CREATE TABLE "+TableName$+" ("+id$+" INTEGER PRIMARY KEY AUTOINCREMENT, "+ColDate$+" DATETIME NULL);"
            Debug "requete créer : " + Requete$
            If DatabaseUpdate(#MaBase, Requete$)
                Debug "Table 'datetest' créée"
                ProcedureReturn 1
            Else
                erreur$ = DatabaseError()
                If FindString(erreur$,"exists") ; si la table existe déjà
                    Debug "Info : " + erreur$
                    ProcedureReturn 2
                EndIf
            EndIf
        Else
            erreur$ = DatabaseError()
            Debug "ERREUR : " + erreur$
            ProcedureReturn 0
        EndIf
    
EndProcedure

Procedure Insere(Base, dateR$)
    If OpenDatabase(#MaBase, Filename$, "", "")
        If DatabaseQuery(#MaBase, "SELECT * FROM "+TableName$) ; Recupère tous les enregistrements 
            SetDatabaseString(Base, 1, dateR$)
            requete$ = "INSERT INTO "+TableName$+" ("+ColDate$+") VALUES (?)"
            Debug "Requête insert : " + requete$
            Result = DatabaseUpdate(Base, requete$)
            If Result = 0
                erreur$ = DatabaseError() + " "+ Str(#PB_Compiler_Line)
                Debug "Erreur : " + erreur$
            Else
                Result = 1
                Debug "Date ajoutée ! : "+ ColDate$ + " " + dateR$
            EndIf
            FinishDatabaseQuery(#MaBase)
        EndIf
    EndIf
    ProcedureReturn Result
EndProcedure


Procedure LisBase(NomColonne$="dateR")
   
    If OpenDatabase(#MaBase, Filename$, "", "")
        Debug "Connecté à PureBasic.sqlite"
        ; Si la base existe déjà, on lit les infos des contacts
        If DatabaseQuery(#MaBase, "SELECT * FROM "+TableName$) ; Recupère tous les enregistrements
            Debug "~ Liste des enregistrements ~"
            Debug "ID colonne " + DatabaseColumnIndex(#MaBase, id$) + " dateR colonne " + DatabaseColumnIndex(#MaBase, ColDate$)

                Debug "Affichage des données"
                While NextDatabaseRow(#MaBase)
                    Debug "ID : " + GetDatabaseString(#MaBase, 0) + " dateR : " + GetDatabaseString(#MaBase, 1) 
                Wend

            Debug "Fermeture de la requête"
            FinishDatabaseQuery(#MaBase)
                  
        EndIf
    EndIf
    
EndProcedure


; ---------- PROG -------------
CreerFichier()
CreerBase()
LisBase()
Insere(#Mabase, "2022-10-05 12:00:00")
; On lit à nouveau
LisBase()
Debug "Fermeture de la bdd"
CloseDatabase(#Mabase)
~~~~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
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: PB SQLITE et DATETIME

Message par Marc56 »

Salut Ar-S

Simple oubli, tu as mis 1 au lieu de 0 comme index à SetDatabaseString()

Code : Tout sélectionner

SetDatabaseString(Base, 0, dateR$)
:wink:
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: PB SQLITE et DATETIME

Message par Ar-S »

Pfff .. Mais alors pourquoi ?
Dans ma BDD j'ai la colonne ID qui est 0 et donc dateR est 1..
Je pige pas ce que c'est que ce 0 dans SetDatabaseString(Base, 0, dateR$)
~~~~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
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: PB SQLITE et DATETIME

Message par Marc56 »

Je pige pas ce que c'est que ce 0 dans SetDatabaseString(Base, 0, dateR$)
Copier le contenu de dateR dans la zone mémoire #0 tu tableau des variables de liaison.

SetDatabaseString() est indépendant des gadgets. C'est juste un tableau de variables.

Le numéro d'index est à incrémenter manuellement à chaque appel d'une fonction SetDatabase... ()
On n'est donc pas forcé de "mapper" toutes le variables, mais il faut les réutiliser dans l'ordre.

Dans la requête, chaque '?' sera remplacé à partir de 0

Il cherche donc 0, puis 1, puis 2 etc

Avec PostgreSQL c'est plus facile à gérer car il utilise $1 $1 $3
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: PB SQLITE et DATETIME

Message par Ar-S »

Ok.
Cette histoire d'index à incrémenter n'était pas très claire. Rien à voir avec le num des colonnes.
Merci pour la clarification.
~~~~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
Répondre