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

C++Builder Discussion :

Connexion ADO avec Access sous C++ Builder XE3 [Base de donnée]


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut Connexion ADO avec Access sous C++ Builder XE3
    Bonjour à tous

    J'essaye de créer une base de données Acess directement dans mon programme si celle-ci n'existe pas et de me connecter dessus ou alors de me connecter directement dessus si celle-ci existe déjà.

    J'utilise ce qu'on m'avait conseillé dans un autre Post ;

    http://www.developpez.net/forums/d92...2009-p-pb-ado/

    Seulement depuis ce post j'ai évoluer en version de C++ builder et maintenant sous XE3 j'ai un message d'erreur me disant Base de données déjà existante alors que le fichier mdb n'existe pas

    Est-ce que quelqu'un aurait une solution

    Merci d'avance pour votre aide

  2. #2
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut kurul1
    Quelle version d'Access utilise tu, si je ne me trompe pas la Version 2010 n'a plus le meme provider, mais Access peut acceder aux versions Anciennes,
    Avec X3 il ne faut pas oublier l'Unicode qui donne des soucis lors du passage des chaines, essaie avec ( WideString( ma chaine) )

  3. #3
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Merci pour ta réponse blondelle

    Tu as surement trouvé la solution, C'est avec Access 2010, j'ai changé de C++ Builder mais aussi d'acess

    Après normalement on est pas obligé d'avoir Access sur son PC pour ce que cela fonctionne non ?

    Je vais essayer avec ce que tu m'as proposé

  4. #4
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Après la modification, j'ai une Fatal Erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ilink32 Erreur] Fatal: Impossible d'ouvrir le fichier 'VID窞瘨獲Ƿ웢E.OBJ'
    avec ce code :

    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
     
    // Méthode chargée de la création de la base
    void __fastcall TBaseDonnees::CreationBaseDonnees(void)
    {
    	// Provider
    	String Provider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + CheminAcces +";";
     
    	ShowMessage("Provider : " + Provider);
     
    	// Variable pour la création de la base de données
    	Variant vADO;
     
    	// On crée la base de données
    	vADO = Variant::CreateObject("ADOX.Catalog");
    	vADO.OleFunction("create", WideString(Provider));
     
    	// on termine
    	vADO = Unassigned;
    }
    CheminAcces est connu par la fonction car c'est une variable de classe

  5. #5
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    J'ai eu quelques probleme a la creation d'une base avec Access 2010,mais je ne me souviens plus de la solution trouvee, mais j'avais galeré un bon moment, si tu cree une base avec l'ancien provider tu pourra lire ta base sur les anciennes version d'Access, mais ce n'est pas possible avec le nouveau provider qui ne reconnait que 2010, regarde dans l'aide d'Access

  6. #6
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Après moi si je ne lit pas la base dans access 2010 ca ne me gène pas, moi je veux travailler sur la base dans mon logiciel.

    Mais avec l'ancien provider ca ne fonctionne pas non plus car comme je te dit plus haut, ca me marque la base existe déjà et le fichier mdb n'est pas créé alors qu'il n'existe pas

    Je vais regarder si je trouve le chemin du nouveau provider

  7. #7
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    J'ai retrouve mon code teste
    le .h
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    //---------------------------------------------------------------------------
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ADODB.hpp>
    #include <DB.hpp>
    #include <DBGrids.hpp>
    #include <Grids.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published: // IDE-managed Components
            TButton *Button1;
            TADOConnection *ADOConnection1;
            TADOCommand *ADOCommand1;
            TADOTable *ADOTable1;
            TEdit *Edit1;
            TEdit *Edit2;
            TADOQuery *ADOQuery1;
            TDataSource *DataSource1;
            TEdit *Edit3;
            TEdit *Edit4;
            TDBGrid *DBGrid1;
            TEdit *Edit5;
            TEdit *Edit6;
            void __fastcall Button1Click(TObject *Sender);
    private: // User declarations
    public:  // User declarations
            __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    le .cpp
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    //dabord tester si la base existe, si non creer la base
     
    // "INITIALISATION DE LA BASE DE DONNEES DOSSIERS DE SOCIETE";
    Variant vADO;
    // chemin de la base extension jusque 2003 .mdb extension apres 2003 .accdb
    AnsiString FileName = ExtractFilePath(Application->ExeName)+"maBdd.mdb";
    // teste d'existance de la base
    if (FileExists(FileName.c_str()))
      {
    Form1->ADOConnection1->Connected = false;
    Form1->ADOConnection1->Close();
    DeleteFile(FileName);
      }
    // "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+FileName+";";   jusque 2003
    // "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+FileName+";";  apres 2003
    // on cree une base Access sans Access vide
    //AnsiString provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+FileName+";";
    AnsiString provider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+FileName+";";
    vADO = Variant::CreateObject("ADOX.Catalog");
    vADO.OleFunction("create", provider.c_str());
    //===========================
    // on connecte avec ADOConnection
            Form1->ADOConnection1->ConnectionString = provider;
            Form1->ADOConnection1->LoginPrompt = false;
            Form1->ADOCommand1->Connection = Form1->ADOConnection1;
    //===========================
    // on cree une Table vide au nom de Dossier
            Form1->ADOCommand1->CommandText = "CREATE TABLE Dossier";
            Form1->ADOCommand1->Execute();
    //===========================
    // on cree le champ ID_Ste defini comme compteur
            Form1->ADOCommand1->CommandText = "ALTER TABLE Dossier ADD ID_Ste COUNTER";
            Form1->ADOCommand1->Execute();
    // on defini le champ compteur ID_Ste en clef primaire
            Form1->ADOCommand1->CommandText = "CREATE UNIQUE INDEX idxPrimary ON Dossier (ID_Ste) WITH PRIMARY";
            Form1->ADOCommand1->Execute();
    // on groupe les champs par Bevel
    // pour le type BOOLEAN utiliser YESNO
            AnsiString ChampSte;
            ChampSte = "ALTER TABLE Dossier ADD Instance YESNO,";
            ChampSte += "Gestdos YESNO";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
            ChampSte = "ALTER TABLE Dossier ADD nom TEXT(15)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
    // types de champs INTEGER YESNO TEXT(15)
    // connecte DBGrid
    // DBGrid1->Columns->Add();
    DBGrid1->DataSource = DataSource1;
    //TColumn *ColumnA = new TColumn();
    //ColumnA = DBGrid1.Columns.Add;
    // ecrire dans la table
    Form1->ADOTable1->Connection = Form1->ADOConnection1;
            Form1->ADOConnection1->Connected = true;
            Form1->ADOTable1->TableName = "Dossier";
            Form1->ADOTable1->Active = true;
            Form1->DataSource1->DataSet = Form1->ADOTable1;
    // on se place sur le dernier enregistrement
    Form1->ADOTable1->Last();
    //Form1->ADOQuery1->Last();
    // on insert un enregistrement
    Form1->ADOTable1->Insert();    // Form1->ADOTable1->Append();
    //Form1->ADOQuery1->Insert();
    Form1->ADOTable1->FieldByName("Instance")->Value = Edit1->Text;
    //Form1->ADOQuery1->FieldByName("Instance")->Value = Edit1->Text;
    Form1->ADOTable1->FieldByName("Gestdos")->Value = Edit2->Text;
    //Form1->ADOQuery1->FieldByName("Gestdos")->Value = Edit2->Text;
    Form1->ADOTable1->FieldByName("nom")->Value = Edit5->Text;
    //Form1->ADOQuery1->FieldByName("nom")->Value = Edit5->Text;
    // on ecrit dans la table
    Form1->ADOTable1->Post();
    //Form1->ADOQuery1->Post();
    // on affiche un enregistrement
    Form1->Edit3->Text = (Form1->ADOTable1->FindField("Instance")->AsString);
    Form1->Edit4->Text = (Form1->ADOTable1->FindField("Gestdos")->AsString);
    Form1->Edit6->Text = (Form1->ADOTable1->FindField("nom")->AsString);
    }
    //---------------------------------------------------------------------------
    ca fonctionne avec BCB6, Access 2010, Window7

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

Discussions similaires

  1. connexion ado avec acces et besoin d'aide pour code vb svp
    Par essse dans le forum Visual Studio
    Réponses: 0
    Dernier message: 06/03/2009, 09h57
  2. Delphi 7 avec Access sous Vista
    Par tomy29 dans le forum EDI
    Réponses: 4
    Dernier message: 19/12/2007, 13h25
  3. connexion PostgreSql avec Access et VB
    Par Jertho dans le forum PostgreSQL
    Réponses: 0
    Dernier message: 19/08/2007, 22h35
  4. Executer une procédure Access sous C++Builder
    Par kmaniche dans le forum C++Builder
    Réponses: 38
    Dernier message: 19/12/2006, 14h27
  5. Plantage requete SQL simple sous Delphi7/ADO avec Access
    Par tomy29 dans le forum Bases de données
    Réponses: 2
    Dernier message: 25/08/2005, 11h09

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