PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Clé étrangère ne fonctionnant pas en HFSQL
Clé étrangère ne fonctionnant pas en HFSQL
Débuté par Laurent GREMET, 23 juin 2018 13:37 - 14 réponses
Membre enregistré
18 messages
Popularité : +1 (1 vote)
Posté le 23 juin 2018 - 13:37
Bonjour à tous,

Dans HFSQL il est possible de violer la contrainte d'intégrité d'une clé étrangère.
Je m'explique :
Soit un fichier nommé "HF_Personnes" dont l'identifiant unique est la colonne "IdPersonne"
Et un autre fichier nommé "HF_Voitures" dont l'identifiant unique est la colonne "IdVoiture"

Une voiture appartient à une personne et une seule (une personne peut avoir plusieurs voitures).
Cette règle de gestion se traduit dans le MPD par une nouvelle colonne "IdPersonne" dans le fichier "HF_Voitures"
et une liaison entre les deux tables

HF_Voitures.IdPersonne (1,1) <----------->(0,n) HF_Personnes.IdPersonne

Donc toute voiture doit obligatoirement etre rattachée à une personne.

Le problème est qu'en passant par l'editeur de fichiers il est possible de violer cette règle.
Le moteur HFSQL n'empeche pas d'enregistrer une voiture n'appartenant à personne
exemple HF_Voitures.IdPersonne = 55 alors qu'aucune personne n'a 55 comme IdPersonne

