Page 1 sur 1

SQLITE pb table et comptage enregistrements

Publié : lun. 19/oct./2020 13:43
par jak64
Bonjour,
Je ne comprends pas pourquoi j'ai une erreur (ligne 34, instruction "If DatabaseUpdate(base_loto, requete_sql) = 0" , j'ai le message "Le #Database spécifié n'est pas initialisé").
Merci de votre aide

Code : Tout sélectionner

EnableExplicit

#base=0
Global base_loto.l
Global requete_sql.s

;===== Création de la base de données loto si elle n'existe pas, puis l'ouvrir
Procedure creer_base_loto()
  Protected nom_base.s = "base_de_donnees_loto.sqlite"
  UseSQLiteDatabase()
  
  If FileSize(#PB_Compiler_FilePath + nom_base) < 0
    base_loto = CreateFile(#base, #PB_Compiler_FilePath + nom_base)
    If base_loto
      CloseFile(base_loto)
    Else
      MessageRequester("Base non trouvée !", DatabaseError())
    EndIf
  EndIf 
  
  base_loto = OpenDatabase(#base, #PB_Compiler_FilePath+nom_base, "", "", #PB_Database_SQLite)
  If base_loto = 0
    MessageRequester("Erreur ouverture base","<base_de_donnees_loto.sqlite> non trouvée ! " + DatabaseError())
    End
  EndIf 

  ; Vérifier si la table historique des tirages existe et la créer si inexistante
  requete_sql = "CREATE TABLE IF NOT EXISTS HISTORIQUE_TIRAGES ("
  requete_sql + "ID_TIRAGE INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, "
  requete_sql + "JOUR_TIRAGE STRING Not NULL, "
  requete_sql + "DATE_TIRAGE DATE Not NULL, "
  requete_sql + "TIRAGE STRING not NULL"
  requete_sql + ")"
  If DatabaseUpdate(base_loto, requete_sql) = 0
    MessageRequester("Erreur accès table","Erreur dans création table <HISTORIQUE_TIRAGES> - creer_base_loto() " + DatabaseError())
  EndIf
  
  ; Compter le nombre d'enregistrements dans le table HISTORIQUE_TIRAGES
  If DatabaseQuery(#base, "SELECT COUNT(*) FROM HISTORIQUE_TIRAGES") <> 0
    NextDatabaseRow(#base)
    Debug "Number of records 'Select Count' : " + GetDatabaseString(#base, 0)
  EndIf
EndProcedure

;===== Programme principal
creer_base_loto()

Re: SQLITE pb table et comptage enregistrements

Publié : lun. 19/oct./2020 15:53
par Marc56
Si tu veux utiliser le numéro retourné par la fonction comme ID, alors il faut mettre #PB_Any la première fois

Code : Tout sélectionner

; Non
base_loto = OpenDatabase(#base, #PB_Compiler_FilePath+nom_base, "", "", #PB_Database_SQLite)

; Oui
base_loto = OpenDatabase(#PB_Any , #PB_Compiler_FilePath+nom_base, "", "", #PB_Database_SQLite)
Ensuite tu peux utiliser 'base_loto' comme ID

Code : Tout sélectionner

If DatabaseUpdate(base_loto, requete_sql) = 0
Mais c'est plus simple en laissant le système attribuer les numéros

Code : Tout sélectionner

Enumeration 
    #ID_Base    
EndEnumeration

OpenDatabase(#ID_Base, GetTemporaryDirectory()+nom_base, "", "", #PB_Database_SQLite)

DatabaseUpdate(#ID_Base, requete_sql)

NextDatabaseRow(#ID_Base)

FinishDatabaseQuery(#ID_Base)

CloseDatabase(#ID_Base)
:wink:

Re: SQLITE pb table et comptage enregistrements

Publié : lun. 19/oct./2020 16:00
par jak64
merci, c'est OK