PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → delete cascade ne fonctionne pas
delete cascade ne fonctionne pas
Iniciado por martin.randrianantoanina, 10,dic. 2014 08:45 - 18 respuestas
Publicado el 10,diciembre 2014 - 08:45
Bonjour,

Quelqu'un aurait il eu le même souci que moi?
Les fonctionnalités de DELETE CASCADE et UPDATE CASCADE ne marchent pas sur mes fichiers HyperFile Client/Serveur, même si j'exécute les DELETEs dans le centre de contrôle HyperFile, les enregistrements filles ne sont pas supprimés automatiquement ensupprimant les enrgistrements parents.

Si quelqu'un aurait une idée.

Merci d'avance
Miembro registrado
1.418 mensajes
Publicado el 10,diciembre 2014 - 10:02
Les liaison sont gérée par le serveurs CS/HF. Dont il y a lieu de voir si sur le serveur ces liaison sont ou non renseignées.

--
Bertin CARRIERE
Consultant & Formateur
bertin.carriere@gmail.com
http://www.zen-project.be http://www.linkedin.com/in/bertincarriere

Belgique +32(0)2/318.02.67
France +33(0)3/66.722.542
Espagne +34.5/12.702.266

Membre de http://www.be-dev.be
Publicado el 10,diciembre 2014 - 10:25
Bonjour,
A ma connaissance , le DELETE CASCADE ou Update Cascade n'est pas un standard SQL.
En tout cas, si on regarde l'aide en ligne de PCSOFT, sur la page dédiée aux instructions SQL, ils ne parlent pas du tout de DELETE CASCADE.

Il faut donc oublier le DELETE CASCADE.
Publicado el 10,diciembre 2014 - 12:23
Joel a présenté l'énoncé suivant :
Bonjour, A ma connaissance , le DELETE CASCADE ou Update Cascade n'est pas un
standard SQL.
En tout cas, si on regarde l'aide en ligne de PCSOFT, sur la page dédiée aux
instructions SQL, ils ne parlent pas du tout de DELETE CASCADE.

Il faut donc oublier le DELETE CASCADE.


la commande delete cascade n'est pas un standard par contre le delete
en cascade oui, cela ce determine lors de la création de la table (ex
pour MySQL)

