Problème sqlite (RESOLU)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
MetalOS
Messages : 1509
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Problème sqlite (RESOLU)

Message par MetalOS »

Salut tous le monde,

Je débute un peut sur la gestion de base de données sqlite et je rencontre un problème au moment de la création de mes tables. Voici ma procédure

Code : Tout sélectionner

Procedure DBMC_Init()
  Protected plFile.l
  Protected psSQLRequest.s
  UseSQLiteDatabase()
  If FileSize("MC.sqlite") < 0
    plFile = CreateFile(#PB_Any, "MC.sqlite")
    If plFile
      CloseFile(plFile)
    EndIf
  EndIf
  
  glDBSQLite = OpenDatabase(#PB_Any, "MC.sqlite", "", "", #PB_Database_SQLite)
  If glDBSQLite = 0
    MessageRequester("Evènement main courante", DatabaseError())
    End
  ElseIf plFile
    psSQLRequest = "CREATE TABLE IF NOT EXISTS maincourante ("
    psSQLRequest + "id_maincourante INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, "
    psSQLRequest + "maincourante_auteur TEXT Not NULL, "
    psSQLRequest + "maincourante_date TEXT Not NULL, "
    psSQLRequest + "maincourante_heure TEXT Not NULL, "
    psSQLRequest + "maincourante_categorie TEXT Not NULL, "
    psSQLRequest + "maincourante_lieu TEXT Not NULL, "
    psSQLRequest + "maincourante_requerant TEXT Not NULL, "
    psSQLRequest + "maincourante_sujet TEXT Not NULL, "
    psSQLRequest + "maincourante_commantaires TEXT Not NULL"
    psSQLRequest + "maincourante_photo BLOB, "
    psSQLRequest + "maincourante_photo_size INTEGER"
    psSQLRequest + ")"
    ; Debug psSQLRequest
    If DatabaseUpdate(glDBSQLite, psSQLRequest) = 0
      MessageRequester("Evènement main-courante - DBMC_Init()", DatabaseError())
    EndIf
  EndIf
  
  If DatabaseQuery(glDBSQLite, "SELECT * FROM maincourante") <> 0
    While NextDatabaseRow(glDBSQLite)
      AddGadgetItem(#ExplorerMC, CountGadgetItems(#ExplorerMC), GetDatabaseString(glDBSQLite, 0) + Chr(10) + GetDatabaseString(glDBSQLite, 1) + Chr(10) + GetDatabaseString(glDBSQLite, 2) + Chr(10) + GetDatabaseString(glDBSQLite, 3) + Chr(10) + GetDatabaseString(glDBSQLite, 4) + Chr(10) + GetDatabaseString(glDBSQLite, 5) + Chr(10) + GetDatabaseString(glDBSQLite, 6) + Chr(10) + GetDatabaseString(glDBSQLite, 7) + Chr(10) + GetDatabaseString(glDBSQLite, 8))
      SetGadgetItemData(#ExplorerMC, CountGadgetItems(#ExplorerMC)-1, GetDatabaseLong(glDBSQLite, 0))
    Wend
    FinishDatabaseQuery(glDBSQLite)
  EndIf
EndProcedure
Au moment ou j'appel m'a procédure pour créer ma base avec ses tables j'ai une erreur de syntaxe sur la table maincourante_photo. Et francement je ne vois pas ou ce trouve l'erreur, pour moi la syntaxe et bonne, à moins que je me plante. Merci d'avance pour votre aide.
Dernière modification par MetalOS le jeu. 30/mars/2023 14:44, modifié 1 fois.
Avatar de l’utilisateur
MetalOS
Messages : 1509
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Problème sqlite

Message par MetalOS »

Putain çà fait 2 jours que je cherche et je viens de trouver. il me manque une virgule juste après

Code : Tout sélectionner

 psSQLRequest + "maincourante_commantaires TEXT Not NULL"
Voici la solution

Code : Tout sélectionner

psSQLRequest + "maincourante_commantaires TEXT Not NULL, "
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Problème sqlite

Message par Ar-S »

Putain çà fait 2 jours que je cherche et je viens de trouver. il me manque une virgule juste après
Pour le fun j'ai balancé ta requête à chatGPT, il a trouvé directe l'erreur. C'est exactement pour ce genre de chose que je trouve ça très cool. Quand tu bloques sur un truc à la con que tu as pourtant sous les yeux.
Comme il n'est pas très au point avec PB je lui ai juste soumis la requête en lui disant de ne pas prêter attention à la syntaxe avec les +
chatGPT a écrit :Oui, il y a une erreur dans la requête SQL. Il manque une virgule entre les colonnes "maincourante_commantaires" et "maincourante_photo".
La requête SQL correcte devrait être :
(... il ecrit la requête avec la virgule)
Cette version corrigée ajoute une virgule après "maincourante_commantaires" pour la séparer de la colonne "maincourante_photo".
:D
~~~~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
Avatar de l’utilisateur
MetalOS
Messages : 1509
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Problème sqlite

Message par MetalOS »

Putain c'est pas con le coup de ChatGPT :lol: :lol: :lol: :lol: ca m'aurait fait gagné 2 jours.
Avatar de l’utilisateur
MetalOS
Messages : 1509
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Problème sqlite

Message par MetalOS »

Par contre quand je cherche à insérer des données dans ma base j'ai une erreur d'incompatibilité de type de données. Voici mes procédures.

Code : Tout sélectionner

Procedure DBMC_Init()
  Protected plFile.l
  Protected psSQLRequest.s
  UseSQLiteDatabase()
  If FileSize("MC.sqlite") < 0
    plFile = CreateFile(#PB_Any, "MC.sqlite")
    If plFile
      CloseFile(plFile)
    EndIf
  EndIf
  
  glDBSQLite = OpenDatabase(#PB_Any, "MC.sqlite", "", "", #PB_Database_SQLite)
  If glDBSQLite = 0
    MessageRequester("Evènement main courante", DatabaseError())
    End
  ElseIf plFile
    psSQLRequest = "CREATE TABLE IF NOT EXISTS maincourante ("
    psSQLRequest + "id_maincourante INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, "
    psSQLRequest + "maincourante_auteur TEXT Not NULL, "
    psSQLRequest + "maincourante_date TEXT Not NULL, "
    psSQLRequest + "maincourante_heure TEXT Not NULL, "
    psSQLRequest + "maincourante_categorie TEXT Not NULL, "
    psSQLRequest + "maincourante_lieu TEXT Not NULL, "
    psSQLRequest + "maincourante_requerant TEXT Not NULL, "
    psSQLRequest + "maincourante_sujet TEXT Not NULL, "
    psSQLRequest + "maincourante_commantaires TEXT Not NULL, "
    psSQLRequest + "maincourante_photo BLOB, "
    psSQLRequest + "maincourante_photo_size INTEGER"
    psSQLRequest + ")"
    ; Debug psSQLRequest
    If DatabaseUpdate(glDBSQLite, psSQLRequest) = 0
      MessageRequester("Evènement main-courante - DBMC_Init()", DatabaseError())
    EndIf
  EndIf
  
  If DatabaseQuery(glDBSQLite, "SELECT * FROM maincourante") <> 0
    While NextDatabaseRow(glDBSQLite)
      AddGadgetItem(#ExplorerMC, CountGadgetItems(#ExplorerMC), GetDatabaseString(glDBSQLite, 1) + Chr(10) + GetDatabaseString(glDBSQLite, 2) + Chr(10) + GetDatabaseString(glDBSQLite, 3) + Chr(10) + GetDatabaseString(glDBSQLite, 4) + Chr(10) + GetDatabaseString(glDBSQLite, 5) + Chr(10) + GetDatabaseString(glDBSQLite, 6) + Chr(10) + GetDatabaseString(glDBSQLite, 7) + Chr(10) + GetDatabaseString(glDBSQLite, 8))
      SetGadgetItemData(#ExplorerMC, CountGadgetItems(#ExplorerMC)-1, GetDatabaseLong(glDBSQLite, 0))
    Wend
    FinishDatabaseQuery(glDBSQLite)
  EndIf
EndProcedure

Procedure.s DoubleSpec(String.s)
  Protected Buffer.s
  Buffer = ReplaceString(String, "'", "''")
  ProcedureReturn Buffer
EndProcedure

Procedure DB_InsertMC()
  Protected psSQLRequest.s
  psSQLRequest = "INSERT INTO maincourante"
  psSQLRequest + "(id_maincourante, maincourante_auteur, maincourante_date, maincourante_heure, maincourante_categorie, maincourante_lieu, "
  psSQLRequest + "maincourante_requerant, maincourante_sujet, maincourante_commantaires, maincourante_photo, maincourante_photo_size)"
  psSQLRequest + "VALUES ("
  psSQLRequest + "'"+ DoubleSpec(GetGadgetText(#Gadget_Form4_StringNumeroMC)) +"',"
  psSQLRequest + "'"+ DoubleSpec(GetGadgetText(#Gadget_Form4_StringAuteur)) +"',"
  psSQLRequest + "'"+ DoubleSpec(GetGadgetText(#Gadget_Form4_Date)) +"',"
  psSQLRequest + "'"+ DoubleSpec(GetGadgetText(#Gadget_Form4_StringHeureDebutMC)) +"',"
  psSQLRequest + "'"+ DoubleSpec(GetGadgetText(#Gadget_Form4_ComboBoxCategorie)) +"',"
  psSQLRequest + "'"+ DoubleSpec(GetGadgetText(#Gadget_Form4_ComboBoxLieu)) +"',"
  psSQLRequest + "'"+ DoubleSpec(GetGadgetText(#Gadget_Form4_StringRequerant)) +"',"
  psSQLRequest + "'"+ DoubleSpec(GetGadgetText(#Gadget_Form4_StringSujet)) +"',"
  psSQLRequest + "'"+ DoubleSpec(GetGadgetText(#Gadget_Form4_EditorCommantaireMC)) +"',"
  psSQLRequest + "?,"
  If glImageMemory
    psSQLRequest + Str(MemorySize(glImageMemory))
  Else
    psSQLRequest + "0"
  EndIf
  psSQLRequest + ")"
  ;Debug psSQLRequest
  If glImageMemory
    SetDatabaseBlob(glDBSQLite, 0, glImageMemory, MemorySize(glImageMemory))
  Else
    ReplaceString(psSQLRequest, "?", "'0'")
  EndIf
  If DatabaseUpdate(glDBSQLite, psSQLRequest) = 0
    MessageRequester("Evènement main-courante - DB_InsertMC()", DatabaseError())
  EndIf
  
  ; Ajoute le dernier element ajouté à la base
  If DatabaseQuery(glDBSQLite, "SELECT max(id_maincourante), maincourante_auteur, maincourante_date, maincourante_heure, maincourante_categorie, maincourante_lieu, maincourante_requerant, maincourante_sujet, maincourante_commantaires FROM maincourante") <> 0
    While NextDatabaseRow(glDBSQLite)
      AddGadgetItem(#ExplorerMC, CountGadgetItems(#ExplorerMC), GetDatabaseString(glDBSQLite, 1) + Chr(10) + GetDatabaseString(glDBSQLite, 2) + Chr(10) + GetDatabaseString(glDBSQLite, 3) + Chr(10) + GetDatabaseString(glDBSQLite, 4) + Chr(10) + GetDatabaseString(glDBSQLite, 5) + Chr(10) + GetDatabaseString(glDBSQLite, 6) + Chr(10) + GetDatabaseString(glDBSQLite, 7) + Chr(10) + GetDatabaseString(glDBSQLite, 8))
      SetGadgetItemData(#ExplorerMC, CountGadgetItems(#ExplorerMC)-1, GetDatabaseLong(glDBSQLite, 0))
    Wend
    FinishDatabaseQuery(glDBSQLite)
  Else
    MessageRequester("Evènement main-courante - DB_InsertMC()", DatabaseError())
  EndIf
EndProcedure
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème sqlite

Message par falsam »

Je te conseille d'utiliser les requetés préparées pour mettre à jour ta base de données.

Mise en oeuvre avec un exemple d'insertion d'enregistrement.

Code : Tout sélectionner

ReqSql = "insert into contacts (name, note, age) values (?,?,?)"
le premier ? aura l'index 0 le second ? aura l'index 1 et le troisième ? aura l'index 2

Il faut maintenant mettre à jour ces indexs et appliquer la mise à jour.

Code : Tout sélectionner

SetDatabaseString(Database, 0, GetGadgetText(#Name)) 
SetDatabaseString(Database, 1, GetGadgetText(#Note))
SetDatabaseString(Database, 2, GetGadgetText(#Age))

DatabaseUpdate(Database, ReqSql)
:arrow: Discussion sur ce lien viewtopic.php?p=191075
---edit A-rS --- Falsou tu avais mis ton lien en mode edit au lieu de viewtopic :wink:
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%
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

Re: Problème sqlite

Message par boddhi »

MetalOS a écrit : Par contre quand je cherche à insérer des données dans ma base j'ai une erreur d'incompatibilité de type de données. Voici mes procédures.
Falsam a écrit : Je te conseille d'utiliser les requetés préparées pour mettre à jour ta base de données.
+1 : Cela évite de se prendre la tête avec les guillemets et les apostrophes lors de la rédaction des requêtes SQL. Ce qui est probablement à l'origine de ton souci.

Par ailleurs, par défaut, SQLITE convertit automatiquement un type INTEGER en TEXT ou inversement quand besoin est.
Rien n'empêche d'utiliser un DatabaseLong pour un champ déclaré en TXT et inversement un DatabaseString pour un champ déclaré en INTEGER.
Sauf quand la table s'est vue attribuer le statut 'STRICT' par ex :
CREATE TABLE NomTable (Champ1 INTEGER PRIMARY KEY, Champ2 TEXT NOT NULL) STRICT
auquel cas une erreur sera retournée en raison d'une mauvaise affectation de type de donnée.
Avatar de l’utilisateur
MetalOS
Messages : 1509
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Problème sqlite

Message par MetalOS »

Ok, merci les gars je vais regarder à ça.
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: Problème sqlite

Message par Marc56 »

1. Si tu créé un champ de type AUTOINCREMENT tu n'a pas besoin (et ne devrait pas) entrer ensuite une valeur manuellement.

2. Si tu entres les valeurs dans le même ordre que la structure (et même si tu n'entre pas les derniers), il est alors inutile de les préciser:

Code : Tout sélectionner

INSERT INTO table ( Champ, champ, champ ... ) VALUES ( ' ', ' ', ' ', ... ); 
=
INSERT INTO table VALUES ( ' ', ' ', ' ', ... );
Avatar de l’utilisateur
MetalOS
Messages : 1509
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Problème sqlite

Message par MetalOS »

Ok je ne savais pas, merci Marc.
Avatar de l’utilisateur
MetalOS
Messages : 1509
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Problème sqlite

Message par MetalOS »

Pour le coup je suis paumé je ne voie pas ce que je doit remplacer dans mes procédures.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Problème sqlite

Message par Ar-S »

Je vais pas reprendre tes tables, mais voilà un exemple de requête préparée qui va mettre à jour une table "contacts" de la bdd "Base"

Code : Tout sélectionner

Procedure Update(Base, prenom$, nom$, email$, tel$, ADRESSE$, cp$, VILLE$, ID$)

    SetDatabaseString(Base, 0, PRENOM$)
    SetDatabaseString(Base, 1, NOM$)
    SetDatabaseString(Base, 2, email$)
    SetDatabaseString(Base, 3, tel$)
    SetDatabaseString(Base, 4, ADRESSE$)
    SetDatabaseString(Base, 5, CP$)
    SetDatabaseString(Base, 6, VILLE$)
    SetDatabaseString(Base, 7, ID$)
    
    Result = DatabaseUpdate(Base, "UPDATE contacts SET prenom = ?, nom = ?, email = ?, tel = ?, adresse = ?, cp = ?, ville = ? WHERE id = ?")

    If Result = 0
        erreur$ = DatabaseError()
       debug DatabaseError() 
            Else
         debug PRENOM$ + " " + NOM$ + " modifié !"
    EndIf
    ProcedureReturn Result
EndProcedure
~~~~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
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

Re: Problème sqlite

Message par boddhi »

A intégrer à ton code pour l'exemple :

Code : Tout sélectionner

Macro MAJBDD(glDBSQLite, psSQLRequest)
If DatabaseUpdate(glDBSQLite, psSQLRequest) = 0
  MessageRequester("Evènement main-courante - DBMC_Init()", DatabaseError())
EndIf
EndMacro

DataSection
  Donnees:
  Data.s "100000;Policier1;01/01/2023;12:00:00;1035;Mme TARTEMPOIL;Trouble du voisinage;Affaire qui ne manque pas de piquant"
  Data.s "200000;Policier2;02/01/2023;15:07:53;1021;M. HENRI COCHET;Dégradation urbaine;Commentaire nul et non avenu;;123456"
EndDataSection

RequeteSQL.s="INSERT INTO maincourante VALUES (?,?,?,?,?,?,?,?,?,?,?)"
Restore Donnees
; Ajout donnée 1
Read.s Chaine.s
SetDatabaseQuad(glDBSQLite,0,Val(StringField(Chaine,1,";")))
SetDatabaseString(glDBSQLite,1,StringField(Chaine,2,";"))
SetDatabaseString(glDBSQLite,2,StringField(Chaine,3,";"))
SetDatabaseString(glDBSQLite,3,StringField(Chaine,4,";"))
SetDatabaseString(glDBSQLite,4,StringField(Chaine,5,";"))
SetDatabaseString(glDBSQLite,5,StringField(Chaine,6,";"))
SetDatabaseString(glDBSQLite,6,StringField(Chaine,7,";"))
SetDatabaseString(glDBSQLite,7,StringField(Chaine,8,";"))
SetDatabaseString(glDBSQLite,8,StringField(Chaine,9,";"))
; Pas de données définies pour les champs 9 & 10 : Ils recevront la valeur NULL
MAJBDD(glDBSQLite,RequeteSQL)

; Ajout donnée 2
Read.s Chaine.s
SetDatabaseQuad(glDBSQLite,0,Val(StringField(Chaine,1,";")))
SetDatabaseString(glDBSQLite,1,StringField(Chaine,2,";"))
SetDatabaseString(glDBSQLite,2,StringField(Chaine,3,";"))
SetDatabaseString(glDBSQLite,3,StringField(Chaine,4,";"))
SetDatabaseString(glDBSQLite,4,StringField(Chaine,5,";"))
SetDatabaseString(glDBSQLite,5,StringField(Chaine,6,";"))
SetDatabaseString(glDBSQLite,6,StringField(Chaine,7,";"))
SetDatabaseString(glDBSQLite,7,StringField(Chaine,8,";"))
SetDatabaseString(glDBSQLite,8,StringField(Chaine,9,";"))
SetDatabaseString(glDBSQLite,10,StringField(Chaine,11,";")) ; Ici une chaîne convertie automatiquement en nombre par SQLite

MAJBDD(glDBSQLite,RequeteSQL)

; Lecture Données
RequeteSQL="SELECT * FROM maincourante WHERE ID>=?"
SetDatabaseQuad(glDBSQLite,0,100000)
If DatabaseQuery(glDBSQLite,RequeteSQL)
  While NextDatabaseRow(glDBSQLite)
    NbChamps.a=DatabaseColumns(glDBSQLite)-1
    Debug "Enregistrement n° "+GetDatabaseString(glDBSQLite,0) ; Ici un nombre récuépéré au format chaîne
    For Compteur.a=1 To NbChamps
      Debug "  Donnée champ n° "+Str(Compteur)+" : "+GetDatabaseString(glDBSQLite,Compteur)
    Next
  Wend
  FinishDatabaseQuery(glDBSQLite)
EndIf
Avatar de l’utilisateur
MetalOS
Messages : 1509
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Problème sqlite

Message par MetalOS »

Super merci les gars je vais regarder çà.
Avatar de l’utilisateur
MetalOS
Messages : 1509
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Problème sqlite

Message par MetalOS »

Désolé les gars mais je suis complètement largué avec ces histoires de requêtes préparés. J'ai refait ma procédure pour insérer des données et qui fonctionne maintenant.

Code : Tout sélectionner

;Ajout d'une main courante
Procedure MC_Update()
  
  ;Récupération des données  
  ID$ = GetGadgetText(#Gadget_Form4_StringNumeroMC)
  Auteur$ = GetGadgetText(#Gadget_Form4_StringAuteur)
  Date$ = GetGadgetText(#Gadget_Form4_Date)
  Heure$ = GetGadgetText(#Gadget_Form4_StringHeureMC)
  Categories$ = GetGadgetText(#Gadget_Form4_ComboBoxCategorie)
  Lieu$ = GetGadgetText(#Gadget_Form4_ComboBoxLieu)
  Requerant$ = GetGadgetText(#Gadget_Form4_StringRequerant)
  Sujet$ = GetGadgetText(#Gadget_Form4_StringSujet)
  Description$ = GetGadgetText(#Gadget_Form4_EditorCommantaireMC)
  
  ;Création ou modification ?
    Protected ReqSql.s
    ;Préparation de la requete de création 
    ReqSql = "insert into mc (auteur, date, heure, categories, lieu, requerant, sujet, description, photo, photo_size) values ("
    ReqSql + Chr(34) + auteur$ + Chr(34)+Chr(44)
    ReqSql + Chr(34) + date$ + Chr(34)+Chr(44)
    ReqSql + Chr(34) + heure$ + Chr(34)+Chr(44)
    ReqSql + Chr(34) + categories$ + Chr(34)+Chr(44)
    ReqSql + Chr(34) + lieu$ + Chr(34)+Chr(44)
    ReqSql + Chr(34) + requerant$ + Chr(34)+Chr(44)
    ReqSql + Chr(34) + sujet$ + Chr(34)+Chr(44)
    ReqSql + Chr(34) + description$ + Chr(34)
    
    
    ;Ajout de l'enregistrement 
    If DatabaseUpdate(#DatabaseMC, ReqSql) <>0
      ;Exécution de la requete
        If DatabaseQuery(#DatabaseMC, ReqSql)
          Enregistrement$ = Str(GetDatabaseLong(#DatabaseMC, 0)) + Chr(10)
          Enregistrement$ + GetDatabaseString(#DatabaseMC, 1) + Chr(10)
          Enregistrement$ + GetDatabaseString(#DatabaseMC, 2) + Chr(10)
          Enregistrement$ + GetDatabaseString(#DatabaseMC, 3) + Chr(10)
          Enregistrement$ + GetDatabaseString(#DatabaseMC, 4) + Chr(10)
          Enregistrement$ + GetDatabaseString(#DatabaseMC, 5) + Chr(10)
          Enregistrement$ + GetDatabaseString(#DatabaseMC, 6) + Chr(10)
          Enregistrement$ + GetDatabaseString(#DatabaseMC, 7) + Chr(10)
          Enregistrement$ + GetDatabaseString(#DatabaseMC, 8) 
          
          
       If DatabaseQuery(#DatabaseMC, "SELECT * FROM mc") <> 0
        While NextDatabaseRow(#DatabaseMC)
          AddGadgetItem(#ExplorerMC, 0, GetDatabaseString(#DatabaseMC, 0) + Chr(10) + GetDatabaseString(#DatabaseMC, 1) + Chr(10) + GetDatabaseString(#DatabaseMC, 2) + Chr(10) + GetDatabaseString(#DatabaseMC, 3) + Chr(10) + GetDatabaseString(#DatabaseMC, 4) + Chr(10) + GetDatabaseString(#DatabaseMC, 5) + Chr(10) + GetDatabaseString(#DatabaseMC, 6) + Chr(10) + GetDatabaseString(#DatabaseMC, 7) + Chr(10) + GetDatabaseString(#DatabaseMC, 8))
          SetGadgetItemData(#ExplorerMC, CountGadgetItems(#ExplorerMC)-1, GetDatabaseLong(#DatabaseMC, 0))
        Wend   
          FinishDatabaseQuery(#DatabaseMC)
       EndIf   
      EndIf
      MessageRequester("Information","Votre main courante a été ajoutée à la base de données.")
    Else
      MessageRequester("Erreur", "Erreur durant l'ajout de la main courante à la base de données." + Chr(13) + DatabaseError(), #MB_ICONWARNING)
    EndIf
EndProcedure
Mais voilà j'aimerais pouvoir y insérer une image mais je ne sais pas du tout comment m'y prendre. C'est quand même pas évidant les base de données.

Et voici l'action de mon bouton pour charger une image

Code : Tout sélectionner

Define.s psFileImage
            Define.l plFileImage
             ; Ouvre une boîte de dialogue standard pour choisir une image
             psFileImage = OpenFileRequester("Choisissez une image à charger", "", "Fichiers Images|*.png;*.bmp;*.jpg;*.jpeg|Tous les fichiers (*.*)|*.*", 0)
              If psFileImage
              ; Charge une image
               plFileImage = LoadImage(#PB_Any, psFileImage)
              If plFileImage
                ; Redimensionne l'image à la taille de l'image vierge
                ResizeImage(plFileImage, 315, 290)
                ; Change l'image affichée par l' ImageGadget
                SetGadgetState(#Gadget_Form4_ImageMC, ImageID(plFileImage))
                ; Libère l'image
                FreeImage(plFileImage)
                ; Charge l'image dans la zone mémoire globale dédiée 'glImageMemory'
                plFileImage = OpenFile(#PB_Any, psFileImage)
                If plFileImage
                 glImageMemory = AllocateMemory(Lof(plFileImage))
                 If glImageMemory 
                   ReadData(plFileImage, glImageMemory, Lof(plFileImage))
                 EndIf
                 CloseFile(plFileImage)
                EndIf
                EndIf
              EndIf
Répondre