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

Bases de données Delphi Discussion :

[FB3] [FireDac] Erreur 400 à la suppression d'un enregistrement


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Responsable associatif
    Inscrit en
    Octobre 2005
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Responsable associatif

    Informations forums :
    Inscription : Octobre 2005
    Messages : 229
    Par défaut [FB3] [FireDac] Erreur 400 à la suppression d'un enregistrement
    Bonjour à tous,

    Je cherche à migrer une vieille appli (D5 et BDE) vers firebird avec Delphi 10.3.3.
    Je suis débutant FB... j'ai réussi à créer la BD Firebird et récupéré les données

    Je me connecte bien avec un TFDConnection
    Soit deux tables CLIENTS et COMMANDES en relation par le champ NOCLI avec deux TFDTable,
    Deux grilles, et deux navigateurs
    En haut les clients, en bas les commandes du client sélectionné.
    Quand je clique sur le bouton '-' du navigateur commandes pour supprimer un enregistrement j'ai l'erreur 400.
    Je précise que la table commandes a bien un index primaire (sur le champ NUMCOM)

    J'imagine que je passe à côté d'un truc ultra simple ?

    Nom : Capture (Copy).JPG
Affichages : 184
Taille : 56,9 Ko

    Merci de votre aide !

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 706
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 706
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    plusieurs choses :

    Côté Firebird
    Y a t-il une contrainte de référence entre CLIENTS et COMMANDES ? (s'il n'y en a pas il devrait y en avoir une)
    ALTER TABLE COMMANDES ADD CONSTRAINT FK_CLIENT FOREIGN KEY (NUMCLI) REFRENCES CLIENTS(NUMCLI)
    ensuite il y a des choix à faire sur les
    [ON DELETE {NO ACTION | CASCADE | SET NULL | SET DEFAULT}]
    [ON UPDATE {NO ACTION | CASCADE | SET NULL | SET DEFAULT}]
    Côté Delphi
    Le DBnavigator est lié à la "table détail" ou à CLIENTS ? Ce n'est pas clair.
    Je présume que la tables des COMMANDES est liée à la table CLIENTS via un TDataSet ? Perso je préfére utiliser en ce cas une query
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM COMMANDES WHERE NUMCLI=:NUMCLI  -- indiquer les colonnes à récupérer plutôt que *
    et un TFDUpdateSQL pour gérer les INSERT,UPDATE et DELETE

  3. #3
    Membre éclairé
    Homme Profil pro
    Responsable associatif
    Inscrit en
    Octobre 2005
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Responsable associatif

    Informations forums :
    Inscription : Octobre 2005
    Messages : 229
    Par défaut
    Bonjour et merci de votre réponse,

    Côté Delphi
    Le DBnavigator est lié à la "table détail" ou à CLIENTS ? Ce n'est pas clair.
    Lié à la table détail, sur laquelle je tente d'effacer un enregistrement.
    Curieusement quand j'efface un client, tout se passe sans problème...mais je n'ai pas implanté l'effacement des commandes dans ce cas.

    Je pensais que la relation un à plusieurs était correctement gérée par Firedac. Apparemment ce n'est pas complètement le cas. Je vais creuser plus au niveau FB en suivant votre conseil.
    Si je place la contrainte au niveau FB, il me semble alors inutile de faire un Query sur les commandes non ? Si je comprends bien, les enregistrements de commandes seront toujours limités à ceux du client ?

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 706
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 706
    Billets dans le blog
    65
    Par défaut
    Bonjour,
    Citation Envoyé par zarbouine Voir le message
    Lié à la table détail, sur laquelle je tente d'effacer un enregistrement.
    Curieusement quand j'efface un client, tout se passe sans problème...mais je n'ai pas implanté l'effacement des commandes dans ce cas.
    Cela voudrait donc dire qu'il n'y a pas de contrainte référentielle ! Pas bon ça.

    Je pensais que la relation un à plusieurs était correctement gérée par Firedac. Apparemment ce n'est pas complètement le cas.
    Je n'utilise pas cette fonctionnalité de Firedac, comme je l'ai indiqué je préfère passer par les Query, très rarement les Tables qui ne sont que des query déguisées avec des options. D'ailleurs c'est peut-être dans les options de table qu'il faudra faire la recherche. Je vais faire un essai à mes moments perdus


    Si je place la contrainte au niveau FB, il me semble alors inutile de faire un Query sur les commandes non ?
    Rien à voir, il s'agit de structure et controle de la BDD
    Si je comprends bien, les enregistrements de commandes seront toujours limités à ceux du client ?
    Non, ce n'est pas au niveau FB mais au niveau de la requête

  5. #5
    Membre éclairé
    Homme Profil pro
    Responsable associatif
    Inscrit en
    Octobre 2005
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Responsable associatif

    Informations forums :
    Inscription : Octobre 2005
    Messages : 229
    Par défaut
    Ok.
    Merci pour les conseils, je vais avancer dans ma compréhension de la gestion de la BDD avant de faire la migration....

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 706
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 706
    Billets dans le blog
    65
    Par défaut
    Quelques conseils supplémentaires surtout à un habitué PARADOX:
    Ajoutez une colonne auto-incrémenté "technique" à vos tables
    Pensez aux diverses contraintes possible, j'ai indiqué la contrainte de référence (FOREIGN KEY) mais vous pouvez aussi utiliser des contraintes de contrôle (CHECK)
    Sachez qu'il y a la possiblité d'avoir des colonnes calculées (COMPUTED BY) donc évitez toute colonne qui peut l'être
    - en exemple PRIXUNITAIRE, QUANTITE ,MONTANT_LIGNE devient PRIX_UNITAIRE, QUANTITE,MONTANT_LIGNE COMPUTED BY (PRIX_UNITAIRE*QUANTITE) en faisant attention au type à cuase de la précision
    Pensez que vous pouvez utiliser des TRIGGERS, des Procedures
    Bref lisez les documents Firebird

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

Discussions similaires

  1. [Delphi Berlin + Firebird3]erreur lors du suppression d'un enregistrement
    Par aimer_Delphi dans le forum Bases de données
    Réponses: 5
    Dernier message: 30/04/2017, 15h24
  2. Erreur 400 en https avec firefox
    Par bambou dans le forum Apache
    Réponses: 2
    Dernier message: 08/02/2007, 18h07
  3. Réponses: 1
    Dernier message: 18/11/2006, 12h36
  4. Erreur 3167 sur suppression d'un enregistrement
    Par moustika dans le forum Access
    Réponses: 6
    Dernier message: 25/09/2006, 18h41
  5. [VB6]affichage d'une feuille modale / message d'erreur 400
    Par getea85 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 26/01/2006, 19h37

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