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 :

Difficulte pour ecrire une chaine de connection a une base de donnees


Sujet :

C++Builder

  1. #1
    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 Difficulte pour ecrire une chaine de connection a une base de donnees
    Bonjours
    Je recherche comment programmer une base de donnees et je dois passer une chaine de connection tres longue, apres recherche cette chaine est tronquee, je ne parviens pas a l'ecrire correctement, si quelqu'un avait une idee
    voici la chaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String Connection = "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=C:\maBdd.mdb;Mode=Share Deny Write;Extended Properties=""""",";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=5;Jet OLEDB:Databa","se Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="""";Je","t OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Com","pact Without Replica Repair=False;Jet OLEDB:SFP=False";

  2. #2
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Points : 446
    Points
    446
    Par défaut
    Il faudrait protéger les guillemets avec des backslash et pas en les doublant.

    Il faut aussi protéger le backslash du path de ta database avec un autre backslash.

    Finalement, ne mets pas le OLEDB au début si tu utilises Jet.

    Essaye la syntaxe suivante:

    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
      connect->ConnectionString
          ="Provider=Microsoft.Jet.OLEDB.4.0;"
           "Password=\"\";"
           "User ID=Admin;"
           "Data Source=C:\\maBdd.mdb;"
           "Mode=Share Deny Write;"
           "Extended Properties=\"\";"
           "Jet OLEDB:System database=\"\";"
           "Jet OLEDB:Registry Path=\"\";"
           "Jet OLEDB:Database Password=\"\";"
           "Jet OLEDB:Engine Type=5;"
           "Jet OLEDB:Database Locking Mode=0;"
           "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";
     
      connect->Open();

  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
    Merci pour ta reponse Patrick Seuret
    J'ai juste fait une petite correction sinon l'ecriture est exellente
    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
     
    // chaine de connection a la base Access
    String provider = "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;"
           "Password=\"\";" // soit "Password=" + QuotedStr("") + ";"
           "User ID=Admin;"
           "Data Source=" + WideString(filename) + ";"
           "Mode=Share Deny Write;"
           "Extended Properties=\"\";"
           "Jet OLEDB:System database=\"\";"
           "Jet OLEDB:Registry Path=\"\";"
           "Jet OLEDB:Database Password=\"\";"
           "Jet OLEDB:Engine Type=5;"
           "Jet OLEDB:Database Locking Mode=0;"
           "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";
    J'utilisais " QuotedStr("") " mon erreur etait de le doubler
    J'ai un dernier petit soucis je fais ceci pour enlever l'extension d'un fichier afin de modifier sons nom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // acquisition de chemin de la base
    if(OpenDialog1->Execute())
    {
    filename = OpenDialog1->FileName;
    }
    // changement nom
    String name = ExtractFileName(filename);
    int longueur = name.Length();
    name = LeftStr(name, longueur - 4);
    name = name + "_1";
    Je pense qu'il y a une fonction qui recupere le nom de fichier sans l'extention ici " .mdb ", mais je n'arrive plus a la retrouver

    Des ce dernier probleme regle je posterais un code qui permet d'ouvrir une table Access sous OleExcel

  4. #4
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Points : 446
    Points
    446
    Par défaut
    Essaye avec "ChangeFileExt" en mettant une extension vide...

  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
    Points : 3 766
    Points
    3 766
    Par défaut
    Merci
    voici le code OleExcel qui ouvre une base de donnee Access sous OleExcel, sur la Form deux Buttons un OpenDialog
    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
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include <utilcls.h>
    // #include <ComObj.hpp> // a ajouter dans certains cas
    #include "Unit1.h"
    #include "StrUtils.hpp"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma link "ColorBtn"
    #pragma resource "*.dfm"
    TForm1 *Form1;
    // les Variants doivent etre declares dans le .h
    // ils ne sont place la que par commodite pour le test
    Variant vMSExcel, vXLWorkbook, vXLWorkbooks, vWorksheet;
    Variant vDestination, vConnection;
    Variant vActiveWorkbook, vActiveSheet;
    //Variant vFileName;
    String filename, NomFichier, name;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    // acquisition de chemin de la base
    if(OpenDialog1->Execute())
    {
    filename = OpenDialog1->FileName;
    }
    // changement nom
    name = ExtractFileName(filename);
    name = ChangeFileExt(name,"_1");
    vMSExcel = Variant::CreateObject("Excel.Application");
    vMSExcel.OlePropertySet("Visible", true);
    vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
    vXLWorkbook = vXLWorkbooks.OleFunction("Add");
    vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", 1);
    // on selectionne la Feuil1
    vWorksheet.OleProcedure("Select");
    vActiveWorkbook = vMSExcel.OlePropertyGet("ActiveWorkbook");
    vActiveSheet = vActiveWorkbook.OlePropertyGet("ActiveSheet");
    // chaine de connection a la base Access
    String provider = "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;"
           "Password=\"\";" // soit "Password=" + QuotedStr("") + ";"
           "User ID=Admin;"
           "Data Source=" + WideString(filename) + ";"
           "Mode=Share Deny Write;"
           "Extended Properties=\"\";"
           "Jet OLEDB:System database=\"\";"
           "Jet OLEDB:Registry Path=\"\";"
           "Jet OLEDB:Database Password=\"\";"
           "Jet OLEDB:Engine Type=5;"
           "Jet OLEDB:Database Locking Mode=0;"
           "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";
    vDestination = vActiveSheet.OlePropertyGet("Range","A1");
    vConnection = vActiveSheet.OlePropertyGet("QueryTables").OleFunction("Add", (WideString(provider)),vDestination);
    vConnection.OlePropertySet("CommandType", 3); // constante Excel "xlCmdTable = 3" lecture ecriture
    vConnection.OlePropertySet("CommandText", "Etudiant");  // nom de la table
    vConnection.OlePropertySet("Name", WideString(name));
    vConnection.OlePropertySet("FieldNames", true); // on nomme les champs
    vConnection.OlePropertySet("RowNumbers", false); // numero de ligne des noms de champs
    vConnection.OlePropertySet("FillAdjacentFormulas", false); // les formules situees a droite ne sont pas mise a jour a chaque mise a jour de la table
    vConnection.OlePropertySet("PreserveFormatting", true);
    vConnection.OlePropertySet("RefreshOnFileOpen", false); // pas de mise a jour du cache du tableau
    vConnection.OlePropertySet("BackgroundQuery", true); // requete execute en arriere plan
    /*
    XlCellInsertionMode peut être l'une de ces constantes XlCellInsertionMode.
    xlInsertDeleteCells. Des lignes partielles sont insérées ou supprimées pour correspondre au nombre exact de lignes requises pour le nouveau jeu d'enregistrements. 
    xlOverwriteCells. Aucune nouvelle cellule ou ligne n'est ajoutée à la feuille de calcul. Les données contenues dans les cellules autour sont supprimées pour recevoir le surplus éventuel.
    xlInsertEntireRows. Des lignes entières sont insérées, si nécessaire, pour recevoir le surplus éventuel. Aucune cellule ni aucune ligne n'est supprimée de la feuille de calcul.
    */
    vConnection.OlePropertySet("RefreshStyle", 1); // constante Excel "xlInsertDeleteCells = 1"
    vConnection.OlePropertySet("SavePassword", false); // supprimer le mon de passe a chaque enregistrement
    vConnection.OlePropertySet("SaveData", true);
    vConnection.OlePropertySet("AdjustColumnWidth", true); // ajustement automatique de la largeur des colonnes
    vConnection.OlePropertySet("RefreshPeriod", 0); // rafraichissement periodique desactive
    vConnection.OlePropertySet("PreserveColumnInfo", true);
    vConnection.OlePropertySet("SourceDataFile", WideString(filename));
    vConnection.OleProcedure("Refresh", false);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    vMSExcel.OleFunction("Quit");
    vMSExcel = Unassigned;
    }
    //---------------------------------------------------------------------------

  6. #6
    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 Charger une table triee Access avec OleExcel
    Voici un deuxieme code pour charger une table Access sous OleExcel, avec affichage dans un ordre specifie, ces deux codes sont interressants, je pense que cela va etre utile si l'on veut piloter des Mailings Word/Excel, il y a des similitudes
    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
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include <utilcls.h>
    // #include <ComObj.hpp> // a ajouter dans certains cas
    #include "Unit1.h"
    #include "StrUtils.hpp"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    // les Variants doivent etre declares dans le .h
    // ils ne sont place la que par commodite pour le test
    Variant vMSExcel, vXLWorkbook, vXLWorkbooks, vWorksheet;
    Variant vDestination, vConnection;
    Variant vActiveWorkbook, vActiveSheet;
    //Variant vFileName;
    String filename, NomFichier;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    // acquisition de chemin de la base
    if(OpenDialog1->Execute())
    {
    filename = OpenDialog1->FileName;
    }
    vMSExcel = Variant::CreateObject("Excel.Application");
    vMSExcel.OlePropertySet("Visible", true);
    vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
    vXLWorkbook = vXLWorkbooks.OleFunction("Add");
    vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", 1);
    // on selectionne la Feuil1
    vWorksheet.OleProcedure("Select");
    vActiveWorkbook = vMSExcel.OlePropertyGet("ActiveWorkbook");
    vActiveSheet = vActiveWorkbook.OlePropertyGet("ActiveSheet");
    // chaine de connection a la base Access
    String provider = "ODBC;DSN=MS Access Database;"
    //       "DBQ=C:\maBddessai.mdb;"
           "DBQ=" + WideString(filename) + ";" // " + WideString(filename) + "
           "DefaultDir=C:;DriverId=25;FIL=MS Access;"
           "MaxBufferSize=2048;PageTimeout=5;";
    vDestination = vActiveSheet.OlePropertyGet("Range", "A1");
    // la table est triee par prenom, nom, id, option
    String requette = "SELECT Etudiant.id, Etudiant.nom, Etudiant.prenom, Etudiant.option "
               "FROM " + WideString(filename) + ".Etudiant Etudiant "
               "ORDER BY "
               "Etudiant.prenom, Etudiant.nom, Etudiant.id, Etudiant.option";
    vConnection = vActiveSheet.OlePropertyGet("QueryTables").OleFunction("Add", WideString(provider), vDestination, WideString(requette));
    vConnection.OlePropertySet("Name", "Lancer la requête à partir de MS Access Database");
    vConnection.OlePropertySet("FieldNames", true);
    vConnection.OlePropertySet("RowNumbers", false);
    vConnection.OlePropertySet("FillAdjacentFormulas", false);
    vConnection.OlePropertySet("PreserveFormatting", true);
    vConnection.OlePropertySet("RefreshOnFileOpen", false);
    vConnection.OlePropertySet("BackgroundQuery", true);
    vConnection.OlePropertySet("RefreshStyle", 1); // xlInsertDeleteCells = 1 constante Excel
    vConnection.OlePropertySet("SavePassword", false);
    vConnection.OlePropertySet("SaveData", true);
    vConnection.OlePropertySet("AdjustColumnWidth", true);
    vConnection.OlePropertySet("RefreshPeriod", 0);
    vConnection.OlePropertySet("PreserveColumnInfo", true);
    vConnection.OleFunction("Refresh");
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    vMSExcel.OleFunction("Quit");
    vMSExcel = Unassigned;
    }
    //---------------------------------------------------------------------------

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

Discussions similaires

  1. [VB6]ecrire une chaine de byte dans la base de registre
    Par tomnie dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 17/12/2008, 10h50
  2. Réponses: 2
    Dernier message: 30/05/2008, 11h56
  3. erreur pour une insertion d'une chaine de caractere dans une cellule
    Par amel95140 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/10/2006, 09h09
  4. tester une chaine de connection
    Par graphicsxp dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/05/2005, 13h32
  5. [Struts]Ecrire un html:link à partir d'une chaine
    Par cowa dans le forum Struts 1
    Réponses: 5
    Dernier message: 12/05/2004, 17h10

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