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

Composants VCL Delphi Discussion :

TMS AdvDBGrid et MySQL


Sujet :

Composants VCL Delphi

  1. #1
    Membre éclairé
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 476
    Par défaut TMS AdvDBGrid et MySQL
    Bonjour,
    Je souhaite utiliser AdvDBGrid avec MySQL.
    Le manuel de TMS mentionne la simplicité d'affichage mais cela ne me renvoie rien.
    "Drop a TDataSource on the form and connect it to a TDataSet of choice. (j'ai choisi TClientDataSet)
    Activate the dataset and connect the TDataSource to TDBAdvGrid.
    With the default setting of TDBAdvGrid.AutoCreateColumns as true, the grid will automatically create TDBGridColumnItem instances for every DB field in the dataset and add it to the Columns collection.
    The TDBGridColumnItem.FieldName will be initialized with the fieldnames found in the dataset Fields collection.
    When TDBAdvGrid.AutoRemoveColumns is set to true, deactivating the dataset will automatically remove all columns from the grid"

    J'ai fait tout ça mais rien ne se passe
    Finalement la bonne vielle méthode fonctionne, à savoir de remplir une stringGrid à l'aide d'une requête SQL
    J'aurais voulu simplifier, mais si qq peux m'aider??? (quels compo et quels settings - j'oublie peut-être simplement de cocher une option???)

    Merci pour votre aide

    PhilLu

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    Tu as fait manuellement le CreateDataSet pour le TClientDataSet ?
    Si non, tu as affecté un TDataSetProvider via la méthode SetProvider ou la propriété ProviderName du TClientDataSet pour le lier à un TxxMySQLQuery ?

    As-tu essayé avec un TDBGrid ?
    Cela semble être le même process :
    - Ajouter un DataSet (TClientDataSet)
    - Ajouter un DataSource sur ce DataSet
    - Ajouter la Grid sur ce DataSource

    Avec un TClientDataSet, soit manuel soit via IDE
    Via IDE, je ne le fait jamais, ça doit être un double-clic dessus et tu déclare tes champ
    Puis Active à True

    Soit manuel
    Donc un TButton qui fait les FieldDefs.Add, puis le CreateDataSet
    Le CreateDataSet va ouvrir un DataSet vide, cela va s'afficher dans la grille !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre éclairé
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 476
    Par défaut
    Merci LeTroll ;-)
    En fait pas moyen de sélectionner MySQL via ODBC dans TTable...
    J'ai donc installé MySQL ODBC 5.3/64 ANSI driver via panneau config/outils d'admin (machine 64 bits mais application 32 bits)
    (je suis en MySQL 5.6.12, mais je n'ai pas trouvé plus récent sur http://dev.mysql.com/downloads/connector/odbc/)
    J'ai configuré la DB
    Le test de connexion est ok
    J'ai maintenant ma DB dans la liste déroulante de DataBaseName de TTable
    mais quand je veux sélectionner la table, je reçois un message: "Pilote inconnu du système"???
    J'ai redémarré ma machine par sécurité mais pas mieux
    J'ai aussi installé la version Unicode: idem

    Merci pour vos conseils ;-)
    PhilLu

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    En théorie : une application 32 bit ne voit que les alias ODBC 32 Bit !
    La base de registre 32 bits et ses nœuds SysWOW64
    En pratique : je n'y comprends plus grand chose au alias ODBC !!!

    Si les experts du 64bits pouvaient nous éclairer !
    Tente de voir "C:\Windows\SysWOW64\odbcad32.exe" c'est la version ODBC 32 !


    Oublie le BDE, utilise ADO, DBExpress ou FireDac !
    Ou même MyDAC, payant mais bien pratique !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre éclairé
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 476
    Par défaut
    OK, merci pour l'info précieuse LeTroll
    J'utilise maintenant DBExpress (SimpleDataset)
    J'ai donc sur ma form:
    DBGrid
    DBNavigator
    DataSource
    SimpleDataSet
    et qq DBEdit
    J'ai accès aux données et le navigateur fonctionne aussi
    Les différents DBEdit sont mis à jour quand je navigue dans la DB
    J'arrive à créer ou à modifier des données de la DBGrid à partir de l'édition des champs DBEdit
    Malgré la validation via le DBNavigator, les données ne sont pas mises à jour dans la DB MySQL
    Je cherche pourquoi
    ...mais je tourne en rond
    Déjà pour ton aide...

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 593
    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 593
    Billets dans le blog
    65
    Par défaut
    bonjour,

    Malgré la validation via le DBNavigator, les données ne sont pas mises à jour dans la DB MySQL
    Je cherche pourquoi
    J'ai l'impression que tu as oublié un ApplyUpdate quelque part

    il y a de très bonnes videos youtube sur l'utilisation de dbexpress (de mémoire je ne pourrais donné de lien, si ce n'est peut être une session des devdujeudi ou delphitv(en) )

  7. #7
    Membre éclairé
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 476
    Par défaut
    Pffffff, je sue!

    Tout fonctionne sauf la mise à jour de la DB

    Voici ce que j'ai:
    Une DB MySQL avec une table nommée 'users'
    Sur ma Form:
    Une SQLConnection1 avec accès à MySQL
    Un SQLDataset1 dont SQLConnection est SQLConnection1
    • Command Text = select * from 'users'
    • Command Type = ctQuery
    • SchemaName = root
    • Datasource = Datasource1
    • Active = True

    Un DataSource dont Dataset = ClientDataSet1
    Un DatasetProvider1 dont Dataset = SQLDataset1
    Un ClientDataset1 dont ProviderName = DatasetProvider1
    Un DBNav dont DataSource est Datasource1
    Les DBEdit nécessaires pour afficher les champs de la table

    Quand je lance, tout semble ok.
    Je me déplace das la DB et les champs sont bien affichés.
    Je clique sur le bouton edit du navigateur et je modifie un DBedit
    Je clique ensuite sur le bouton post du navigateur; pas de message d'alarme, mais pas de modification de la DB
    J'ai aussi ajouté un bouton qui actionne: mais je reçois un message: SQLDataset1 n'est pas en mode édition ou insertion!
    J'ai cherché sur ledevdujeudi mais rien; sur delphitv: payant et youtube en russe ou en portugais
    Merci pour vos idées!!!

  8. #8
    Membre éclairé
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 476
    Par défaut
    Bon, j'avais trouvé un code pourri sur:
    http://delphi.about.com/gi/o.htm?zi=...aper/2106.html
    qui ne fonctionnait pas du tout!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     var
        Posts: Integer = 0;
     
      procedure TForm1.SQLClientDataSet1AfterPost(DataSet: TDataSet);
      const
        MaxPosts = 7;
      begin
        Inc(Posts);
        if Posts > MaxPosts then
        begin
          (DataSet as TClientDataSet).ApplyUpdates(-1);
          Posts := 0
        end
      end;
    je l'ai regardé de plus près et après correction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.ClientDataSet1AfterPost(DataSet: TDataSet);
    begin
       MaxPosts := 7;
       Posts := 0;
      begin
        Inc(Posts);
        if Posts < MaxPosts then
        begin
          (DataSet as TClientDataSet).ApplyUpdates(-1);
        end
    end;
    end;
    ça fonctionne!!!

    Je ne comprends pas cette logique, si qq peux m'expliquer???



  9. #9
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 933
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 933
    Par défaut
    Dans le premier cas, il faut passer huit fois dans l'événement pour appliquer les modifications.
    Dans le deuxième cas, ben... c'est systématique

    Pour simplifier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.ClientDataSet1AfterPost(DataSet: TDataSet);
    begin
      (DataSet as TClientDataSet).ApplyUpdates(-1);
    end;

  10. #10
    Membre éclairé
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 476
    Par défaut
    Ma question est pourtant simple et élémentaire:
    J'ai un DBGrid, un datasource, un SQLConnection, un SQLDataset, un DatasetProvider, et un ClientDataSet.
    J'ai des données dans la DB.
    Quand je lance l'appli, ma DBGrid m'affiche bien les données de la table de la DB.
    Je souhaite pouvoir éditer une valeur de le table de sorte que sur un OnKeyUp la table de la DB soit mise à jour.
    Mais mes tentatives restent comment jouer avec les BeforePost, update et afterPost???


    d'avance

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

Discussions similaires

  1. [Kylix] Kylix attaque Mysql ?
    Par nahmsath dans le forum EDI
    Réponses: 9
    Dernier message: 12/08/2002, 19h37
  2. [Kylix] [cgi] pb déploiement appli avec connexion MySQL [rés
    Par Nepomiachty Olivier dans le forum EDI
    Réponses: 3
    Dernier message: 06/08/2002, 20h09
  3. Probleme C++Builder et Mysql
    Par noname dans le forum C++Builder
    Réponses: 3
    Dernier message: 20/06/2002, 13h40
  4. connection a une BDD MySql
    Par delire8 dans le forum MFC
    Réponses: 7
    Dernier message: 19/06/2002, 18h18
  5. [Kylix] Pb connection à Mysql
    Par Anonymous dans le forum EDI
    Réponses: 3
    Dernier message: 25/04/2002, 15h26

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