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 :

Creation mdb vide [Base de donnée]


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 63
    Par défaut Creation mdb vide
    bonjour je tente de créer un fichier mdb vide. Je précise je suis avec C++ builder XE. j'ai saisit le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if (FileExists(mMdbFile))
      {
    	if (!DeleteFile(mMdbFile)) throw Exception("Unable to overwrite " +
    	  mMdbFile + " \r\nMaybe file is currently locked by another application");
      }
      Variant vADO;
      AnsiString provider = PROVIDER_SOURCE + mMdbFile;
      vADO = Variant::CreateObject("ADOX.Catalog");
      vADO.OleFunction("create", provider.c_str());
      // on termine
      vADO = Unassigned;
    Seulement à l'exécution j'ai une erreur OleException 'Type de variable incorrect'.
    J'ai bien inclus comobj.hpp et je ne comprends pas pourquoi cela ne fonctionne pas!!! Si quelqu'un à une idée !!!

  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 chpog
    Peut etre comme ceci
    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
     
    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 cree une Table vide
    // on cree le champ
     
    //        Form1->ADOConnection1->Connected = false;
    // en quittant on libere les Variant
    vADO = Unassigned;

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 63
    Par défaut
    Merci pour ta réponse. J'ai essayé mais cela ne fonctionne pas mieux.
    mon souci étant vraiment localisé sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vADO.OleFunction("create", provider.c_str());
    C'est cette ligne qui ne fonctionne pas.
    Mais impossible de savoir si c'est parceque ADOX.catalog à changé avec la version 9.0 de C++ builder XE ou si c'est autre chose!
    si quelqu'un arrive à faire fonctionner se code sous C++ builder X 9.0 je suis preneur!!!

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 055
    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 055
    Par défaut
    'ADOX.Catalog' n'a rien à avoir avec C++Builder !
    C'est un ActiveX déjà installé sur le poste avec ODBC

    Je suppose que tu as utilisé l'exemple de la FAQ - Comment ouvrir une base de données Access vide sous OleADO sans Access ?

    Tu as utilisé du AnsiString, je te conseille le WideString qui est le type recommandé pour l'utilisation d'objet COM ou ActiveX

    Pense que XE est Unicode, j'ignore comme réagit le type Variant
    son utilisation est nettement plus simple en Delphi, est-il passé de char* à w_char* ou wchar_t* ?



    C++Builder : Créer une BDD Access vide [Résolu]
    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
    Futur Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2011
    Messages : 4
    Par défaut
    Bonjour chpog

    A priori ton problème vient du fait que la chaîne de connexion Provider n'est pas valide.
    En tout cas sur ton 1er code. En effet Provider = PROVIDER_SOURCE + mMdbFile;
    Je suppose que PROVIDER_SOURCE est une constante = à "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" et
    mMdbFile est le nom complet du fichier .mdb (incluant le chemin) en tout cas ça devrait être le cas.
    Mais dans ton code il te manque le point virgule en fin de chaîne.
    Essaye avec Provider = PROVIDER_SOURCE + mMdbFile + ";";
    Et surtout vérifie bien que la chaîne correspond bien, qu'il n'y a pas un point en moins une lettre doublée etc.
    Je ne suis pas développeur C++ mais Delphi donc je ne peux pas essayer le code mais par contre il est certain que sans le ";" à la fin de ta chaîne il y aura une erreur.
    Le code Delphi équivalent est le suivant:

    procedure CreateMdbFile(mMdbFile: string);
    const
    PROVIDER_SOURCE = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='; // Les chaînes sont encadrées par des ' et non des " en Delphi
    var
    vADO: oleVariant //déclaration préalable des variables
    Provider: string; // string = UnicodeString sous Delphi
    begin // équivalent aux { du C
    try // instruction try finally pour être sûr d'exécuter vADO := Unassigned
    Provider := PROVIDER_SOURCE + mMdbFile + ';';
    vADO := CreateOleObject('ADOX.Catalog');
    vADO.Create(Provider); //Inutile sous Delphi de refaire une conversion explicite en chaîne
    finally
    vADO := Unassigned; // libère l'objet
    end;
    end; // équivalent au } du C

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 63
    Par défaut
    Merci pour ces réponses et effectivement en passant mon AnsiString en UnicodeString cela "fonctionne". Du moins je n'ai plus la même erreur!! LOL
    Merci a vous pour vos réponses !!
    J'avais pourtant utilisé la fonction rechercher j'ai aps du taper les bons mots.

    Merci beaucoup.

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

Discussions similaires

  1. Creation mdb multi utilisateurs
    Par colorid dans le forum Bases de données
    Réponses: 4
    Dernier message: 24/07/2011, 15h09
  2. [Débutant] creation fichier vide
    Par nanath02 dans le forum Langage
    Réponses: 2
    Dernier message: 18/09/2007, 11h09
  3. Réponses: 3
    Dernier message: 27/06/2007, 17h13
  4. Creation d'une DB.mdb en vbs
    Par guile60 dans le forum VBScript
    Réponses: 3
    Dernier message: 26/06/2007, 05h22
  5. Creation d'une BD paradoxe 7 (.db) a partir d'Access (.mdb)
    Par melles dans le forum Bases de données
    Réponses: 8
    Dernier message: 14/04/2007, 22h37

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