Je conaissais ce problème en version 17 et pour cette raison je délaissais hfsql au profit de PostgreSQL (qui, normalement, bloque toute violation de règle d'intégrité)

Aujourd'hui de retour sur windev 23 la problématique est la meme. Je crains de n'encore pas pouvoir utiliser hfsql par souci de securité, me privant de son ergonomie...

J'espère avoir été clair, peut etre y a-t-il un réglage à faire ? quelqu'un a-t-il des remarques à ce sujet ?

Merci et bonne journée,

Laurent

--
----------------
Cordialement
LG
Posté le 23 juin 2018 - 18:52
Pour l'instant votre table HF_Voitures ne contient que deux champs
Si vous en ajoutez un (par exemple un champ VarChar pour le numéro minéralogique)
Vous ajoutez une ligne dans HF_Voitures sans spécifier d'identifiant personne.
A ce niveau, si j'ai bien suivi, la contrainte d'intégrité ne s'applique pas

Si maintenant vous rappelez l'enregistrement qui vient d'être créé et que vous modifiez le numéro minéralogique, que se passe-t-il ?
Est-ce qu'en modification la contrainte s'applique ?

Sur un plan plus général j'utilise WinDev mais j'utilise toujours des bases de données tierce : ACCESS ou SQL Serveur
HFSQL est sûrement très bien mais il n'est exploitable que via WinDev
Membre enregistré
1 304 messages
Popularité : +47 (51 votes)
Posté le 24 juin 2018 - 13:44
Salut Laurent,

Tu as déjà essayé d'utiliser HGèreIntégrité() et HErreurIntégrité() ?

- HGèreIntégrité : https://doc.pcsoft.fr/fr-FR/?3044058
- HErreurIntégrité : https://doc.pcsoft.fr/fr-FR/?3044086

A+
Daryl

--
http://www.concept4u2.com
Membre enregistré
3 846 messages
Popularité : +227 (347 votes)
Posté le 25 juin 2018 - 09:27
Bonjour,
Daryl a écrit :
Salut Laurent,

Tu as déjà essayé d'utiliser HGèreIntégrité() et HErreurIntégrité() ?


Je pense que Laurent parle de la modification de fichier via WDMAP.
Que donne la table modifiée dans tes test, par exemple lors de la sélection de l'enregistrement incriminé ?

--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
18 messages
Popularité : +1 (1 vote)
Posté le 26 juin 2018 - 19:00
Michel a écrit :
Pour l'instant votre table HF_Voitures ne contient que deux champs
Si vous en ajoutez un (par exemple un champ VarChar pour le numéro minéralogique)
Vous ajoutez une ligne dans HF_Voitures sans spécifier d'identifiant personne.
A ce niveau, si j'ai bien suivi, la contrainte d'intégrité ne s'applique pas

Si maintenant vous rappelez l'enregistrement qui vient d'être créé et que vous modifiez le numéro minéralogique, que se passe-t-il ?
Est-ce qu'en modification la contrainte s'applique ?

Sur un plan plus général j'utilise WinDev mais j'utilise toujours des bases de données tierce : ACCESS ou SQL Serveur
HFSQL est sûrement très bien mais il n'est exploitable que via WinDev



Salut Michel, merci mais pas besoin d'ajouter un autre champ, c'est juste que l'intégrité n'est pas gérée.

Sur un plan plus général j'utilise WinDev mais j'utilise toujours des bases de données tierce : ACCESS ou SQL Serveur
HFSQL est sûrement très bien mais il n'est exploitable que via WinDev


Ben non justement il y a des pilotes permettant d'attaquer hfsql depuis une application tierce
Comme toi j'utilise d'autres bases que hfsql pour mes applis windev, mais pas pour la meme raison : dans mon cas je ne peux pas utiliser un moteur de bdd qui ne respecte pas nativement les règles d'intégrité.

--
----------------
Cordialement
LG
Membre enregistré
18 messages
Popularité : +1 (1 vote)
Posté le 26 juin 2018 - 19:13
Voroltinquo a écrit :
Bonjour,
Daryl a écrit :
Salut Laurent,

Tu as déjà essayé d'utiliser HGèreIntégrité() et HErreurIntégrité() ?


Je pense que Laurent parle de la modification de fichier via WDMAP.
Que donne la table modifiée dans tes test, par exemple lors de la sélection de l'enregistrement incriminé ?

--
Il y a peut être plus simple, mais, ça tourne


Salu Daryl et Voroltinquo.

Désolé j'avais oublié de m'abonner à ce fil d'où ma réponse tardive.
Oui Voroltinquo c'est bien avec WdMap que j'arrive à violer la clé étrangère.
Et si je fais cela d'une autre manière (avec hAjoute) alors là effectivement cela bloque et me previent qu'il y a un problème.

Cela me semble très bizarre que ma bdd accepte d'enregistrer des données incohérentes.
Effectivement en restant dans le contexte projet pc soft / analyse / HFSQL les règles du mpd sont respectées
Mais en ce qui me concerne les données sont souvent partagées avec des applis non PC Soft et donc il est plus sur pour moi d'utiliser un autre sgbd (SQL srv, Postgresql, etc ....)

c'est bien dommage.

--
----------------
Cordialement
LG
Posté le 26 juin 2018 - 20:15
Comme toi j'utilise d'autres bases que hfsql pour mes applis windev, mais pas pour la meme raison : dans mon cas je ne peux pas utiliser un moteur de bdd qui ne respecte pas nativement les règles d'intégrité

Si! Cela fait partie de mes raisons.
Par contre je ne connaissais pas les pilotes permettant d'attaquer hfsql depuis une application tierce. Ce post me donne envie de continuer de travailler avec mon système actuel
Membre enregistré
18 messages
Popularité : +1 (1 vote)
Posté le 27 juin 2018 - 09:32
Michel a écrit :
(...)
> Par contre je ne connaissais pas les pilotes permettant d'attaquer hfsql depuis une application tierce.

Depuis une appli tierce c'est avec un driver odbc si je me souviens bien.
Mais on n'attaque pas directement la base hfsql, le pilote passe par une analyse c'est un peu une usine à gaz

Ce post me donne envie de continuer de travailler avec mon système actuel

Moi aussi :-)

--
----------------
Cordialement
LG
Membre enregistré
3 846 messages
Popularité : +227 (347 votes)
Posté le 27 juin 2018 - 11:14
HF ne serait pas le seul touché, j'ai testé cette ligne sous MySQL et MariaDB avec une table conducteur vide
INSERT INTO `voiture` (`PK_Voiture`, `AK_NoChassis`, `FK_Conducteur`) VALUES (NULL, '125bd40', '67');

