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 :

Problème de mise à jour de données avec IBClientDataset


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 47
    Points : 35
    Points
    35
    Par défaut Problème de mise à jour de données avec IBClientDataset
    Je développe un projet ( en fait un portage Delphi/Paradox -> Delphi7/Interbase 6.0 sous Windows NT) dans lequel je souhaite visualiser et réarranger ( créer une suite chronologique sans interruption ) des données dont la clé primaire est composée d'un identifiant et d'une date.
    Cette opération est délicate et peu performante en utilisant un composant TTable avec le BDE. Je souhaite réaliser ces modifications sur des données non "vivantes" pour les expédier une fois consolidées sur la Table IB sur le serveur.
    Je me suis inspiré de l'exemple donné sur ce site (Delphi 6 et Interbase 6 par Henry Cesbron Lavau ):

    Un composant TIBClientDataset ( CommandText: "SELECT * FROM MATABLE WHERE ID = 'XXXXXX' , sans paramétre) rapatrie les lignes à modifier sur un DBGRID via un DATASOURCE.
    Lorsque je veux appliquer les modifications:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
      Ibclientdataset1.ApplyUpdates(1)
    end;
    j'obtiens un premier message d'erreur :

    "Le projet a provoqué une exception EIBClientError avec le message "erreur d'analyse SQL: nom de paramétre attendu"...
    puis un second en poursuivant l'exécution pas à pas :

    "Le projet a provoqué une exception EDataBaseError avec le message "Enregistrement introuvable. Aucune clé spécifiée"
    C'est la premiére fois que j'utilise ce type de composant, aurais-je oublié quelque chose :

    Merci de vos avis

  2. #2
    Membre actif
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Points : 234
    Points
    234
    Par défaut
    Salut,
    Sur le premier message, je dirais qu'il attends un parametre : Tu ne ferais ton SELECT sur une procedure stockee par hasard ? auquel cas elle attend un parametre en input !

    Le 2eme message est la consequence du 1er : il n'arrive pas a raffraichir les donnees parceque le 1er plantage lui a fait perdre le cle permettant de retrouver l'enregistrement sur lequel il etait !

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 47
    Points : 35
    Points
    35
    Par défaut
    Bonsoir,

    Merci de t'être penché sur mon cauchemar...

    Le select du CommandText est, on ne peut plus prosaïque et sans paramétre, littéralement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT * FROM DONNEES_PAT
    WHERE ID = 'ABCDEF'
    dans lequel DONNEES_PAT est une table IB6 tout à fait "normale"

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2002
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 50
    Points : 52
    Points
    52
    Par défaut
    je pense que tu dois utiliser un composant "IB update sql" qui doite etre lié avec ton composant table (ou requete) que tu utilise pour ta grille.
    dans Ib update sql, tu tapes le script sql a la main ou delphi te le fait automatiquement selon la version.
    c'est donc le script de mise a jour, de suppression, ajout etc.. qui gere les modif et non pas le composant table ou requete directement.
    bon courage

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2002
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 50
    Points : 52
    Points
    52
    Par défaut
    en fait le composant "TIBClientDataset" n'existe pas.
    soit tu passe par un TIBQuery, dans ce cas il te faut un IBupdatesql comme indiqué dans le precedent message, afin de gerer tes ajout, modif, delete...

    soit tu passe par un TIBdataset, dans ce cas tu complet les ligne insert, modify etc... directement dans le composant

    bon week end

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 47
    Points : 35
    Points
    35
    Par défaut
    Strike !

    Tout fonctionne parfaitement avec un TIBDataSet dument renseigné ( de façon "semi-automatique" à l'aide de l'éditeur -lui automatique - de TIBUpdateSQL ).

    Un seul regret: ne pas pouvoir trier ( ou afficher selon un ordre d'index ) les lignes mises à jour avant de les avoir "commitées".

    Une interrogation : TIBClient Dataset existe bel et bien mais ne fonctionne pas ??? ( à rapprocher de certains composants existants/inexistants comme TIBBatchMove... )

    Merci de m'avoir sorti du tunnel,
    mon W.E. sera bon !

  7. #7
    Membre du Club
    Inscrit en
    Septembre 2002
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 50
    Points : 52
    Points
    52
    Par défaut
    excuse, TIBClientDataSet existe bien, j'etait dans 2 reponse a la fois...
    mais TIBClientDataSet est fait pour placer en mémoire cache les mises à jour des données récupérées, ce qui ne me semblait pas etre vraiment ton besoin.
    Julien

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

Discussions similaires

  1. [AC-2003] Problème de mise jour à des données avec ADO
    Par @omzo dans le forum VBA Access
    Réponses: 2
    Dernier message: 24/06/2010, 13h25
  2. Problème de mise à jour des données sur un onglet
    Par PenPen_lepingouin dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/06/2008, 17h49
  3. Mise à jour de données avec UIB
    Par newbie_one dans le forum Firebird
    Réponses: 2
    Dernier message: 18/02/2008, 00h10
  4. Réponses: 1
    Dernier message: 28/02/2007, 09h16
  5. [C#][Access]Problème de mise à jour des données
    Par vvvvv dans le forum ASP.NET
    Réponses: 10
    Dernier message: 11/04/2006, 10h43

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