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 :

C++ Builder 2009 + Pb avec ADO [Base de donnée]


Sujet :

C++Builder

  1. #1
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut C++ Builder 2009 + Pb avec ADO
    Bonjour à tous

    j'essaye de créer une base de données Acess avec ADO mais je rencontre un petit problème

    Je m'inspire de ceci mais cela ne fonctionne pas
    http://www.developpez.net/forums/d79...onnees-access/

    La création de la base vide se passe bien par contre j'ai une erreur dès que j'essaye de créer une table

    Voici mon code

    Création de la base
    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
     
    	// Chemin du fichier de Base de données
    	BaseDonnees = ExtractFilePath(Application->ExeName) + "\\db.mdb";
     
    	// Provider
    	Provider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + BaseDonnees +";";
     
    	// Si le ficbier de base de données n'existe pas
    	if(!FileExists(BaseDonnees.t_str()))
    	{
    		Variant vADO;
     
    		// On crée la base de données
    		vADO = Variant::CreateObject("ADOX.Catalog");
    		vADO.OleFunction("create", Provider.t_str());
     
    		// Création des tables et remplissage des pré-requis
    		CreationTables();
     
    		// on termine
    		vADO = Unassigned;
    	}
    	else
    	{
    		ShowMessage("La base de données existe déjà");
    	}
    Fonction de création des tables
    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
     
    // Méthode chargée de créer les tables
    void __fastcall TForm1::CreationTables(void)
    {
    	// Connexion
    	ADOConnection->ConnectionString = Provider;
    	ADOConnection->LoginPrompt = false;
    	ADOCommand->Connection = ADOConnection;
     
    	// On crée la table patient
    	String Requete;
     
    	// On construit la requête de création de la table Patient
    	Requete = "CREATE TABLE `Patient` (";
    	Requete += "`idPatient` INT NOT NULL AUTO_INCREMENT , ";
    	Requete += "`NomPatient` VARCHAR(45), ";
    	Requete += "`PrenomPatient` VARCHAR(45), ";
    	Requete += "`SexePatient`VARCHAR(1), ";
    	Requete += "`AgePatient`INT, ";
    	Requete += "`TaillePatient` DOUBLE, ";
    	Requete += "PRIMARY KEY (`idPatient`))";
     
    	// On crée la table
    	ADOCommand->CommandText = Requete;
    	ADOCommand->Execute();
    }
    Quand j'exécute mon code, j'ai l'erreur suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Exception déclenchée à $7C812AFB. Classe d'exception EOleException avec message '[Microsoft][Gestionnaire de pilotes ODBC] Nom de source de données trop long'. Processus Project1.exe (3104)
    Merci d'avance pour votre aide

  2. #2
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 109
    Points : 61
    Points
    61
    Par défaut
    Bonjour,
    Je pense que tu doit changer le nom de source de données, utilise un nom de taille petite
    A+

  3. #3
    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
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut kurul1
    Dans un premier temps j'essairais d'ouvrir la base avec Access, si elle s'ouvre y creer les tables, les champs, si cela fonctionne la requette est mal formulee peut etre un probleme lie a l'unicode
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  4. #4
    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
    Points : 3 766
    Points
    3 766
    Par défaut
    Voici un morceau de programme qui cree trois tables et les champs il fonctionne chez moi avec XP pack2 et BCB6
    Le 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
    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
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
     
    //---------------------------------------------------------------------------
    #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)
    {
    Button2->Visible = false;
    Form1->Refresh();
    Sleep(300);
    Label1->Visible = true;
    Label1->Caption = "INITIALISATION DE LA BASE DE DONNEES Dossier1";
    Form1->Refresh();
    Sleep(300);
    Variant vADO;
    // chemin de la base
    AnsiString FileName = ExtractFilePath(Application->ExeName)+"maBdd26.mdb";
    // teste d'existance de la base
    if (FileExists(FileName.c_str()))
      {
    Form1->ADOConnection1->Connected = false;
    Form1->ADOConnection1->Close();
    DeleteFile(FileName);
      }
    // on cree une base Access sans Access vide
    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 avance la ProgressBar
    ProgressBar1->StepIt();
    Sleep(50);
    // on cree une Table vide au nom de DossierSociete
            Form1->ADOCommand1->CommandText = "CREATE TABLE Dossier1";
            Form1->ADOCommand1->Execute();
    // on cree le champ ID_Ste defini comme compteur
            Form1->ADOCommand1->CommandText = "ALTER TABLE Dossier1 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 Dossier1 (ID_Ste) WITH PRIMARY";
            Form1->ADOCommand1->Execute();
    // on groupe les champs par Bevel
    // pour le type BOOLEAN utiliser YESNO
            AnsiString ChampSte;
            ChampSte = "ALTER TABLE Dossier1 ADD Instance YESNO,";
            ChampSte += "Gestdos YESNO";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
            Form1->ADOCommand1->CommandText = "ALTER TABLE Dossier1 ADD DateNaturJustif TEXT(50)";
            Form1->ADOCommand1->Execute();
            ChampSte = "ALTER TABLE Dossier1 ADD NoClass INTEGER,";
            ChampSte += "TelBur TEXT(15)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
    ProgressBar1->StepIt();
    Sleep(50);
            ChampSte = "ALTER TABLE Dossier1 ADD NomRaison TEXT(50),";
            ChampSte += "AdrPostal TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
            ChampSte = "ALTER TABLE Dossier1 ADD Ancien TEXT(50),";
            ChampSte += "AncienAdr TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
            ChampSte = "ALTER TABLE Dossier1 ADD TelCli TEXT(50),";
            ChampSte += "TelCopiCli TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
    ProgressBar1->StepIt();
    Sleep(50);
            Form1->ADOCommand1->CommandText = "ALTER TABLE Dossier1 ADD CCP TEXT(50)";
            Form1->ADOCommand1->Execute();
            Form1->ADOCommand1->CommandText = "ALTER TABLE Dossier1 ADD NatJuri TEXT(50)";
            Form1->ADOCommand1->Execute();
            ChampSte = "ALTER TABLE Dossier1 ADD Siret TEXT(50),";
            ChampSte += "Ape TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
    ProgressBar1->StepIt();
    Sleep(50);
            ChampSte = "ALTER TABLE Dossier1 ADD SiegSocial YESNO,";
            ChampSte += "SiegSocial1 YESNO,";
            ChampSte += "EtsSecon YESNO,";
            ChampSte += "EtsSecon1 YESNO,";
            ChampSte += "Nb TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
            ChampSte = "ALTER TABLE Dossier1 ADD AdrSiegSoTel TEXT(50),";
            ChampSte += "Ancienne TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
            ChampSte = "ALTER TABLE Dossier1 ADD NomPre1 TEXT(50),";
            ChampSte += "Qualit1 TEXT(50),";
            ChampSte += "DatlieNaiss1 TEXT(50),";
            ChampSte += "Nationa1 TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
    ProgressBar1->StepIt();
    Sleep(50);
            ChampSte = "ALTER TABLE Dossier1 ADD NomPre2 TEXT(50),";
            ChampSte += "Qualit2 TEXT(50),";
            ChampSte += "DatlieNaiss2 TEXT(50),";
            ChampSte += "Nationa2 TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
            ChampSte = "ALTER TABLE Dossier1 ADD NomPre3 TEXT(50),";
            ChampSte += "Qualit3 TEXT(50),";
            ChampSte += "DatlieNaiss3 TEXT(50),";
            ChampSte += "Nationa3 TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
            ChampSte = "ALTER TABLE Dossier1 ADD NomPre4 TEXT(50),";
            ChampSte += "Qualit4 TEXT(50),";
            ChampSte += "DatlieNaiss4 TEXT(50),";
            ChampSte += "Nationa4 TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
    ProgressBar1->StepIt();
    Sleep(50);
            ChampSte = "ALTER TABLE Dossier1 ADD NomPre5 TEXT(50),";
            ChampSte += "Qualit5 TEXT(50),";
            ChampSte += "DatlieNaiss5 TEXT(50),";
            ChampSte += "Nationa5 TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
            ChampSte = "ALTER TABLE Dossier1 ADD NomPre6 TEXT(50),";
            ChampSte += "Qualit6 TEXT(50),";
            ChampSte += "DatlieNaiss6 TEXT(50),";
            ChampSte += "Nationa6 TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
            ChampSte = "ALTER TABLE Dossier1 ADD NomEtPre1 TEXT(50),";
            ChampSte += "Pouvoir1 TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
    ProgressBar1->StepIt();
    Sleep(50);
            ChampSte = "ALTER TABLE Dossier1 ADD NomEtPre2 TEXT(50),";
            ChampSte += "Pouvoir2 TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
            ChampSte = "ALTER TABLE Dossier1 ADD NomEtPre3 TEXT(50),";
            ChampSte += "Pouvoir3 TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
            ChampSte = "ALTER TABLE Dossier1 ADD NomEtPre4 TEXT(50),";
            ChampSte += "Pouvoir4 TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
            ChampSte = "ALTER TABLE Dossier1 ADD NomEtPre5 TEXT(50),";
            ChampSte += "Pouvoir5 TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
    ProgressBar1->StepIt();
    Sleep(50);
            ChampSte = "ALTER TABLE Dossier1 ADD NomEtPre6 TEXT(50),";
            ChampSte += "Pouvoir6 TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
            ChampSte = "ALTER TABLE Dossier1 ADD NomEtPre7 TEXT(50),";
            ChampSte += "Pouvoir7 TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
            ChampSte = "ALTER TABLE Dossier1 ADD NomEtPre8 TEXT(50),";
            ChampSte += "Pouvoir8 TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
    ProgressBar1->StepIt();
    Sleep(50);
            ChampSte = "ALTER TABLE Dossier1 ADD NomEtPre9 TEXT(50),";
            ChampSte += "Pouvoir9 TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
            ChampSte = "ALTER TABLE Dossier1 ADD NomEtPre10 TEXT(50),";
            ChampSte += "Pouvoir10 TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
            Form1->ADOCommand1->CommandText = "ALTER TABLE Dossier1 ADD RensCompl TEXT(50)";
            Form1->ADOCommand1->Execute();
    ProgressBar1->StepIt();
    Sleep(50);
            Form1->ADOCommand1->CommandText = "ALTER TABLE Dossier1 ADD TelBuro TEXT(50)";
            Form1->ADOCommand1->Execute();
    Label1->Caption = "LA BASE DE DONNEES Dossier1 EST INITIALISEE";
    ProgressBar1->Position = 0;
    ProgressBar1->Step = 10;
    Form1->Refresh();
    Label2->Caption = "INITIALISATION DE LA BASE DE DONNEES Proced";
    Sleep(300);
    Form1->Refresh();
    // on cree une Table vide au nom de Procuration
            Form1->ADOCommand1->CommandText = "CREATE TABLE Proced";
            Form1->ADOCommand1->Execute();
    ProgressBar1->StepIt();
    Sleep(70);
    // on cree le champ ID_Proc defini comme compteur
            Form1->ADOCommand1->CommandText = "ALTER TABLE Proced ADD ID_Proc COUNTER";
            Form1->ADOCommand1->Execute();
    ProgressBar1->StepIt();
    Sleep(70);
    // on defini le champ compteur ID_Proc en clef primaire
            Form1->ADOCommand1->CommandText = "CREATE UNIQUE INDEX idxPrimary ON Proced (ID_Proc) WITH PRIMARY";
            Form1->ADOCommand1->Execute();
    ProgressBar1->StepIt();
    ProgressBar1->StepIt();
    Sleep(70);
    // on groupe les champs par Bevel
    // pour le type BOOLEAN utiliser YESNO
            ChampSte = "ALTER TABLE Proced ADD Mr YESNO,";
            ChampSte += "Mme YESNO,";
            ChampSte += "Mlle YESNO,";
            ChampSte += "NoProcu TEXT(50),";
            ChampSte += "Nom TEXT(50),";
            ChampSte += "PreNom TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
    ProgressBar1->StepIt();
    Sleep(70);
            ChampSte = "ALTER TABLE Proced ADD AdrDom TEXT(50),";
            ChampSte += "A TEXT(50),";
            ChampSte += "Le TEXT(50),";
            ChampSte += "Signat TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
    ProgressBar1->StepIt();
    Sleep(70);
            ChampSte = "ALTER TABLE Proced ADD DonnPouv YESNO,";
            ChampSte += "AnnulPouv YESNO";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
    ProgressBar1->StepIt();
    Sleep(70);
            ChampSte = "ALTER TABLE Proced ADD RecoiDom YESNO,";
            ChampSte += "Retir YESNO,";
            ChampSte += "Demand YESNO,";
            ChampSte += "Percoi YESNO";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
    ProgressBar1->StepIt();
    Sleep(70);
            ChampSte = "ALTER TABLE Proced ADD Mr1 YESNO,";
            ChampSte += "Mme1 YESNO,";
            ChampSte += "Mlle1 YESNO,";
            ChampSte += "Nom1 TEXT(50),";
            ChampSte += "PreNom1 TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
    ProgressBar1->StepIt();
    Sleep(70);
            ChampSte = "ALTER TABLE Proced ADD AdrDom1 TEXT(50),";
            ChampSte += "A1 TEXT(50),";
            ChampSte += "Le1 TEXT(50),";
            ChampSte += "Signat1 TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
    ProgressBar1->StepIt();
    Label2->Caption = "LA BASE DE DONNEES Proced EST INITIALISEE";
    ProgressBar1->Position = 0;
    ProgressBar1->Step = 30;
    Form1->Refresh();
    Label3->Caption = "INITIALISATION DE LA BASE DE DONNEES GESTION";
    Sleep(300);
    Form1->Refresh();
    // on cree un table au nom de GESTION
    ProgressBar1->StepIt();
    Sleep(100);
            Form1->ADOCommand1->CommandText = "CREATE TABLE Gestion";
            Form1->ADOCommand1->Execute();
    ProgressBar1->StepIt();
    Sleep(100);
            ChampSte = "ALTER TABLE Gestion ADD Logo TEXT(255),";
            ChampSte += "CodePostal TEXT(15),";
            ChampSte += "IDBureau TEXT(50),";
            ChampSte += "Telephone TEXT(50)";
            Form1->ADOCommand1->CommandText = ChampSte;
            Form1->ADOCommand1->Execute();
    ProgressBar1->StepIt();
    Sleep(100);
    ProgressBar1->Position = 0;
    Label3->Caption = "LA BASE DE DONNEES GESTION EST INITIALISEE";
    Button1->Visible = true;
    //        Form1->ADOConnection1->Connected = false;
    // en quittant on libere les Variant
    vADO = Unassigned;
    }
    //---------------------------------------------------------------------------
    sur la Form, 1TButton, 3 TLabel, 1 TProgressBar, 1 TADOConnection, 1 TADOCommand
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  5. #5
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Merci à vous pour vos réponses

    En fait j'ai résolu mon problème en utilisant un ADOConnection et un ADOQuery. j'ai pioché dans la FAQ

    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
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
    void __fastcall TBaseDeDonnees::Initialisation(TADOConnection *Connection, TADOQuery *Query)
    {
    	// Booléen pour savoir si l'on crée les tables
    	bool CreerTables = true;
     
    	// On affecte les outils d'accès à la base de données
    	ADOConnection = Connection;
    	ADOQuery = Query;
     
    	// Si la base de données n'existe pas
    	if(!FileExists(CheminAcces))
    	{
    		// On crée la base de données
    		CreationBaseDonnees();
    	}
    	// Sinon le fichier existe
    	else
    	{
    		// On ne crée pas les tables
    		CreerTables = false;
    	}
     
    	// Si la connexion à réussie
    	if(Connexion())
    	{
    		// Si l'on doit créer les tables
    		if(CreerTables)
    		{
    			// On crée les tables
    			CreationTables();
    		}
    	}
    }
     
    // Méthode chargée de la création de la base
    void __fastcall TBaseDeDonnees::CreationBaseDonnees(void)
    {
    	// Provider
    	String Provider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + CheminAcces +";";
     
    	// 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", Provider.t_str());
     
    	// on termine
    	vADO = Unassigned;
    }
     
    // Méthode chargée de l'exécution d'une requete
    void __fastcall TBaseDeDonnees::ExecutionRequetes(void)
    {
    	// Si la liste des requêtes n'est pas vide
    	if(Requetes->Count != 0)
    	{
    		// On balaye la liste des requêtes
    		for(int i = 0; i < Requetes->Count; i++)
    		{
    			// On exécute la requête
    			ADOQuery->SQL->Clear();
    			ADOQuery->SQL->Add(Requetes->Strings[i]);
    			ADOQuery->ExecSQL();
    		}
     
    		// On vide la liste des requetes
    		Requetes->Clear();
    	}
    }
     
    // Méthode chargée de se connecter à la base de données
    bool __fastcall TBaseDeDonnees::Connexion(void)
    {
    	try
    	{
    		ADOConnection->ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Mode=ReadWrite;Extended Properties=""DBQ="
    										+ CheminAcces + ";DefaultDir=" + CheminAcces
    										+ ";Driver={Driver do Microsoft Access (*.mdb)};DriverId=25;FIL=MS Access;FILEDSN="
    										+ CheminAcces + ";MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5"
    										+ ";SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;";
     
    		ADOConnection->Open();
     
    		// On assigne la connexion pour l'exécution des requêtes
    		ADOQuery->Connection = ADOConnection;
     
    		return true;
    	}
    	catch(Exception &exception)
    	{
    		MessageBox(Application->Handle,"ERREUR Impossible d'ouvrir la Base de Données !!",
    					 "Avertissement",MB_OK|MB_ICONSTOP ) ;
     
    		return false;
    	}
    }
     
    // Méthode chargée de créer les tables
    void __fastcall TBaseDeDonnees::CreationTables(void)
    {
    	// Requête
    	String Requete;
     
    	// On crée la requête de création de la table Patient
    	Requete = "CREATE TABLE Patient ";
    	Requete += "(";
    	Requete += "idPatient COUNTER, ";
    	Requete += "NomPatient TEXT(45), ";
    	Requete += "PrenomPatient TEXT(45), ";
    	Requete += "SexePatient TEXT(1), ";
    	Requete += "AgePatient INT, ";
    	Requete += "CONSTRAINT PatientPK PRIMARY KEY (idPatient)";
    	Requete += ")";
     
    	// On ajoute la requete dans la liste des requêtes à exéuter
    	Requetes->Add(Requete);
     
            .....
     
    	// On exécute les requetes
    	ExecutionRequetes();
    }
    Maintenant que ma base est crée, il faut que j'arrive à l'interroger, j'y travaille

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/04/2012, 21h47
  2. problème avec c++ builder 2009
    Par ousbes dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/05/2010, 13h42
  3. probleme avec C++ builder 2009
    Par mesrine dans le forum C++Builder
    Réponses: 4
    Dernier message: 21/11/2008, 16h34
  4. Bug sur la prorpiété required d'un TField avec ADO ???
    Par denrette dans le forum Bases de données
    Réponses: 6
    Dernier message: 04/11/2003, 11h04

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