CREATE TABLE IF NOT EXISTS `schema`.`Employee` (
`idEmployee` VARCHAR(45) NOT NULL ,
`Name` VARCHAR(255) NULL ,
`idAddresses` VARCHAR(45) NULL ,
PRIMARY KEY (`idEmployee`) ,
CONSTRAINT `fkEmployee_Addresses`
FOREIGN KEY `fkEmployee_Addresses` (`idAddresses`)
REFERENCES `schema`.`Addresses` (`idAddresses`)
ON DELETE CASCADE
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_bin

voir ici :

http://sqlpro.developpez.com/cours/sqlaz/ddl/…

--
Cordialement JeAn-PhI
Miembro registrado
1.418 mensajes
Publicado el 10,diciembre 2014 - 13:00
Pourquoi Oublié le DELETE en cascade sous prétexte que dans le SQL Pur il n'existe pas

Si j’achète une voiture avec siège chauffant, donc selon ta réflexion je ne dois pas l'utilisé car en générale sur les voiture cela n'est pas en standard !

J'avoue ne pas comprendre

--
Bertin CARRIERE
Consultant & Formateur
bertin.carriere@gmail.com
http://www.zen-project.be http://www.linkedin.com/in/bertincarriere

Belgique +32(0)2/318.02.67
France +33(0)3/66.722.542
Espagne +34.5/12.702.266

Membre de http://www.be-dev.be
Publicado el 10,diciembre 2014 - 14:54
Bertin CARRIERE avait prétendu :
Pourquoi Oublié le DELETE en cascade sous prétexte que dans le SQL Pur il
n'existe pas

Si j’achète une voiture avec siège chauffant, donc selon ta réflexion je ne
dois pas l'utilisé car en générale sur les voiture cela n'est pas en standard
!

J'avoue ne pas comprendre


le delete en cascade existe et fait partie de la norme c'est la
commande "DELETE CASCADE" qui n'est pas normé

--
Cordialement JeAn-PhI
Publicado el 10,diciembre 2014 - 16:03
Je vais reformuler mon message un peu différemment :
Le DELETE en cascade est peut-être un Standard SQL, ou peut-être pas, et je m'en moque.
Ca ne change rien au résultat, puisque HFSQL ne supporte pas toutes les fonctionnalités de SQL.

D'autre part, quand je consulte l'aide (qui est extrêmement bien détaillée et extrêmement complète), j'ai beau consulter la page sur l'ANALYSE, sur les LIAISONS, sur LA CARDINALITE, SUR L'INTEGRITE REFERENTIELLE, à aucun endroit je ne vois cette notion de CASCADE.

Donc, à mon humble avis :
- option 1 : Ne pas utiliser HFSQL mais MySQL , ou d'autres systèmes de bases de données, et dans ce cas, tu pourras utiliser DELETE CASCADE. En tout cas, Jean-Phi nous dit que ça marche avec MySQL.
- option 2 : Rester sur HFSQL, et continuer les recherches, mais je serais très surpris que cela aboutisse.
Publicado el 10,diciembre 2014 - 16:22
Le 10/12/2014 15:03, Joel a écrit :
Je vais reformuler mon message un peu différemment :
Le DELETE en cascade est peut-être un Standard SQL, ou peut-être pas, et
je m'en moque.
Ca ne change rien au résultat, puisque HFSQL ne supporte pas toutes les
fonctionnalités de SQL.

D'autre part, quand je consulte l'aide (qui est extrêmement bien
détaillée et extrêmement complète), j'ai beau consulter la page sur
l'ANALYSE, sur les LIAISONS, sur LA CARDINALITE, SUR L'INTEGRITE
REFERENTIELLE, à aucun endroit je ne vois cette notion de CASCADE.

Donc, à mon humble avis :
- option 1 : Ne pas utiliser HFSQL mais MySQL , ou d'autres systèmes de
bases de données, et dans ce cas, tu pourras utiliser DELETE CASCADE. En
tout cas, Jean-Phi nous dit que ça marche avec MySQL.
- option 2 : Rester sur HFSQL, et continuer les recherches, mais je
serais très surpris que cela aboutisse.

Dans les cardinalités des liaison ... avancé tu dois trouver ton bonheur.
Pour ma part..
Facture Ligne facture Cardinalité 1 = n
En en cas de suppression de factures ... supprime automatiquement les
lignes de la facture ... c'est comme cela que je le comprend le delete
cascade .
Je connais pas la syntaxe exacte ... voir dans l'analyses mais cela marche
Bon windev
TU peux employer Oracle / MysQL ... bien que l'on dise (n'est pas
gratuit) et ou autre le prix est quand même ....
sybase etc le principe est le même
La seule chose qui a avec le SQL de Windev ce n'est pas un standard dans
le sens que des fois la syntaxe du SQL n'est pas respecté et il manque
encore des commandes
Je pratique le SQL Anywhere je tique des fois.
Mais le gros avantage c'est le prix.
Et l'on parvient à contourner cela avec les commandes de Hyperfile
etc etc
Publicado el 11,diciembre 2014 - 06:31
Bonjour à tous,

J'ai toujours utilisé HyperFile avant et ça marche top, c'est au moment de la création de l'analyse, fichier et liaison qu'on définisse si l'on doit supprimer ou pas les enregistrements filles suite à une suppression de l'enregistrement parents.
C'est la première fois que j'utilise HyperFileSQL en Client/Serveur, les liaisons sont biens visibles dans le centre de contrôle HyperFileSQL. Si ça ne se fait pas automatiquement, on pourrait toujours coder pour les supprimer, mais j'ai besoin d'affirmation pour me dire que cela ne fonctionne pas sur l'environnement client/serveur de HyperFile.
Publicado el 11,diciembre 2014 - 06:40
Les liaisons sont bien présentes dans le centre de contrôle CS/HF.
Publicado el 11,diciembre 2014 - 07:06
Feiereisen Marcel a écrit :
Le 10/12/2014 15:03, Joel a écrit :
Je vais reformuler mon message un peu différemment :
Le DELETE en cascade est peut-être un Standard SQL, ou peut-être pas, et
je m'en moque.
Ca ne change rien au résultat, puisque HFSQL ne supporte pas toutes les
fonctionnalités de SQL.

D'autre part, quand je consulte l'aide (qui est extrêmement bien
détaillée et extrêmement complète), j'ai beau consulter la page sur
l'ANALYSE, sur les LIAISONS, sur LA CARDINALITE, SUR L'INTEGRITE
REFERENTIELLE, à aucun endroit je ne vois cette notion de CASCADE.