C'est passé sans problème

--
Il y a peut être plus simple, mais, ça tourne
Posté le 27 juin 2018 - 11:43
Bonjour

il me semble que WDMAP n'est pas un utilitaire redistribuable : à vérifier
pour verrouiller votre cas : mettre un mot de passe sur la BDD
ne pas utiliser WDMAP par vous meme et donc ne pas le livrer : utiliser uniquement le centre de controle
vérifier avec le centre de controle que vous ne pouvez pas genérer le cas de violation d'integrite
si un client accede de lui meme aux données avec "son" wdmap et "son" crackage de mot de passe : c'est de "sa" responsabilité

Bon devs
Membre enregistré
3 846 messages
Popularité : +227 (347 votes)
Posté le 27 juin 2018 - 12:05
digi12 a écrit :
Bonjour

il me semble que WDMAP n'est pas un utilitaire redistribuable : à vérifier

En effet WDMAP n'est pas redistribuable

--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
18 messages
Popularité : +1 (1 vote)
Posté le 27 juin 2018 - 13:04
Voroltinquo a écrit :
HF ne serait pas le seul touché, j'ai testé cette ligne sous MySQL et MariaDB avec une table conducteur vide
INSERT INTO `voiture` (`PK_Voiture`, `AK_NoChassis`, `FK_Conducteur`) VALUES (NULL, '125bd40', '67');

C'est passé sans problème

--
Il y a peut être plus simple, mais, ça tourne


Hello,

oui dans MySql il y a un parametre à la création de la base qui fait que les contraintes sont violables ou pas.
Mais si ce parametre est correctement initialisé alors impossible de faire cette ecriture.

--
----------------
Cordialement
LG
Membre enregistré
18 messages
Popularité : +1 (1 vote)
Posté le 27 juin 2018 - 13:08
Bonjour Digi et merci.

Oui bien sur on peut toujours verrouiller.
Mais avec la plupart des autres sgbd l’écriture d'informations non conformes au mcd/mpd est tout simplement impossible en natif, ce qui est quand même plus fiable (et par ailleurs est le standard dans les sgbd).

--
----------------
Cordialement
LG
Posté le 27 juin 2018 - 15:32
re

dans l'Aide de WDMAP :
"Attention : Si les manipulations concernent des rubriques présentes dans des fichiers liés (sous l'éditeur d'analyses), il est conseillé d'activer la gestion de l'intégrité et la gestion des doublons.
Par défaut, la gestion de l'intégrité et la gestion des doublons sont activées.
La gestion de l'intégrité est activée uniquement si l'analyse d'origine du fichier est connue : la gestion de l'intégrité n'est pas activée si le fichier est ouvert directement sous l'explorateur avec WDMap."

il faut peut etre ouvrir l'analyse avant d'ouvrir le fichier pour l'intégrité soit vérifiée
et dans l'aide WDMAP il est bien confirmé que l'utilitaire n'est pas redistribuable

bon devs
Membre enregistré
18 messages
Popularité : +1 (1 vote)
Posté le 27 juin 2018 - 16:49
digi12 a écrit :
re

dans l'Aide de WDMAP :
"Attention : Si les manipulations concernent des rubriques présentes dans des fichiers liés (sous l'éditeur d'analyses), il est conseillé d'activer la gestion de l'intégrité et la gestion des doublons.
Par défaut, la gestion de l'intégrité et la gestion des doublons sont activées.
La gestion de l'intégrité est activée uniquement si l'analyse d'origine du fichier est connue : la gestion de l'intégrité n'est pas activée si le fichier est ouvert directement sous l'explorateur avec WDMap."

il faut peut etre ouvrir l'analyse avant d'ouvrir le fichier pour l'intégrité soit vérifiée
et dans l'aide WDMAP il est bien confirmé que l'utilitaire n'est pas redistribuable

bon devs


Voila une réponse précise et interessante, merci beaucoup.

--
----------------
Cordialement
LG