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 :

Insertion BDD paramètre non trouvé


Sujet :

Bases de données Delphi

  1. #1
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut Insertion BDD paramètre non trouvé
    Bonjour,

    J'ai un petit problème sous Delphi 2010 avec une BDD Access.

    J'ai un AdoDataSet et un DataSource pour remplir une grille (select id_client, nom_client, prenom_client from client)

    Ensuite j'ai un autre AdoDataSet et un autre DataSource pour gérer les données dans des TDBEdit (pour la modification) avec la requete (select * from client where id_client = :id_client)

    C'est un fonctionnement en maître - detail

    Le problème c'est que quand sur mon AdoDataSet (detail) je fais un .Insert; j'ai un erreur "Violation d'accès .. : Paramètre 'id_client' non trouvé".

    Pouvez vous m'aider?

    Merci

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par retwas Voir le message
    C'est un fonctionnement en maître - detail
    Non, ce ne l'est pas.
    Je cite l'aide de Delphi (7 en l'occurrence) :
    Lorsque vous définissez une relation maître/détail, vous reliez deux ensembles de données de sorte que tous les enregistrements de l'un (ensemble de données détail) correspondent toujours à un enregistrement unique dans l'autre (ensemble de données maître).
    Or vous insérez une ligne "détail" pour laquelle il n'y a encore aucune ligne "maître".
    La relation MD entre vos deux datasets doit être supprimée.

    Une relation MD peut se faire de manière réflexive mais pas avec une même colonne pour les 2 tables. Par exemple, si votre table client avait une colonne id_client_fac permettant de définir un client de facturation, on pourrait le faire : la table maitre afficherait les clients, la table détails afficherait (s'ils existent) les clients pour lequel on a défini un code client de facturation qui correspondrait au id client de la table maître.

    Personnellement, je traiterais votre problème comme suit:
    1. un adodataset pour lire la table client
    2. un dataprovider lié à ce dataset
    3. un clientdataset lié à ce dataprovider
    4. un datasource lié à ce clientdataset
    5. une grille et des dbedits reliés à ce datasource

    Un insert sur le clientdataset créerait une ligne vierge et initialiserait des dbedits vierges.
    Un update sur le clientdataset initialiserait des dbedits avec les valeurs de la ligne sélectionnée.
    Sur l'évènement AfterPost du clientdataset, j'appellerai la commande ApplyUpdates afin de répercuter les informations dans la base de données.
    Philippe.

  3. #3
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut
    Merci beaucoup, ça fonctionne très bien !

    Seule petite chose, c'est que quand je fais mon cds.insert;
    j'ai bien ma ligne en plus dans la grille et mes dbedit vierge avec mon focus dans le premier dbedit, si je clic sur le dbedit cela annule mon enregistrement, savez vous pourquoi?

    Merci

  4. #4
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Citation Envoyé par retwas Voir le message
    quand je fais mon cds.insert;
    j'ai bien ma ligne en plus dans la grille et mes dbedit vierge avec mon focus dans le premier dbedit, si je clic sur le dbedit cela annule mon enregistrement, savez vous pourquoi?
    C'est parce que votre grille détient le focus au moment où vous appelez Insert.
    Au moment où elle le perd, elle annule la commande, d'où l'effet constaté.

    Une piste pour résoudre ce problème :
    Le ClientDataset déclenche l'évènement BeforeInsert. Dans cette procédure, il faut placer le focus sur un autre composant (un DBEdit par exemple) si on détecte que c'est la grille qui a le focus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      if MaDBGrid.Focused then
        MonDBEdit.SetFocus;
    Une précision que j'ai oubliée dans mon précédent message, si vous faites des suppressions, n'oubliez pas d'appeler ApplyUpdates sur l'évènement AfterDelete de votre ClientDataSet...
    Philippe.

  5. #5
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut
    Merci, j'ai trouvé avec le "PostOnExit" sur la grille

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

Discussions similaires

  1. [AC-2003] Pb INSERT INTO Element non trouvé dans cette collection
    Par rch05 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 11/10/2010, 19h48
  2. Problème de paramètres non trouvés
    Par jodan33 dans le forum Débuter
    Réponses: 18
    Dernier message: 28/03/2008, 09h04
  3. bdd : erreur 3265 élément non trouvé dans cette collection
    Par morgan47 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 10/07/2006, 09h52
  4. [Debutant][Install][VS]erreur sur fichier non trouvé.
    Par silvermoon dans le forum DirectX
    Réponses: 4
    Dernier message: 16/07/2004, 20h59
  5. Réponses: 4
    Dernier message: 13/04/2004, 19h12

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