Donc, à mon humble avis :
- option 1 : Ne pas utiliser HFSQL mais MySQL , ou d'autres systèmes de
bases de données, et dans ce cas, tu pourras utiliser DELETE CASCADE. En
tout cas, Jean-Phi nous dit que ça marche avec MySQL.
- option 2 : Rester sur HFSQL, et continuer les recherches, mais je
serais très surpris que cela aboutisse.
Dans les cardinalités des liaison ... avancé tu dois trouver ton bonheur.

Pour ma part..
Facture Ligne facture Cardinalité 1 = n
En en cas de suppression de factures ... supprime automatiquement les
lignes de la facture ... c'est comme cela que je le comprend le delete
cascade .
Je connais pas la syntaxe exacte ... voir dans l'analyses mais cela marche
Bon windev
TU peux employer Oracle / MysQL ... bien que l'on dise (n'est pas
gratuit) et ou autre le prix est quand même ....
sybase etc le principe est le même
La seule chose qui a avec le SQL de Windev ce n'est pas un standard dans
le sens que des fois la syntaxe du SQL n'est pas respecté et il manque
encore des commandes
Je pratique le SQL Anywhere je tique des fois.
Mais le gros avantage c'est le prix.
Et l'on parvient à contourner cela avec les commandes de Hyperfile
etc etc


Les liaisons et règles correspondantes sont bien définies dans l'analyse, je ne comprend pas pourquoi ça ne répond pas correctement.
Miembro registrado
24 mensajes
Publicado el 11,diciembre 2014 - 08:26
Bonjour

Juste pour info, ce que nous avons trouvé à ce sujet...
HExecuteRequete avec l'option hVérifieIntégrité devrait vous donner satisfaction.
http://doc.pcsoft.fr/fr-FR/?3044080&name=HExecuteRequete

