Pb requête SQLite DELETE

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
begbegin
Messages : 7
Inscription : jeu. 04/oct./2018 8:12

Pb requête SQLite DELETE

Message par begbegin »

Bonjour,

je voudrais par une requête sqlite delete effacer une ligne client dans une BD fiche_client en récupérant le client_id (primary key). Le debug m'indique que la fiche est effacée, mais quand je refais une consultation de fiche, celle-ci est toujours là.... :roll:
Je mets mes 2 procédures : l'une de consultation de fiche (qui fonctionne bien mais qui pourrait peut être améliorée) et celle de delete qui bugue.
Si quelqu'un a une petite idée, je dois avouer ne pas bien comprendre ce qui cloche.
Merci

Voilà le code :

Code : Tout sélectionner

; ############# procédure consultation ##############

Procedure searchFicheClient()
    
  Debug "Début recherche fiche client"
    
  If OpenDatabase(#DB_ID, databaseFilename, "", "")
    Debug "Opération ouverture DB réussie"
    
    SetDatabaseString(#DB_ID, 0, GetGadgetText(#NOM_INPUT2)) ; utilisation de variables de liaison !!!
            
    If (DatabaseQuery(#DB_ID, "SELECT * FROM fiche_client WHERE nom = ?")) ; requête recherche fiche clients
      
      Debug "requête opérée"
      If (NextDatabaseRow(#DB_ID) = 0); teste si au moins un nom
        Debug "Pas de fiche(s) au nom : " + GetGadgetText(#NOM_INPUT2)
      Else
        Debug GetDatabaseString(#DB_ID,0) + " " + GetDatabaseString(#DB_ID,1) + " " + GetDatabaseString(#DB_ID,2)
      EndIf
      While NextDatabaseRow(#DB_ID); boucle si plusieurs noms identiques
        Debug GetDatabaseString(#DB_ID,0) + " " + GetDatabaseString(#DB_ID,1) + " " + GetDatabaseString(#DB_ID,2)
      Wend
       
    EndIf
           
    CloseDatabase(#DB_ID)
        
  Else
    MessageRequester("Erreur", "Impossible d'exécuter la requête: "+DatabaseError())
  EndIf
  
EndProcedure

; ########## procédure d'effaçage fiche client ##########

Procedure deleteFicheClient()
      
  If OpenDatabase(#DB_ID, databaseFilename, "", "")
    Debug "Opération ouverture DB réussie"
    
    SetDatabaseLong(#DB_ID, 0, Val(GetGadgetText(#ID_CLIENT_INPUT2))); utilisation de variables de liaison !!!
                
    If (DatabaseQuery(#DB_ID, "DELETE FROM fiche_client WHERE client_id = ?")) ; requête effaçage fiche clients
      Debug "Fiche du client " + GetGadgetText(#NOM_INPUT2) + " effacée"
    Else
      MessageRequester("Erreur", "Impossible d'exécuter la requête: "+DatabaseError())
    EndIf
    
    CloseDatabase(#DB_ID)
    
  EndIf
  
        
EndProcedure
Marc56
Messages : 2148
Inscription : sam. 08/févr./2014 15:19

Re: Pb requête SQLite DELETE

Message par Marc56 »

:!: La valeur de retour de DatabaseQuery() indique uniquement que la requête s'est effectuée sans erreur, mais pas le résultat de l'action sur la base de données. C'est à dire pas le nombre de lignes affectées.

Tu as la fonction à utiliser pour avoir le résultat effectif dans les remarques de l'aide.

:idea: Toujours tester les requêtes en ligne de commande avant de passer par PB

:wink:
begbegin
Messages : 7
Inscription : jeu. 04/oct./2018 8:12

Re: Pb requête SQLite DELETE

Message par begbegin »

J'étais entrain de lire le manuel (le gros) PB et son passage sur les bases de données quand... euréka... :)
mais merci pour la réponse....
Répondre