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 :

Delphi: Ajouter un champ a une base de donnée AdoTable (MDB)


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2012
    Messages : 23
    Points : 22
    Points
    22
    Par défaut Delphi: Ajouter un champ a une base de donnée AdoTable (MDB)
    Bonjour,

    j'essai d'y ajouter un champ a une base de donnée access existante. J'ai le code suivant mais qui me produit un erreur.

    Merci pour votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
      var
      AdoTable1: TAdoTable;
      Field: TField;
      Str1: String;
     
      ...
     
      If ADOTable1.FieldList.Find(Str1) = nil then
      Begin
        ADOTable1.Active := False;
        Field := TIntegerField.Create(AdoTable1);
        Field.FieldName := Str1;
        Field.DataSet := AdoTable1;
        AdoTable1.FieldDefs.Add(Str1, ftInteger);
        AdoTable1.Active := true;  //-> Erreur ici pour dire que le champ (nom dans Str1) n'a pas été trouvé
      End;
     
       ...

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Peut-être une requête exécutée dans un Query ou la méthode Exec d'un ADOConnection ?
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    requete := 'ALTER TABLE ' + nom_table + ' ADD COLUMN ' + Str1 + ' INT';
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    Suivant les bases de données le ALTER TABLE n'est pas forcement disponible donc il vaut mieux passer par une requête SQL
    Dans le cas d'une table BDE/PARADOX l'opération de création est possible. Pour l'ajout de champs a une table existante je ne sais pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
          Tb1: TTable;
    ...
          Tb1.FieldDefs.Add (...
          Tb1.CreateTable;

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 037
    Points : 40 944
    Points
    40 944
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Je suis d'accord avec tourlourou utiliser le SQL est tellement plus facile, quoique j'aurai plutôt proposé sans COLUMN requete := 'ALTER TABLE ' + nom_table + ' ADD ' + Str1 + ' INT';maintenant pour ce qui est du code qui ne fonctionne pas peut être est-ce parce que les instructions ne sont pas dans le bon ordre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    var
      AdoTable1: TAdoTable;
      Field: TField;
      Str1: String;
     
      ...
     
      If ADOTable1.FieldList.Find(Str1) = nil then
      Begin
         // création du champ
         AdoTable1.FieldDefs.Add(Str1, ftInteger);  
         // rafraichir la table  est-ce nécessaire ?
         ADOTable1.Active := False;
         AdoTable1.Active := true;  
         // ajout déclaration pour le dataset, quoique je ne vois pas pour quelle raison ?  
         Field := TIntegerField.Create(AdoTable1);
         Field.FieldName := Str1;
         Field.DataSet := AdoTable1;
         // test
         If ADOTable1.FieldList.Find(Str1) = nil then showmessage('ajout liste des champs raté'); 
     End;
    à ce stade, il serait intéressant de vérifier si la colonne a été créée dans la table

    ceci dit, je ne suis pas un spécialiste ADO, loin d'être ma tasse de thé
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2012
    Messages : 23
    Points : 22
    Points
    22
    Par défaut Ajout d'un champs au AdoTable
    Merci pour vos recommandations.

    Voici la solution trouvé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
      var
      AdoTable1: TAdoTable;
      AdoConnection: TADOConnection;
      AdoQuery: TAdoQuery;
      Str1: String;
     
      ...
     
      If ADOTable1.FieldList.Find(Str1) = nil then
      Begin
        ADOTable1.Active := False;
     
        AdoConnection := TADOConnection.Create(Form1);
        AdoQuery := TAdoQuery.Create(Form1);
        AdoConnection.ConnectionString := AdoTable1.ConnectionString ;
        AdoConnection.LoginPrompt := False;
        AdoConnection.Connected := True;
        AdoQuery.Connection := AdoConnection;
        AdoQuery.Active := False;
        AdoQuery.SQL.Clear;
        Adoquery.SQL.Add('ALTER TABLE ' + TableName + ' ADD ' + FieldName + ' INTEGER');
        Adoquery.ExecSQL;
        Adoquery.Free;
        AdoConnection.Connected := False;
        AdoConnection.Free;
     
        AdoTable1.Active := true;
      End;

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

Discussions similaires

  1. comment ajouter des champs dans une base en exploitation?
    Par Clotilde dans le forum InterBase
    Réponses: 4
    Dernier message: 04/09/2009, 19h53
  2. Réponses: 2
    Dernier message: 28/06/2006, 20h34
  3. position du champs dans une base de donnée
    Par eric205 dans le forum Bases de données
    Réponses: 2
    Dernier message: 04/04/2005, 09h22
  4. [MFC] Champs d'une base de donnée
    Par MadChris dans le forum MFC
    Réponses: 5
    Dernier message: 24/03/2004, 16h21

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