Lors de notre essais, la suppression dans un fichier a bien supprimé dans les fichiers liés (sans que nous l'ayons spécifié).

--
++ R&B
Publicado el 11,diciembre 2014 - 09:09
R&B a écrit :
Bonjour

Juste pour info, ce que nous avons trouvé à ce sujet...
HExecuteRequete avec l'option hVérifieIntégrité devrait vous donner satisfaction.
http://doc.pcsoft.fr/fr-FR/?3044080&name=HExecuteRequete

Lors de notre essais, la suppression dans un fichier a bien supprimé dans les fichiers liés (sans que nous l'ayons spécifié).

--
++ R&B

Bonjour,

Merci pour votre intérêt.
J'ai essayé HexecuteRequête et HexecuteRequêteSQL avec hVérifieIntégrité , mais toujours le même résultat, l'entête de la facture est bien supprimé mais les lignes de la facture reste dans la BDD. Je crois que c'est l'environnement HF/CS qui a un souci.
Publicado el 11,diciembre 2014 - 13:17
Le 11/12/2014 05:31, Martin Randrianantoanina a écrit :
Bonjour à tous,

J'ai toujours utilisé HyperFile avant et ça marche top, c'est au moment
de la création de l'analyse, fichier et liaison qu'on définisse si l'on
doit supprimer ou pas les enregistrements filles suite à une suppression
de l'enregistrement parents.
C'est la première fois que j'utilise HyperFileSQL en Client/Serveur, les
liaisons sont biens visibles dans le centre de contrôle HyperFileSQL. Si
ça ne se fait pas automatiquement, on pourrait toujours coder pour les
supprimer, mais j'ai besoin d'affirmation pour me dire que cela ne
fonctionne pas sur l'environnement client/serveur de HyperFile.

Chez moi cela fonctionne correctement depuis X années
Ma cardinalité avancé est si suppression facture Code ... il supprime
bien les ligne avec le même code de la facture
aussi bien C/S que classique
Miembro registrado
1.418 mensajes
Publicado el 11,diciembre 2014 - 16:09
Martin as tu vérifié sur ton serveur HF onglet relations que celle ci sont bien présente et que leur cardinalité sont correctes

--
Bertin CARRIERE
Consultant & Formateur
bertin.carriere@gmail.com
http://www.zen-project.be http://www.linkedin.com/in/bertincarriere

Belgique +32(0)2/318.02.67
France +33(0)3/66.722.542
Espagne +34.5/12.702.266

Membre de http://www.be-dev.be
Publicado el 12,diciembre 2014 - 06:24
Bertin CARRIERE a écrit :
Martin as tu vérifié sur ton serveur HF onglet relations que celle ci sont bien présente et que leur cardinalité sont correctes

--
Bertin CARRIERE
Consultant & Formateur
bertin.carriere@gmail.com
http://www.zen-project.be http://www.linkedin.com/in/bertincarriere

Belgique +32(0)2/318.02.67
France +33(0)3/66.722.542
Espagne +34.5/12.702.266

Membre de http://www.be-dev.be


Onglet LIAISON, vous voulez dire, oui.
Publicado el 12,diciembre 2014 - 07:11
Peut être que ça a un rapport mais je code en SQL dans mon projet, et même les recherches dans les fichiers me retournent de résultats bizarres. Dans CC HF, il y a un onglet SQL pour lancer des DDL sur les fichiers, si je fais le delete à partir de là, ça ne fonctionne pas comme je le voudrait mais quand je supprime un enregistrement à partir d'un bouton SUPPRIMER dans le visionneur de contenu de fichier par défaut du même CC HF, le delete cascade fonctionne.

Ma conclusion en ce moment (jusqu'à ce que quelqu'un trouve une solution) est que quand on utilise une base HyperFile, il faut impérativement coder en W-Langage sinon il faut utiliser une base SQL standard.
Publicado el 12,diciembre 2014 - 09:31
Le 12/12/2014 06:11, Martin Randrianantoanina a écrit :
Peut être que ça a un rapport mais je code en SQL dans mon projet, et
même les recherches dans les fichiers me retournent de résultats
bizarres. Dans CC HF, il y a un onglet SQL pour lancer des DDL sur les
fichiers, si je fais le delete à partir de là, ça ne fonctionne pas
comme je le voudrait mais quand je supprime un enregistrement à partir
d'un bouton SUPPRIMER dans le visionneur de contenu de fichier par
défaut du même CC HF, le delete cascade fonctionne.

Ma conclusion en ce moment (jusqu'à ce que quelqu'un trouve une
solution) est que quand on utilise une base HyperFile, il faut
impérativement coder en W-Langage sinon il faut utiliser une base SQL
standard.


aussi bien en wlangage
hsupprime(facture) ... en me mettant sur la facture

mon code sql

REQ est une Source de Données
sMaReq est une chaîne = [
delete FROM FACTURES
WHERE
FACTURES.C_PAT= '%1'
]
ParametreAncienCode est une chaîne = FACTURE_A_SUPPRIMER // %1

sMaReq = ChaîneConstruit(sMaReq,ParametreAncienCode )
SI PAS HExécuteRequêteSQL(REQ, hRequêteDéfaut, sMaReq) ALORS
Erreur(HErreurInfo())
FIN
HAnnuleDéclaration(REQ)

et les lignes des factures ... car ici je supprime toutes les factures
du clients
Je viens de vérifier ... cela marche tip top
donc ce sont tes cardinalités qui sont mauvaises ... pour moi
Publicado el 12,diciembre 2014 - 11:30
Feiereisen Marcel a écrit :
Le 12/12/2014 06:11, Martin Randrianantoanina a écrit :
Peut être que ça a un rapport mais je code en SQL dans mon projet, et
même les recherches dans les fichiers me retournent de résultats
bizarres. Dans CC HF, il y a un onglet SQL pour lancer des DDL sur les
fichiers, si je fais le delete à partir de là, ça ne fonctionne pas
comme je le voudrait mais quand je supprime un enregistrement à partir
d'un bouton SUPPRIMER dans le visionneur de contenu de fichier par
défaut du même CC HF, le delete cascade fonctionne.

Ma conclusion en ce moment (jusqu'à ce que quelqu'un trouve une
solution) est que quand on utilise une base HyperFile, il faut
impérativement coder en W-Langage sinon il faut utiliser une base SQL
standard.

aussi bien en wlangage
hsupprime(facture) ... en me mettant sur la facture

mon code sql

REQ est une Source de Données
sMaReq est une chaîne = [
delete FROM FACTURES
WHERE
FACTURES.C_PAT= '%1'
]
ParametreAncienCode est une chaîne = FACTURE_A_SUPPRIMER // %1

sMaReq = ChaîneConstruit(sMaReq,ParametreAncienCode )
SI PAS HExécuteRequêteSQL(REQ, hRequêteDéfaut, sMaReq) ALORS
Erreur(HErreurInfo())
FIN
HAnnuleDéclaration(REQ)

et les lignes des factures ... car ici je supprime toutes les factures
du clients
Je viens de vérifier ... cela marche tip top
donc ce sont tes cardinalités qui sont mauvaises ... pour moi


Merci à toi mais je viens de passer en code Wlangage et sans toucher quoi que ce soit, cela fonctionne.