Création d'une table dans access via DELPHI

Messages postés
644
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
9 janvier 2017
- - Dernière réponse : gebu34
Messages postés
118
Date d'inscription
samedi 9 décembre 2006
Statut
Membre
Dernière intervention
17 novembre 2009
- 10 mai 2007 à 15:44
Bonjour,

Ma base de donnée sous ACCESS est gérée avec DELPHI.

Dans cette base de données ACCESS je souhaite ajouter une colonne à ma table via DELPHI.

Est-ce possible ?

Est-il possible de créer une autre table dans ACCESS via DELPHI  ?

Salutations
yvessimon
Afficher la suite 

7 réponses

Messages postés
120
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
15 novembre 2007
1
0
Merci
Bonjour


Possible en utilisant des commandes sql !


alter table pour pour ajouter une colonne


create table pour créer une table


Sinon, en utilisant ADOX mais un peu plus compliqué.


J-L
Commenter la réponse de jelume
Messages postés
118
Date d'inscription
samedi 9 décembre 2006
Statut
Membre
Dernière intervention
17 novembre 2009
0
Merci
Salut,
Comment ta base est-elle gérée? avec des composant ADO ?
A+
Commenter la réponse de gebu34
Messages postés
644
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
9 janvier 2017
0
Merci
Bonjour,


Avec ADOQuery.

yvessimon
Commenter la réponse de yvessimon
Messages postés
118
Date d'inscription
samedi 9 décembre 2006
Statut
Membre
Dernière intervention
17 novembre 2009
0
Merci
Salut,
Travaillant beaucoup sur base de données ACCESS, j'ai pris des habitudes.
J'utlise Delphi 7 et travaille sur Microsoft.Jet.OLEDB.4.0 Access 97 ou 2000

J'ouvre une unité Module nommé variables, ou je place ces constantes :

const
  OLEDBvar1 : string = 'Provider=Microsoft.Jet.OLEDB.4.0;' //Moteur MicroSoft Jet Engine 4.0
                     + 'Data Source='; //Chemin complet de la base de données

  OLEDBvar2 : string = ';User ID=Admin;'
                     + 'Persist Security Info=False;'
                     + 'Mode=ReadWrite;'
                     + 'Extended Properties="";'
                     + 'Jet OLEDB:System database="";'
                     + 'Jet OLEDB:Registry Path="";'
                     + 'Jet OLEDB:Database Password="";'
                     + 'Jet OLEDB:Engine Type=4;' //5 = Access2000  4 = Access97
                     + 'Jet OLEDB:Database Locking Mode=1;'
                     + 'Jet OLEDB:Global Partial Bulk Ops=2;'
                     + 'Jet OLEDB:Global Bulk Transactions=1;'
                     + 'Jet OLEDB:New Database Password="";'
                     + 'Jet OLEDB:Create System Database=False;'
                     + 'Jet OLEDB:Encrypt Database=False;'
                     + 'Jet OLEDB:Don''t Copy Locale on Compact=False;'
                     + 'Jet OLEDB:Compact Without Replica Repair=False;'
                     + 'Jet OLEDB:SFP=False';

Ensuite j'ouvre une unité Module Data nommé DTMA ou je place les composants ADO :
  ADOConnection que je nomme ADODB1
  ADOCommand que je nomme ADOCOM
  ADOTable que je nomme ADOTB1
  ADOQuery que je nomme ADOQR1

Ensuite pour ouvrir une table tu écris :
  DTMA.ADODB1.Connected := False;
  DTMA.ADODB1.ConnectionString := '';
  DTMA.ADODB1.ConnectionString :=OLEDBvar1 + CheminCompletDeMaBase + OLEDBvar2;
  DTMA.ADODB1.Connected := True;
La Base est prête à fonctionner

Pour créer une nouvelle base ACCESS :
Tu appelle la fonction :  CreationBase(CheminCompletNomNouvelleBase);
function CreationBase(ChemNom : string) : string;
var
  Catalog: OLEVariant;
  chnx : string;
begin
  result := '';
  try
    Catalog := CreateOleObject('ADOX.Catalog');
    chnx := 'Provider=Microsoft.Jet.OLEDB.4.0;' + 'User ID=Admin;' +
            'Data Source=' + CheminCompletNomNouvelleBase + ';' +
            'Mode=Share Deny None;Extended Properties="";' + 'Jet OLEDB:Engine Type=4;';
    Catalog.create(chnx);
    Catalog := NULL;
  except
    on E: Exception do result := E.message;
  end;
end;
Ta base est crée, il te suffit de créer tes tables;

La création de table s'effectue comme suit :
Par exemple une table "Parametre" avec les champs CLE texte 15 et VALEUR texte 30.
req est une variable string.
D'abord tu ouvre ta base :
  DTMA.ADODB1.Connected := False;
  DTMA.ADODB1.ConnectionString := OLEDBvar1 + CheminCompletNomNouvelleBase + OLEDBvar2;
  DTMA.ADODB1.LoginPrompt := False;
  DTMA.ADODB1.Connected := True;
Ensuite tu ouvre la command :
  DTMA.ADOCOM.Connection := DTMA.ADODB1;
Puis tu applique la requête
  req:= 'CREATE TABLE Parametres (' +
        ' CLE VARCHAR(15) NOT NULL UNIQUE PRIMARY KEY, ' +
        ' VALEUR VARCHAR(30) ' +
        ')';
  DTMA.ADOCOM.CommandText := req;
  DTMA.ADOCOM.Execute;
Il te faudra consulter les docs SQL, si tu veux ajouter des Index ou gérer d'autres champs.

Pour ajouter un champs, même principe que création de table, sauf la requête :
(par exemple ajouter un champs OBS text 100 sur la table Parametres)
  req:= 'ALTER TABLE Parametres ADD COLUMN OBS VARCHAR(100)';

Voilà il va falloir que tu buche les code SQL et tu peux travailler sur les bases ACCESS.
J'espère avoir été clair.
A+
Commenter la réponse de gebu34
Messages postés
644
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
9 janvier 2017
0
Merci
Bonjour,

Merci pour l'info :

C'est " ADOCommand  "  qui me permet de créer ou de faire  des modifications dans la base ACCESS


Saluttaions
yvessimon
Commenter la réponse de yvessimon
Messages postés
644
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
9 janvier 2017
0
Merci
Bobjour,


La création de la table  fonctionne bien tant que la table n'existe pas.


Aussi une dernière question:

Comment avoir la liste des tables dans la base ACCESS est-ce avec ADOCommand  ?


Je me plonge dans SQL pour la suite .


Salutations
yvessimon
Commenter la réponse de yvessimon
Messages postés
118
Date d'inscription
samedi 9 décembre 2006
Statut
Membre
Dernière intervention
17 novembre 2009
0
Merci
Salut,
Une fois ton DataBase connecté, faire :
DTMA.ADODB1.GetTablesNames(SL,False);
(SL est une variable déclarée de type TString)
Fais un coup de F1 sur GetTablesName, c'est bien renseigné.
A+
Commenter la réponse de gebu34