IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Suppression en cascade ne fonctionne pas sur base sqlite [WD17]


Sujet :

WinDev

  1. #1
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut Suppression en cascade ne fonctionne pas sur base sqlite
    Bonjour,

    Bonjour,
    utilisant une base sqlite, il ne m'est pas possible de supprimer en
    cascade des enregistrements, ni avec l'instruction Hsupprime, ni via
    une requête utilisée dans
    HExécuteRequêteSQL("marequeteSansCorrection",Acces_Natif_SQLite,hRequêteSansCorrection,vlVv_requete).
    Avez-vous connaissance de restriction, via l'accès natif sqlite, de
    cette fonctionnalité basique?

    Ca me paraît assez gros quand même !!!

    Protocole de reproduction :
    Dans le projet téléchargeable ici
    http://dl.free.fr/qEDmuuaCV
    Ajouter une langue
    Ajouter un libellé
    Supprimer la langue
    regarder dans sqlitestudio ( http://sqlitestudio.one.pl/) le contenu
    des tables : il reste les libellés des enregistrements langues
    supprimés

    P.S.
    Choix de sqlite pour portabilité multi-environnements ...


    D'avance, merci pour vos retours d'expérience ...
    Cordialement,
    Christophe Charron

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 161
    Points : 221
    Points
    221
    Par défaut
    Forcer la vérification d'integrité pour lancer la cascade lors du HExécuteRequêteSQL ?

    (http://www.developpez.net/forums/d12...te-on-cascade/)


  3. #3
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Bonjour

    Vérifie si la gestion des foreign keys est bien activée

    En principe elle est désactivée par défaut pour raison de compatibilité descendante

    à activer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PRAGMA foreign_keys = ON

  4. #4
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Citation Envoyé par lazariel Voir le message
    Forcer la vérification d'integrité pour lancer la cascade lors du HExécuteRequêteSQL ?

    (http://www.developpez.net/forums/d12...te-on-cascade/)

    si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SI HExécuteRequêteSQL("marequeteSansCorrection",Acces_Natif_SQLite,hRequêteSansCorrection+hVérifieIntégrité,vlVv_requete) ALORS
    			vlsVl_c_renvoyer=Vrai+TAB+""+TAB
    		SINON
    			vlsVl_c_renvoyer=Faux+TAB+HErreurInfo(hErrComplet)+TAB
    		FIN
    je récupère le message d'erreur suivant, qui en passant, n'a, a priori, rien à voir avec la requête que je viens de tenter d'exécuter ...
    Que s'est-il passé ?
    <Param_langue_cleunik_explication> n'est ni une rubrique ni un paramètre de la requête <REQ_formule_sauf_une>. De nouveaux paramètres ne doivent pas être déclarés après la préparation d'une requête. Vérifier également qu'il n'y a pas d'erreur de syntaxe dans le nom de la rubrique ou du paramètre.

    Code erreur : 70202
    Niveau : erreur fatale (EL_FATAL)
    Code erreur WD55 : 202

    Dump de l'erreur du module 'WD170HF.DLL' (17.0.185.0).
    Identifiant des informations détaillées (.err) : 71703
    Informations de débogage :
    IEWDHF=32.8
    Module=<WDHF>
    Version=<17.0.185.0>
    Informations supplémentaires :
    EIT_LOGICALTABLENAME : <REQ_formule_sauf_une>
    Je rappelle qu'initialement, je pensais n'avoir à faire que "hsupprime" et que je m'étais rabattu sur le HExécuteRequêteSQL par dépit
    Cordialement,
    Christophe Charron

  5. #5
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Citation Envoyé par hpascal Voir le message
    Bonjour

    Vérifie si la gestion des foreign keys est bien activée

    En principe elle est désactivée par défaut pour raison de compatibilité descendante

    à activer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PRAGMA foreign_keys = ON
    Je pense que la gestion des clés étrangères est active

    http://www.casimages.com/img.php?i=1...3552192025.png

    mais en fait, je n'en suis pas sûr car peut-être est-ce l'outil (sqlitestudio,sqliteexpert,...) qui l'active automatiquement ?
    Je m'aperçois à cette occasion qu'il n'est pas prévu, dans la propriété de la connexion, dans l'éditeur d'analyse, d'accéder aux propriétés étendues d'une connexion sqlite ...
    Cordialement,
    Christophe Charron

  6. #6
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Citation Envoyé par Christophe Charron Voir le message
    mais en fait, je n'en suis pas sûr car peut-être est-ce l'outil (sqlitestudio,sqliteexpert,...) qui l'active automatiquement ?
    Oui, mais ce n'est pas une option persistante donc tu dois le faire aussi dans ton appli

    Un petit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sdPragma est une source de données
    HExécuteRequêteSQL(sdPragma,Acces_Natif_SQLite,hRequêteSansCorrection,"PRAGMA foreign_keys=ON")
    sera nécessaire

    Si ça ne marche toujours essaye avec SQLExec pour voir si le message d'erreur est plus clair

  7. #7
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Citation Envoyé par hpascal Voir le message
    Oui, mais ce n'est pas une option persistante donc tu dois le faire aussi dans ton appli

    Un petit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sdPragma est une source de données
    HExécuteRequêteSQL(sdPragma,Acces_Natif_SQLite,hRequêteSansCorrection,"PRAGMA foreign_keys=ON")
    sera nécessaire

    Si ça ne marche toujours essaye avec SQLExec pour voir si le message d'erreur est plus clair
    Oui, c'est exact. Je viens de le vérifier.
    Le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HExécuteRequêteSQL(sdPragma,Acces_Natif_SQLite,hRequêteSansCorrection,"PRAGMA foreign_keys=ON")
    est nécessaire en préalable à toute requête de suppression. Ce n'est pas trop compliqué de contourner le bug de Windev pour les hsupprime en appelant une procédure à la place.

    Ca devient beaucoup plus lourd et contraignant pour les modifications ...

    Merci pour l'aide apportée.
    Cordialement,
    Christophe Charron

  8. #8
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Citation Envoyé par Christophe Charron Voir le message
    ... est nécessaire en préalable à toute requête de suppression
    Oui, à faire une fois au démarrage de l'appli.

    Perso, je fais tout en SQL depuis longtemps, à part quelques rares exceptions

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 39
    Points : 45
    Points
    45
    Par défaut
    Salut
    Vous avez mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sdPragma est une source de données
    HExécuteRequêteSQL(sdPragma,Acces_Natif_SQLite,hRequêteSansCorrection,"PRAGMA foreign_keys=ON")
    Hors si j'en crois l'aide il faut mettre le nom de la connexion et pas celui de la source de données HExécuteRequêteSQL(NomDeLaConnexion,""" etc.
    surtout avec hRequeteSansCorrection..

  10. #10
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Citation Envoyé par Ekinx93 Voir le message
    Hors si j'en crois l'aide il faut mettre le nom de la connexion et pas celui de la source de données HExécuteRequêteSQL(NomDeLaConnexion,""" etc.
    surtout avec hRequeteSansCorrection..
    Et bien relisez l'aide ...

    Les syntaxes de HExécuteRequêteSQL sont :
    <Résultat> = HExécuteRequêteSQL(<Nom de la requête> [, <Mode>] , <Texte de la requête en SQL>)

    <Résultat> = HExécuteRequêteSQL(<Nom de la requête> [, <Connexion> [, <Mode>]] , <Texte de la requête en SQL>)

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 39
    Points : 45
    Points
    45
    Par défaut
    Il serait inutile de se disputer...
    Ceci dit vous avez vous même écrit que le nom de la connexion etait necessaire.

    <Résultat> = HExécuteRequêteSQL(<Nom de la requête> [, <Connexion> [, <Mode>]] , <Texte de la requête en SQL>)

    quant a moi bien que n’étant pas un specialiste de SqLite je dis que toute requête ayant comme paramètre "RequeteSansCorrection" doit impérativement avoir un nom de connexion renseigné.


    Aide de windev 15

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    hRequêteSansCorrection   Le moteur HyperFileSQL n'effectue aucune vérification de la requête. Cette option doit être utilisée si la requête comporte des ordres spécifiques à un type de connexion (Oracle, SQL Server, ...).
    Attention : si cette constante est utilisée :
     
    il est nécessaire de préciser le nom de la connexion (paramètre <Connexion>).
    la fonction suivante ne peut pas être utilisée sur la requête manipulée : HFiltre.
    a suivre..

  12. #12
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Citation Envoyé par Ekinx93 Voir le message
    Il serait inutile de se disputer...
    Loin de moi cette idée

    Je ne comprends tout simplement pas votre intervention, il me semble que dans les messages précédents une connexion est utilisée à chaque fois.
    Et la syntaxe que vous écrivez dans votre premier message n'existe pas.

    Et personne n'a affirmé que hRequêteSansCorrection s'utilise seul.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SQL select like ne fonctionne pas sur une base csv
    Par MisterJeanP dans le forum MkFramework
    Réponses: 2
    Dernier message: 07/08/2014, 22h19
  2. cette base de donnée ne fonctionne pas sur PC
    Par lesud13 dans le forum 4D
    Réponses: 1
    Dernier message: 28/09/2009, 15h55
  3. Réponses: 7
    Dernier message: 10/02/2006, 18h00
  4. TXMLDocument, ne fonctionne pas sur tous les PC
    Par Neilos dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/10/2005, 22h33
  5. Code qui ne fonctionne pas sur Mac
    Par malbaladejo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/01/2005, 11h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo