Problèmes SQLite - "Values et colomns"

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
PCPixMusic
Messages : 106
Inscription : ven. 06/janv./2017 9:50

Re: Problèmes SQLite - "Values et colomns"

Message par PCPixMusic »

Je suis en train de faire une version du code avec plusieurs tables, mais j'ai l'erreur "no such table" et j'ai vérifié, en effet les tables ne sont pas créées dans le fichier .sqlite.

Voici la procedure de création de la base de données si elle n'existe pas :

Code : Tout sélectionner

Procedure DB_Init_Tables(); Init Tables
  Protected plFile.l
  Protected psSQLRequest.s
  UseSQLiteDatabase()
  If FileSize(#PB_Compiler_FilePath+"PhotosModèles.sqlite") < 0
    plFile = CreateFile(#PB_Any, #PB_Compiler_FilePath+"PhotosModèles.sqlite")
    If plFile
      CloseFile(plFile)
    EndIf
  EndIf
 
  glDBSQLite = OpenDatabase(#PB_Any, #PB_Compiler_FilePath+"PhotosModèles.sqlite", "", "", #PB_Database_SQLite)
  If glDBSQLite = 0
    MessageRequester("Notysoft Photos Modèles", DatabaseError())
    End
  ElseIf plFile
    psSQLRequest = "CREATE TABLE IF NOT EXISTS contacts ("
    psSQLRequest + "id_contacts INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, " 
    
    psSQLRequest + "contact_prenom TEXT Not NULL, "
    psSQLRequest + "contact_nom TEXT Not NULL, "
    psSQLRequest + "contact_job TEXT, "
    psSQLRequest + "contact_company TEXT, "
    psSQLRequest + "contact_address_1 TEXT, "
    psSQLRequest + "contact_address_2 TEXT, "
    psSQLRequest + "contact_address_3 TEXT, "
    psSQLRequest + "contact_postalcode TEXT, "
    psSQLRequest + "contact_city TEXT, "
    psSQLRequest + "contact_country TEXT, "
    psSQLRequest + "contact_phone TEXT, "
    psSQLRequest + "contact_fax TEXT, "
    psSQLRequest + "contact_mail TEXT, "
    psSQLRequest + "contact_date_de_naissance TEXT, "
    psSQLRequest + "contact_sexe TEXT, "
    psSQLRequest + "contact_cheveux TEXT, "
    psSQLRequest + "contact_yeux TEXT, "
    psSQLRequest + "contact_peau TEXT, "
    psSQLRequest + "contact_taille TEXT, "
    psSQLRequest + "contact_poids TEXT, "
    psSQLRequest + "contact_hanches TEXT, "
    psSQLRequest + "contact_loisir TEXT "    

    psSQLRequest + ")"
    
    
    psSQLRequest = "CREATE TABLE IF NOT EXISTS factures ("
    psSQLRequest + "id_factures INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, "   
   
    psSQLRequest + "facture_Numero_Modele TEXT, "
    psSQLRequest + "facture_Numero_Facture TEXT, "
    psSQLRequest + "facture_prestation TEXT, "
    psSQLRequest + "facture_quantite TEXT, "
    psSQLRequest + "facture_commentaires TEXT,"
    psSQLRequest + "facture_recommandations TEXT, "    
    psSQLRequest + "facture_prix_uht TEXT, "
    psSQLRequest + "facture_date_reglement TEXT, "
    psSQLRequest + "facture_date_execution TEXT, "
    psSQLRequest + "facture_conditions_escompte TEXT "
   
    psSQLRequest + ")"    

    psSQLRequest = "CREATE TABLE IF NOT EXISTS contrats ("
    psSQLRequest + "id_contrats INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, " 
         
    psSQLRequest + "contrat_Numero_Contrat TEXT, "
    psSQLRequest + "contrat_shooting TEXT, "
    psSQLRequest + "contrat_autorisation TEXT, "   
    psSQLRequest + "contrat_fin_validite TEXT, "
    psSQLRequest + "contrat_autres TEXT, "
    psSQLRequest + "contrat_pourcentage TEXT, "
    psSQLRequest + "contrat_euros TEXT "  

    psSQLRequest + ")"   

    psSQLRequest = "CREATE TABLE IF NOT EXISTS seances ("
    psSQLRequest + "id_seances INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, " 
    
    psSQLRequest + "Seance_lieux TEXT, "   
    psSQLRequest + "Seance_tenues TEXT, "   
    psSQLRequest + "Seance_accessoires TEXT, "   
    psSQLRequest + "Seance_makeup TEXT, "   
    psSQLRequest + "Seance_onglerie TEXT, "   
    psSQLRequest + "Seance_coiffure TEXT, "   
    psSQLRequest + "Seance_partenariats TEXT " 
    
    psSQLRequest + ")"    

    psSQLRequest = "CREATE TABLE IF NOT EXISTS checkbox ("
    psSQLRequest + "id_checkbox INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, " 
    
    psSQLRequest + "Etat_CheckBox_0 INTEGER, "
    psSQLRequest + "Etat_CheckBox_1 INTEGER, "
    psSQLRequest + "Etat_CheckBox_2 INTEGER, "
    psSQLRequest + "Etat_CheckBox_3 INTEGER, "
    psSQLRequest + "Etat_CheckBox_4 INTEGER, "
    psSQLRequest + "Etat_CheckBox_5 INTEGER, "
    psSQLRequest + "Etat_CheckBox_6 INTEGER, "
    psSQLRequest + "Etat_CheckBox_7 INTEGER, "
    psSQLRequest + "Etat_CheckBox_8 INTEGER, "
    psSQLRequest + "Etat_CheckBox_9 INTEGER, "
    psSQLRequest + "Etat_CheckBox_10 INTEGER, "
    psSQLRequest + "Etat_CheckBox_11 INTEGER, "
    psSQLRequest + "Etat_CheckBox_12 INTEGER, "
    psSQLRequest + "Etat_CheckBox_13 INTEGER, "
    psSQLRequest + "Etat_CheckBox_14 INTEGER, "
    psSQLRequest + "Etat_CheckBox_15 INTEGER, "
    psSQLRequest + "Etat_CheckBox_16 INTEGER, "
    psSQLRequest + "Etat_CheckBox_17 INTEGER, "
    psSQLRequest + "Etat_CheckBox_18 INTEGER, "
    psSQLRequest + "Etat_CheckBox_19 INTEGER " 
    psSQLRequest + ")"

    psSQLRequest = "CREATE TABLE IF NOT EXISTS contacts_photos ("
    psSQLRequest + "id_contacts_photos INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, " 
    
    psSQLRequest + "contact_photo BLOB, "
    psSQLRequest + "contact_photo_s BLOB, "
    psSQLRequest + "contact_photo_size INTEGER,"
    psSQLRequest + "contact_photo_s_size INTEGER"
    psSQLRequest + ")"          
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; Debug psSQLRequest
    If DatabaseUpdate(glDBSQLite, psSQLRequest) = 0
      MessageRequester("Notysoft Photos Modèles - DB_Init_Tables()", DatabaseError())
    EndIf
  EndIf
  
  ;If DatabaseQuery(glDBSQLite, "SELECT rowid, facture_Numero_Facture,  contact_prenom, contact_nom, contact_job FROM contacts") <> 0       
    
  If DatabaseQuery(glDBSQLite, "SELECT rowid, facture_Numero_Facture FROM factures") <> 0 And DatabaseQuery(glDBSQLite, "SELECT rowid, contact_prenom, contact_nom, contact_job FROM contacts") <> 0   
    
    While NextDatabaseRow(glDBSQLite)       
      AddGadgetItem(#Listview_0, CountGadgetItems(#Listview_0), "Facture N°" +GetDatabaseString(glDBSQLite, 1) + " " +GetDatabaseString(glDBSQLite, 2) + " " + GetDatabaseString(glDBSQLite, 3) + " " + GetDatabaseString(glDBSQLite, 4))      
      SetGadgetItemData(#Listview_0, CountGadgetItems(#Listview_0)-1, GetDatabaseLong(glDBSQLite, 0))
    Wend
    FinishDatabaseQuery(glDBSQLite)
 EndIf
  
EndProcedure
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problèmes SQLite - "Values et colomns"

Message par falsam »

Avec une seule requête SQL tu ne peux pas créer l'ensemble de tes tables : Tu dois exécuter une requête de création pour chaque table et tester si tout c'est bien passé à la fin de ton traitement.

Code : Tout sélectionner

Procedure DB_Init_Tables(); Init Tables
  Protected plFile.l
  Protected psSQLRequest.s
  Protected psSQLError.s
  
  UseSQLiteDatabase()
  
  If FileSize(#PB_Compiler_FilePath+"PhotosModèles.sqlite") < 0
    plFile = CreateFile(#PB_Any, #PB_Compiler_FilePath+"PhotosModèles.sqlite")
    If plFile
      CloseFile(plFile)
    EndIf
  EndIf
  
  glDBSQLite = OpenDatabase(#PB_Any, #PB_Compiler_FilePath+"PhotosModèles.sqlite", "", "", #PB_Database_SQLite)
    
  If glDBSQLite = 0
    MessageRequester("Notysoft Photos Modèles", DatabaseError())
    End
  Else ;If plFile
    psSQLRequest = "CREATE TABLE IF NOT EXISTS contacts ("
    psSQLRequest + "id_contacts INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, " 
    
    psSQLRequest + "contact_prenom TEXT Not NULL, "
    psSQLRequest + "contact_nom TEXT Not NULL, "
    psSQLRequest + "contact_job TEXT, "
    psSQLRequest + "contact_company TEXT, "
    psSQLRequest + "contact_address_1 TEXT, "
    psSQLRequest + "contact_address_2 TEXT, "
    psSQLRequest + "contact_address_3 TEXT, "
    psSQLRequest + "contact_postalcode TEXT, "
    psSQLRequest + "contact_city TEXT, "
    psSQLRequest + "contact_country TEXT, "
    psSQLRequest + "contact_phone TEXT, "
    psSQLRequest + "contact_fax TEXT, "
    psSQLRequest + "contact_mail TEXT, "
    psSQLRequest + "contact_date_de_naissance TEXT, "
    psSQLRequest + "contact_sexe TEXT, "
    psSQLRequest + "contact_cheveux TEXT, "
    psSQLRequest + "contact_yeux TEXT, "
    psSQLRequest + "contact_peau TEXT, "
    psSQLRequest + "contact_taille TEXT, "
    psSQLRequest + "contact_poids TEXT, "
    psSQLRequest + "contact_hanches TEXT, "
    psSQLRequest + "contact_loisir TEXT "    
    psSQLRequest + ")"
    DatabaseUpdate( glDBSQLite, psSQLRequest) 
    psSQLError = DatabaseError()
    
    psSQLRequest = "CREATE TABLE IF NOT EXISTS factures ("
    psSQLRequest + "id_factures INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, "   
    
    psSQLRequest + "facture_Numero_Modele TEXT, "
    psSQLRequest + "facture_Numero_Facture TEXT, "
    psSQLRequest + "facture_prestation TEXT, "
    psSQLRequest + "facture_quantite TEXT, "
    psSQLRequest + "facture_commentaires TEXT,"
    psSQLRequest + "facture_recommandations TEXT, "    
    psSQLRequest + "facture_prix_uht TEXT, "
    psSQLRequest + "facture_date_reglement TEXT, "
    psSQLRequest + "facture_date_execution TEXT, "
    psSQLRequest + "facture_conditions_escompte TEXT "
    psSQLRequest + ")"    
    DatabaseUpdate( glDBSQLite, psSQLRequest) 
    psSQLError =  DatabaseError()
    
    psSQLRequest = "CREATE TABLE IF NOT EXISTS contrats ("
    psSQLRequest + "id_contrats INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, " 
    psSQLRequest + "contrat_Numero_Contrat TEXT, "
    psSQLRequest + "contrat_shooting TEXT, "
    psSQLRequest + "contrat_autorisation TEXT, "   
    psSQLRequest + "contrat_fin_validite TEXT, "
    psSQLRequest + "contrat_autres TEXT, "
    psSQLRequest + "contrat_pourcentage TEXT, "
    psSQLRequest + "contrat_euros TEXT "  
    psSQLRequest + ")"   
    DatabaseUpdate( glDBSQLite, psSQLRequest) 
    psSQLError = DatabaseError()
    
    psSQLRequest = "CREATE TABLE IF NOT EXISTS seances ("
    psSQLRequest + "id_seances INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, " 
    psSQLRequest + "Seance_lieux TEXT, "   
    psSQLRequest + "Seance_tenues TEXT, "   
    psSQLRequest + "Seance_accessoires TEXT, "   
    psSQLRequest + "Seance_makeup TEXT, "   
    psSQLRequest + "Seance_onglerie TEXT, "   
    psSQLRequest + "Seance_coiffure TEXT, "   
    psSQLRequest + "Seance_partenariats TEXT " 
    psSQLRequest + ")"    
    DatabaseUpdate( glDBSQLite, psSQLRequest) 
    psSQLError = DatabaseError()
    
    psSQLRequest = "CREATE TABLE IF NOT EXISTS checkbox ("
    psSQLRequest + "id_checkbox INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, " 
    psSQLRequest + "Etat_CheckBox_0 INTEGER, "
    psSQLRequest + "Etat_CheckBox_1 INTEGER, "
    psSQLRequest + "Etat_CheckBox_2 INTEGER, "
    psSQLRequest + "Etat_CheckBox_3 INTEGER, "
    psSQLRequest + "Etat_CheckBox_4 INTEGER, "
    psSQLRequest + "Etat_CheckBox_5 INTEGER, "
    psSQLRequest + "Etat_CheckBox_6 INTEGER, "
    psSQLRequest + "Etat_CheckBox_7 INTEGER, "
    psSQLRequest + "Etat_CheckBox_8 INTEGER, "
    psSQLRequest + "Etat_CheckBox_9 INTEGER, "
    psSQLRequest + "Etat_CheckBox_10 INTEGER, "
    psSQLRequest + "Etat_CheckBox_11 INTEGER, "
    psSQLRequest + "Etat_CheckBox_12 INTEGER, "
    psSQLRequest + "Etat_CheckBox_13 INTEGER, "
    psSQLRequest + "Etat_CheckBox_14 INTEGER, "
    psSQLRequest + "Etat_CheckBox_15 INTEGER, "
    psSQLRequest + "Etat_CheckBox_16 INTEGER, "
    psSQLRequest + "Etat_CheckBox_17 INTEGER, "
    psSQLRequest + "Etat_CheckBox_18 INTEGER, "
    psSQLRequest + "Etat_CheckBox_19 INTEGER " 
    psSQLRequest + ")"
    DatabaseUpdate( glDBSQLite, psSQLRequest) 
    psSQLError = DatabaseError()
    
    psSQLRequest = "CREATE TABLE IF NOT EXISTS contacts_photos ("
    psSQLRequest + "id_contacts_photos INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, "     
    psSQLRequest + "contact_photo BLOB, "
    psSQLRequest + "contact_photo_s BLOB, "
    psSQLRequest + "contact_photo_size INTEGER,"
    psSQLRequest + "contact_photo_s_size INTEGER"
    psSQLRequest + ")"          
    DatabaseUpdate( glDBSQLite, psSQLRequest) 
    psSQLError = DatabaseError()

    ; Il y a t'il eu une erreur ?
    If psSQLError <> "" 
      MessageRequester("Notysoft Photos Modèles - DB_Init_Tables()", psSQLError)
    EndIf
  EndIf  
EndProcedure

DB_Init_Tables()
■ Un utilitaire pour vérifier la structure et le contenu de tes tables.
http://www.purebasic.fr/french/viewtopi ... 60#p177460
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%
PCPixMusic
Messages : 106
Inscription : ven. 06/janv./2017 9:50

Re: Problèmes SQLite - "Values et colomns"

Message par PCPixMusic »

Bonjour et merci beaucoup falsam !

Tout fonctionne avec les tables ! :mrgreen:
PCPixMusic
Messages : 106
Inscription : ven. 06/janv./2017 9:50

Re: Problèmes SQLite - "Values et colomns"

Message par PCPixMusic »

Par contre dans la Procedure DB_Init, toutes les factures s'affichent par défaut avec le numéro de facture de la dernière fiche dans la ListeView. Les autres Procedure m'affiche bien le bon numéro de facture dans la ListeView. :oops:

Code : Tout sélectionner

  If DatabaseQuery(glDBSQLite, "SELECT rowid, facture_Numero_Facture FROM factures") <> 0 
   While NextDatabaseRow(glDBSQLite)        
     StringFacture_Numero = GetDatabaseString(glDBSQLite, 1)     
   Wend
   FinishDatabaseQuery(glDBSQLite) 
  EndIf
      
   If DatabaseQuery(glDBSQLite, "SELECT rowid, contact_prenom, contact_nom, contact_job FROM contacts") <> 0       
     While NextDatabaseRow(glDBSQLite)         
     AddGadgetItem(#Listview_0, CountGadgetItems(#Listview_0), "Facture N°" + StringFacture_Numero + " " + GetDatabaseString(glDBSQLite, 1)  + " " +  GetDatabaseString(glDBSQLite, 2) + " " + GetDatabaseString(glDBSQLite, 3) + " " + GetDatabaseString(glDBSQLite, 4))      
     SetGadgetItemData(#Listview_0, CountGadgetItems(#Listview_0)-1, GetDatabaseLong(glDBSQLite, 0))
    Wend
    FinishDatabaseQuery(glDBSQLite)    
  EndIff 
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problèmes SQLite - "Values et colomns"

Message par falsam »

Prologue.
N'ayant pas la vision globale du code de ton application, je me suis fait une idée de ce que tu veux.

Ma réponse va te paraître brutale : AIEEEEEE !

Analyse de la demande.
Ce code sélectionne l'ensemble de tes factures

Code : Tout sélectionner

If DatabaseQuery(glDBSQLite, "SELECT rowid, facture_Numero_Facture FROM factures") <> 0 
  While NextDatabaseRow(glDBSQLite)        
    StringFacture_Numero = GetDatabaseString(glDBSQLite, 1)     
  Wend
  FinishDatabaseQuery(glDBSQLite) 
EndIf
Selectionner rowid dans ce cas n'est pas nécessaire car tu as une clé auto-généré avec facture_Numero_Facture mais ça n'a pas d'importance.

Avec le code suivant ça se gâte.

Code : Tout sélectionner

If DatabaseQuery(glDBSQLite, "SELECT rowid, contact_prenom, contact_nom, contact_job FROM contacts") <> 0       
  While NextDatabaseRow(glDBSQLite)         
    AddGadgetItem(#Listview_0, CountGadgetItems(#Listview_0), "Facture N°" + StringFacture_Numero + " " + GetDatabaseString(glDBSQLite, 1)  + " " +  GetDatabaseString(glDBSQLite, 2) + " " + GetDatabaseString(glDBSQLite, 3) + " " + GetDatabaseString(glDBSQLite, 4))      
    SetGadgetItemData(#Listview_0, CountGadgetItems(#Listview_0)-1, GetDatabaseLong(glDBSQLite, 0))
  Wend
  FinishDatabaseQuery(glDBSQLite)    
EndIf
Tu sélectionnes quatre colonnes (champs) numérotés de 0 à 3

rowid (0)
contact_prenom (1)
contact_nom (2)
contact_job (3)

Et tu cherches à afficher GetDatabaseString(glDBSQLite, 4). D'ou il sort celui là ? ^^

Code : Tout sélectionner

AddGadgetItem(#Listview_0, ... GetDatabaseString(glDBSQLite, 4))
:idea: Petite parenthèse : Remplace par CountGadgetItems(#Listview_0)-1 par -1 pour placer automatiquement ton item en fin de liste.

:!: Il m'est venu une idée aussi sotte que grenu en voyant ce détail!!

Code : Tout sélectionner

AddGadgetItem(#Listview_0, CountGadgetItems(#Listview_0), "Facture N°" + StringFacture_Numero ....
Mais heu qu'est ce que c'est que ça ?
PCPixMusic a écrit :Par contre dans la Procedure DB_Init, toutes les factures s'affichent par défaut avec le numéro de facture de la dernière fiche dans la ListeView.
Et bien oui PCPixMusic : c'est normal et c'est pas bien car la variable StringFacture_Numero contiendra toujours le dernier numéro lu dans la boucle

Code : Tout sélectionner

While NextDatabaseRow(glDBSQLite)        
    StringFacture_Numero = GetDatabaseString(glDBSQLite, 1)     
  Wend
Place debug StringFacture_Numero aprés Wend et tu verra le résultat.

Alors quelle est la solution ?
Aucune pour le moment car ta base de données n'est pas structurée.

Tu as une table contacts qui contient bien un champ indexé séquentiel (id_contacts INTEGER PRIMARY KEY AUTOINCREMENT Not NULL) mais tu ne t'en sert pas pour l'associer à ta table factures pour associer chaque facture à un numéro de contact.

Si ça avait été le cas on aurait pu faire une requête SELECT avec une jointure entres les tables.

:idea: Quelques explications ici http://www.purebasic.fr/french/viewtopi ... =6&t=13156
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%
PCPixMusic
Messages : 106
Inscription : ven. 06/janv./2017 9:50

Re: Problèmes SQLite - "Values et colomns"

Message par PCPixMusic »

L'utilisation de la variable StringFacture_Numero était faite pour afficher le numéro de facture, qui n'est pas dans la table contacts. ^^

Merci beaucoup pour ta réponse, j'ai compris l'idée de jointure des tables, mais pas vraiment la mise en pratique ...

Je m'excuse encore pour toutes ces questions. :oops:

Code : Tout sélectionner

  Procedure DB_Init_Tables(); Init Tables
  Protected plFile.l
  Protected psSQLRequest.s
  Protected psSQLError.s
  Protected StringFacture_Numero.s
 
  UseSQLiteDatabase()
 
  If FileSize(#PB_Compiler_FilePath+"PhotosModèles.sqlite") < 0
    plFile = CreateFile(#PB_Any, #PB_Compiler_FilePath+"PhotosModèles.sqlite")
    If plFile
      CloseFile(plFile)
    EndIf
  EndIf
 
  glDBSQLite = OpenDatabase(#PB_Any, #PB_Compiler_FilePath+"PhotosModèles.sqlite", "", "", #PB_Database_SQLite)
   
  If glDBSQLite = 0
    MessageRequester("Notysoft Photos Modèles", DatabaseError())
    End
  Else ;If plFile
    psSQLRequest = "CREATE TABLE IF NOT EXISTS contacts ("
    psSQLRequest + "id_contacts INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, "
   
    psSQLRequest + "contact_prenom TEXT Not NULL, "
    psSQLRequest + "contact_nom TEXT Not NULL, "
    psSQLRequest + "contact_job TEXT, "
    psSQLRequest + "contact_company TEXT, "
    psSQLRequest + "contact_address_1 TEXT, "
    psSQLRequest + "contact_address_2 TEXT, "
    psSQLRequest + "contact_address_3 TEXT, "
    psSQLRequest + "contact_postalcode TEXT, "
    psSQLRequest + "contact_city TEXT, "
    psSQLRequest + "contact_country TEXT, "
    psSQLRequest + "contact_phone TEXT, "
    psSQLRequest + "contact_fax TEXT, "
    psSQLRequest + "contact_mail TEXT, "
    psSQLRequest + "contact_date_de_naissance TEXT, "
    psSQLRequest + "contact_sexe TEXT, "
    psSQLRequest + "contact_cheveux TEXT, "
    psSQLRequest + "contact_yeux TEXT, "
    psSQLRequest + "contact_peau TEXT, "
    psSQLRequest + "contact_taille TEXT, "
    psSQLRequest + "contact_poids TEXT, "
    psSQLRequest + "contact_hanches TEXT, "
    psSQLRequest + "contact_loisir TEXT "   
    psSQLRequest + ")"
    DatabaseUpdate( glDBSQLite, psSQLRequest)
    psSQLError = DatabaseError()
   
    psSQLRequest = "CREATE TABLE IF NOT EXISTS factures ("
    psSQLRequest + "id_factures INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, "   
   
    psSQLRequest + "facture_Numero_Modele TEXT, "
    psSQLRequest + "facture_Numero_Facture TEXT, "
    psSQLRequest + "facture_prestation TEXT, "
    psSQLRequest + "facture_quantite TEXT, "
    psSQLRequest + "facture_commentaires TEXT,"
    psSQLRequest + "facture_recommandations TEXT, "   
    psSQLRequest + "facture_prix_uht TEXT, "
    psSQLRequest + "facture_date_reglement TEXT, "
    psSQLRequest + "facture_date_execution TEXT, "
    psSQLRequest + "facture_conditions_escompte TEXT "
    psSQLRequest + ")"     
   
    DatabaseUpdate( glDBSQLite, psSQLRequest)
    psSQLError =  DatabaseError()
   
    psSQLRequest = "CREATE TABLE IF NOT EXISTS contrats ("
    psSQLRequest + "id_contrats INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, "
    psSQLRequest + "contrat_Numero_Contrat TEXT, "
    psSQLRequest + "contrat_shooting TEXT, "
    psSQLRequest + "contrat_autorisation TEXT, "   
    psSQLRequest + "contrat_fin_validite TEXT, "
    psSQLRequest + "contrat_autres TEXT, "
    psSQLRequest + "contrat_pourcentage TEXT, "
    psSQLRequest + "contrat_euros TEXT " 
    psSQLRequest + ")"   
    DatabaseUpdate( glDBSQLite, psSQLRequest)
    psSQLError = DatabaseError()
   
    psSQLRequest = "CREATE TABLE IF NOT EXISTS seances ("
    psSQLRequest + "id_seances INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, "
    psSQLRequest + "Seance_lieux TEXT, "   
    psSQLRequest + "Seance_tenues TEXT, "   
    psSQLRequest + "Seance_accessoires TEXT, "   
    psSQLRequest + "Seance_makeup TEXT, "   
    psSQLRequest + "Seance_onglerie TEXT, "   
    psSQLRequest + "Seance_coiffure TEXT, "   
    psSQLRequest + "Seance_partenariats TEXT "
    psSQLRequest + ")"   
    DatabaseUpdate( glDBSQLite, psSQLRequest)
    psSQLError = DatabaseError()
   
    psSQLRequest = "CREATE TABLE IF NOT EXISTS checkbox ("
    psSQLRequest + "id_checkbox INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, "
    psSQLRequest + "Etat_CheckBox_0 INTEGER, "
    psSQLRequest + "Etat_CheckBox_1 INTEGER, "
    psSQLRequest + "Etat_CheckBox_2 INTEGER, "
    psSQLRequest + "Etat_CheckBox_3 INTEGER, "
    psSQLRequest + "Etat_CheckBox_4 INTEGER, "
    psSQLRequest + "Etat_CheckBox_5 INTEGER, "
    psSQLRequest + "Etat_CheckBox_6 INTEGER, "
    psSQLRequest + "Etat_CheckBox_7 INTEGER, "
    psSQLRequest + "Etat_CheckBox_8 INTEGER, "
    psSQLRequest + "Etat_CheckBox_9 INTEGER, "
    psSQLRequest + "Etat_CheckBox_10 INTEGER, "
    psSQLRequest + "Etat_CheckBox_11 INTEGER, "
    psSQLRequest + "Etat_CheckBox_12 INTEGER, "
    psSQLRequest + "Etat_CheckBox_13 INTEGER, "
    psSQLRequest + "Etat_CheckBox_14 INTEGER, "
    psSQLRequest + "Etat_CheckBox_15 INTEGER, "
    psSQLRequest + "Etat_CheckBox_16 INTEGER, "
    psSQLRequest + "Etat_CheckBox_17 INTEGER, "
    psSQLRequest + "Etat_CheckBox_18 INTEGER, "
    psSQLRequest + "Etat_CheckBox_19 INTEGER "
    psSQLRequest + ")"
    DatabaseUpdate( glDBSQLite, psSQLRequest)
    psSQLError = DatabaseError()
   
    psSQLRequest = "CREATE TABLE IF NOT EXISTS contacts_photos ("
    psSQLRequest + "id_contacts_photos INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, "     
    psSQLRequest + "contact_photo BLOB, "
    psSQLRequest + "contact_photo_s BLOB, "
    psSQLRequest + "contact_photo_size INTEGER,"
    psSQLRequest + "contact_photo_s_size INTEGER"
    psSQLRequest + ")"         
    DatabaseUpdate( glDBSQLite, psSQLRequest)
    psSQLError = DatabaseError()
    
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; Il y a t'il eu une erreur ?
    If psSQLError <> ""
      MessageRequester("Notysoft Photos Modèles - DB_Init_Tables()", psSQLError)
    EndIf
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   
            
     ;psSQLRequest = "SELECT contact_prenom, contact_nom, contact_job"
     ;psSQLRequest + " FROM contacts "
     ;psSQLRequest + " JOIN factures"
     ;psSQLRequest + " ON id_contacts = id_factures "     
     
     ;DatabaseQuery(glDBSQLite,psSQLRequest)
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    
   ;If DatabaseQuery(glDBSQLite, "SELECT *, facture_Numero_Facture FROM factures") <> 0 
   ;While NextDatabaseRow(glDBSQLite)        
    ; StringFacture_Numero = GetDatabaseString(glDBSQLite, 1)     
   ;Wend
   ;FinishDatabaseQuery(glDBSQLite) 
  ;EndIf
      
     ;If DatabaseQuery(glDBSQLite, "SELECT *, contact_prenom, contact_nom, contact_job FROM contacts") <> 0       
     
 If DatabaseQuery(glDBSQLite, "SELECT * FROM contacts JOIN factures ON id_contacts = id_factures") <> 0            
     While NextDatabaseRow(glDBSQLite)         
     AddGadgetItem(#Listview_0, CountGadgetItems(#Listview_0), "Facture N°" + StringFacture_Numero + " " +  GetDatabaseString(glDBSQLite, 1) + " " + GetDatabaseString(glDBSQLite, 2) + " " + GetDatabaseString(glDBSQLite, 34))      
     SetGadgetItemData(#Listview_0, CountGadgetItems(#Listview_0)-1, GetDatabaseLong(glDBSQLite, 0))
    Wend
    FinishDatabaseQuery(glDBSQLite)    
  EndIf 
    
EndIf
EndProcedure
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problèmes SQLite - "Values et colomns"

Message par falsam »

la question est toujours la même. Comment tu relis une facture à un client. Dans ton exemple ce n'est pas le cas.

Code : Tout sélectionner

psSQLRequest = "CREATE TABLE IF NOT EXISTS factures ("
    psSQLRequest + "id_factures INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, "   
   
    psSQLRequest + "facture_Numero_Modele TEXT, "
    psSQLRequest + "facture_Numero_Facture TEXT, "
    psSQLRequest + "facture_prestation TEXT, "
    psSQLRequest + "facture_quantite TEXT, "
    psSQLRequest + "facture_commentaires TEXT,"
    psSQLRequest + "facture_recommandations TEXT, "   
    psSQLRequest + "facture_prix_uht TEXT, "
    psSQLRequest + "facture_date_reglement TEXT, "
    psSQLRequest + "facture_date_execution TEXT, "
    psSQLRequest + "facture_conditions_escompte TEXT "
    psSQLRequest + ")"    
On voit bien une facture mais elle n'est pas relié à un identifiant client.

Le code de création de la table facture devrait être celui là.

Code : Tout sélectionner

psSQLRequest = "CREATE TABLE IF NOT EXISTS factures ("
psSQLRequest + "id_factures INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, "   

;Ajout de l'identifiant client qui fera le lien dans ta table client
psSQLRequest + "id_contacts INTEGER, "  

psSQLRequest + "facture_Numero_Modele TEXT, "
psSQLRequest + "facture_Numero_Facture TEXT, "
psSQLRequest + "facture_prestation TEXT, "
psSQLRequest + "facture_quantite TEXT, "
psSQLRequest + "facture_commentaires TEXT,"
psSQLRequest + "facture_recommandations TEXT, "   
psSQLRequest + "facture_prix_uht TEXT, "
psSQLRequest + "facture_date_reglement TEXT, "
psSQLRequest + "facture_date_execution TEXT, "
psSQLRequest + "facture_conditions_escompte TEXT "
psSQLRequest + ")"    
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%
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Problèmes SQLite - "Values et colomns"

Message par Marc56 »

@ PCPixMusic

:idea: Sachant que les signes de ponctuation sont considérés comme annulant le saut de ligne,
(en attendant peut-être un jour le '_' ou '\')
Tu peux écrire ce type de concaténation:

Code : Tout sélectionner

psSQLRequest = "CREATE TABLE IF NOT EXISTS factures ("
psSQLRequest + "id_factures INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, "   
psSQLRequest + "id_contacts INTEGER, " 
psSQLRequest + "facture_Numero_Modele TEXT, "
psSQLRequest + "facture_Numero_Facture TEXT, "
psSQLRequest + "facture_prestation TEXT, "
psSQLRequest + "facture_quantite TEXT, "
psSQLRequest + "facture_commentaires TEXT,"
psSQLRequest + "facture_recommandations TEXT, "   
psSQLRequest + "facture_prix_uht TEXT, "
psSQLRequest + "facture_date_reglement TEXT, "
psSQLRequest + "facture_date_execution TEXT, "
psSQLRequest + "facture_conditions_escompte TEXT "
psSQLRequest + ")"  
comme ceci:

Code : Tout sélectionner

psSQLRequest = "CREATE TABLE IF NOT EXISTS factures ("                     +
               "id_factures INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, "  +  
               "id_contacts INTEGER, "                                     + 
               "facture_Numero_Modele TEXT, "                              + 
               "facture_Numero_Facture TEXT, "                             +
               "facture_prestation TEXT, "                                 +
               "facture_quantite TEXT, "                                   +
               "facture_commentaires TEXT,"                                +
               "facture_recommandations TEXT, "                            +
               "facture_prix_uht TEXT, "                                   +
               "facture_date_reglement TEXT, "                             +
               "facture_date_execution TEXT, "                             +
               "facture_conditions_escompte TEXT "                         +
               ")"  
C'est plus joli (IMHO), plus lisible et plus rapide (je pense) car il n'y aura qu'une seule opération de concaténation contre 14

L'indentation se fait automatiquement (CTRL+A puis CTRL+I)

:P
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problèmes SQLite - "Values et colomns"

Message par falsam »

PCPixMusic a écrit :j'ai compris l'idée de jointure des tables, mais pas vraiment la mise en pratique ...
Petit code explicatif réduit au strict minimum.

- Création d'une table clients avec idclient automatique
- Création d'une table factures avec idfacture automatique : idclient fera le lien
- Mise en place de quelques enregistrements de test.
- Liste des factures simplifiés.

La suite des commentaires est dans le code.

Code : Tout sélectionner

Enumeration
  #DataBase
EndEnumeration

UseSQLiteDatabase()

Global ReqSql.s

If OpenDatabase(#DataBase, ":memory:", "", "")
  Debug "Connecté"
  
  ;Creation de la table 'clients'
  ;- Un client est relié à 0 à N factures
  ReqSql = "CREATE TABLE clients ("
  ReqSql + "idclient INTEGER PRIMARY KEY,"        ;Identifiant client automatique
  ReqSql + "nom TEXTE"                            ;Nom client 
  ReqSql + ");"
  
  DatabaseUpdate(#DataBase, ReqSql)               ;Création de la table      
  
  ;Pour ce test nous allons ajouter quelques clients
  ;-L'identifiant de 'John Dovali' sera = 1 (idclient INTEGER PRIMARY KEY)
  ;-L'identifiant de 'Bart Jovoho' sera = 2 (idclient INTEGER PRIMARY KEY)
  DatabaseUpdate(#DataBase, "insert into clients(nom) values('John Dovali')")
  DatabaseUpdate(#DataBase, "insert into clients(nom) values('Bart Jovoho')")
    
  ;Creation de la table facture
  ;- Une facture est relié à un et un seul client
  ReqSql = "CREATE TABLE factures ("
  ReqSql + "idfacture INTEGER PRIMARY KEY,"       ;Identifiant facture automatique
  ReqSql + "idclient INTEGER,"                    ;Identifiant client
  ReqSql + "montant INTEGER"                      ;Montant total de la facture 
  ReqSql + ");"
  
  DatabaseUpdate(#DataBase, ReqSql)               ;Création de la table
  Debug DatabaseError()
         
  ;Pour ce test on va créer quelques factures pour le client 'John Dovali' & 'Bart Jovoho'
  DatabaseUpdate(#DataBase, "insert into factures(idclient, montant) values('1','100')")
  DatabaseUpdate(#DataBase, "insert into factures(idclient, montant) values('2','100')")
  DatabaseUpdate(#DataBase, "insert into factures(idclient, montant) values('2','200')")
  DatabaseUpdate(#DataBase, "insert into factures(idclient, montant) values('2','300')")
  
  ;Liste des factures  
  ;- On effectue une jointure entre le fichier 'clients' et le ficher 'factures' avec le champ 'idclient'
  ;- clients.idclient = factures.idclient
  ReqSql = "SELECT clients.nom, factures.idfacture, factures.montant"
  
  ;Jointure 
  ReqSql + " FROM clients"
  ReqSql + " JOIN factures"
   
  ReqSql + " ON (clients.idclient = factures.idclient)"
  
  DatabaseQuery(#Database, ReqSql)
  Debug DatabaseError()
    
  ;Affichage du résultat de la requete
  Debug "Liste des factures clients"
  While NextDatabaseRow(#Database )
    Debug GetDatabaseString(#DataBase, 0) + " | " +  GetDatabaseString(#Database, 1) + " | " +  GetDatabaseString(#Database, 2)
  Wend
  
Else
  Debug DatabaseError()      
EndIf
tu auras comme résultat
Connecté
Liste des factures clients
John Dovali | 1 | 100
Bart Jovoho | 2 | 100
Bart Jovoho | 3 | 200
Bart Jovoho | 4 | 300
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%
PCPixMusic
Messages : 106
Inscription : ven. 06/janv./2017 9:50

Re: Problèmes SQLite - "Values et colomns"

Message par PCPixMusic »

Merci, j'ai fait la modification de présentation, j'ai ajouté la table contacts Interger avec la table factures, j'ai ajouté également l'enregistrement montant en Interger.

Mais pour mon problème de ListeView ? ^^
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problèmes SQLite - "Values et colomns"

Message par falsam »

PCPixMusic a écrit :Mais pour mon problème de ListeView ? ^^
Ha mince je croyais avoir répondu !! Le dernier code que j'ai publié devait répondre à ta demande. Apparemment je n'ai pas été compris.
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%
PCPixMusic
Messages : 106
Inscription : ven. 06/janv./2017 9:50

Re: Problèmes SQLite - "Values et colomns"

Message par PCPixMusic »

Au départ, quand je n'avait que contacts en table, j'avais ce code pour l'affichage dans La ListeView:

Code : Tout sélectionner

 If DatabaseQuery(glDBSQLite, "SELECT rowid, contact_Numero_Facture,  contact_prenom, contact_nom, contact_job FROM contacts") <> 0
    While NextDatabaseRow(glDBSQLite)   
      AddGadgetItem(#Listview_0, CountGadgetItems(#Listview_0), "Facture N°" +GetDatabaseString(glDBSQLite, 1) + " " +GetDatabaseString(glDBSQLite, 2) + " " + GetDatabaseString(glDBSQLite, 3) + " " + GetDatabaseString(glDBSQLite, 4))      
      SetGadgetItemData(#Listview_0, CountGadgetItems(#Listview_0)-1, GetDatabaseLong(glDBSQLite, 0))
    Wend
    FinishDatabaseQuery(glDBSQLite)
  EndIf 
Actuellement contact_Numero_Facture est devenu facture_Numero_Facture dans la Table Factures, ce qui fait que
le numéro de facture ne s'affiche plus dans La ListeView
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problèmes SQLite - "Values et colomns"

Message par falsam »

N'ayant pas le code complet je ne sais pas ce qu'il se passe. Inutile de le poster. Je vais reprendre le code que j'ai fait et te montrer comment l'intégrer dans un listicongadget().
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%
PCPixMusic
Messages : 106
Inscription : ven. 06/janv./2017 9:50

Re: Problèmes SQLite - "Values et colomns"

Message par PCPixMusic »

D'accord. Merci. :D
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problèmes SQLite - "Values et colomns"

Message par falsam »

Le code précédent avec intégration du résultat dans un ListIconGadget()

Code : Tout sélectionner

Enumeration Database 
  #DataBase
EndEnumeration

Enumeration Window
  #mainform  
EndEnumeration

Enumeration Gadget
  #factures
EndEnumeration

UseSQLiteDatabase()

Global ReqSql.s

;Plan de l'application
Declare InitBase()
Declare Start()
Declare ListeFactures()
Declare Exit()

Initbase()
Start()

Procedure InitBase()
  If OpenDatabase(#DataBase, ":memory:", "", "")
    ;Creation de la table 'clients'
    ;- Un client est relié à 0 à N factures
    ReqSql = "CREATE TABLE clients ("
    ReqSql + "idclient INTEGER PRIMARY KEY,"        ;Identifiant client automatique
    ReqSql + "nom TEXTE"                            ;Nom client 
    ReqSql + ");"
    
    DatabaseUpdate(#DataBase, ReqSql)               ;Création de la table      
    
    ;Pour ce test nous allons ajouter quelques clients
    ;-L'identifiant de 'John Dovali' sera = 1 (idclient INTEGER PRIMARY KEY)
    ;-L'identifiant de 'Bart Jovoho' sera = 2 (idclient INTEGER PRIMARY KEY)
    DatabaseUpdate(#DataBase, "insert into clients(nom) values('John Dovali')")
    DatabaseUpdate(#DataBase, "insert into clients(nom) values('Bart Jovoho')")
    
    ;Creation de la table facture
    ;- Une facture est relié à un et un seul client
    ReqSql = "CREATE TABLE factures ("
    ReqSql + "idfacture INTEGER PRIMARY KEY,"       ;Identifiant facture automatique
    ReqSql + "idclient INTEGER,"                    ;Identifiant client
    ReqSql + "montant INTEGER"                      ;Montant total de la facture 
    ReqSql + ");"
    
    DatabaseUpdate(#DataBase, ReqSql)               ;Création de la table
    
    ;Pour ce test on va créer quelques factures pour le client 'John Do' & 'Bart Jovoho'
    DatabaseUpdate(#DataBase, "insert into factures(idclient, montant) values('1','100')")
    DatabaseUpdate(#DataBase, "insert into factures(idclient, montant) values('2','100')")
    DatabaseUpdate(#DataBase, "insert into factures(idclient, montant) values('2','200')")
    DatabaseUpdate(#DataBase, "insert into factures(idclient, montant) values('2','300')")    
  Else
    Debug DatabaseError()      
  EndIf
EndProcedure

Procedure Start()
  OpenWindow(#mainForm, 0, 0, 800, 600, "Fermer une fenetre", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  ListIconGadget(#factures, 10, 10, 700, 500, "Client", 100)
  AddGadgetColumn(#factures, 1, "Numéro facture", 100)
  AddGadgetColumn(#factures, 2, "Montant TTC", 100)
  
  ;Liste des factures
  ListeFactures()
  
  ;Triggers
  BindEvent(#PB_Event_CloseWindow, @Exit())
  
  Repeat : WaitWindowEvent() : ForEver
EndProcedure

Procedure ListeFactures()
  Protected Buffer.s
  
  ReqSql = "SELECT clients.nom, factures.idfacture, factures.montant"  
  ReqSql + " FROM clients"
  ReqSql + " JOIN factures"
  ReqSql + " ON (clients.idclient = factures.idclient)"
  
  DatabaseQuery(#Database, ReqSql)
  
  While NextDatabaseRow(#Database )
    Buffer = GetDatabaseString(#DataBase, 0) + Chr(10) + GetDatabaseString(#Database, 1) + Chr(10) + GetDatabaseString(#Database, 2)
    AddGadgetItem(#factures, -1, Buffer)  
  Wend  
EndProcedure

Procedure Exit()  
  End
EndProcedure

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%
Répondre