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

VB.NET Discussion :

BDD Access Enregistrer sous


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Par défaut BDD Access Enregistrer sous
    Bonjour à tous,

    Je suis débutant en VBA sous VISUAL STUDIO 2008.

    Je souhaite développer un programme qui alimente une base de données Access.

    Dans la page d'accueil il me faut deux boutons:

    - l'un pour: ouvrir une base de donnée modele qui sera intégrée dans l'application (avec toutes les tables et tous les champs),
    puis demander à l'utilisateurs un nom de fichier avec un chemin dans le but d'"enregistrer sous" la nouvelle base de donnée.
    Pour cela j'ai le début de code suivant mais je ne sais pas comment utiliser SaveFileDialog

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            Dim result As Boolean = False
            Dim dbe As New DBEngine
            Dim db As Database
     
            Try
                db = dbe.OpenDatabase("c:\Program Files\MonProg\MonDossier1\MonModeledeBDD.mdb", dbLangGeneral)
                If Not (db Is Nothing) Then result = True
            Catch ex As Exception : MsgBox(ex.Message)
     
            Finally : If Not (db Is Nothing) Then db.Close()
     
            End Try
    - l'autre pour: ouvrir une base existante et continuer son alimentation
    j'ai developpé le bout de code suivant mais je n'arrive pas à récupérer MonNomBase.
    J'obtiens c:\Program Files\MonProg\MonDossier2\MonNomBase
    et je veux seulement MonNomBase (la même chose donc mais sans le chemin complet)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            OFD_Baseexist.Title = "Choisissez un fichier"
            OFD_Baseexist.FilterIndex = 1
            OFD_Baseexist.InitialDirectory = "c:\Program Files\MonProg\MonDossier2\"
            OFD_Baseexist.ShowDialog()
     
            'Message affiché en fonction de la séclection de l'utilisateur
            If OFD_Baseexist.FileName <> "" Then TextBox1.Text = OFD_Baseexist.FileName Else TextBox1.Text = "Vous n'avez sélectionné aucun fichier."
            NomBase = OFD_Baseexist.FileName
    Tout cela est sans doute trés simple, mais je débute.

    Merci à tous

  2. #2
    Membre habitué
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Par défaut
    Pour ma deuxième question (mon problème de NomBase et chemin) j'ai trouvé la réponse.
    Il faut mettre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomBase = Path.GetFileName(OFD_Baseexist.FileName) 'donne le nom du fichier sans chemin.
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomBase = OFD_Baseexist.FileName
    Sans oublier en déclaration

  3. #3
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut Creer une BD access
    bonjour nverder

    comme tu es debutant en vb.net ,mets toi à niveau c'est preferable.
    vb.net dispose de methodes puissantes :
    -il permet d'incorporer ta bd comme une resource dans l'executable et puis à l'execution de la reecrire chez l'utilisateur.
    (comme en vb6 quand on incorpore un icone ou une image dans l'executable).
    Oublie dao.
    Voici comment on fait:
    -on incorpore le fichier modele MDB comme resource dans le projet.
    -à l'execution en memoire on la recupere et on l'ecrit "octet par octet"
    -dans notre exemple regarde dans dossier debug pour retrouver ta nouvelle BD.
    -chez l'utilisateur il la trouvere dans dossier courant de l'application(currentdirectory)
    Suis instructions de cet exemple de code qui comporte une fenetre,2 boutons et un textbox:
    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
     
    '---------------------------------------------------------------------------
    'Creer une BD Modele MS Access  en utilisant System.Reflection
    '---------------------------------------------------------------------------
    'Methode shared AssemblyGetManifestResourceStream("namespace.nomfichier.ext"
    '---------------------------------------------------------------------------
    'NOTA-BENE:pour incorporer le fichier MDB Modele faire
    '1/recuperer la chaine namespace dans projet->proprietes->application
    '->espace de nom racine
    '2/Proprietes Projet->Resources->Ajouter Fichier...
    '3/changer extension du ficher access en n'importe quoi(pour eviter interaction avec concepteur dataset ModeleMDB.mdb =>ModeleMDB.nnn )
    '4/selectionner fichier resource et dans Fen proprietes
    '- action de generation choisir =>resource incoporeee Imports System
    Imports System.Windows
    Imports System.Reflection
    Imports System.IO
     
    Public Class frmResourceMDB
        'Nom Dossier application
        Dim Dossier As String = Directory.GetCurrentDirectory
        'Nom Fichier à creer
        Dim nomFichier As String = "nouvBD.mdb"
        '---------------------------------------------------------------------------
        'Liste les namespaces courants de appli
        'verifier eventuellement le namespace exact de l'appli
        '---------------------------------------------------------------------------
        Private Sub btnAfficheNameSpace_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAfficheNameSpace.Click
            Dim noms() As String = Me.GetType().Assembly.GetManifestResourceNames()
            For Each nom As String In noms
                TextBox1.Text = TextBox1.Text & nom & vbCrLf
            Next
        End Sub
        '---------------------------------------------------------------------------
        '-------------------------Cree le Fichier MDB-------------------------------
        '---------------------------------------------------------------------------
        Private Sub btnCreeMDB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCreeMDB.Click
            Dim objStream As Stream
            Dim objAssembly As Assembly
            Dim objFileStream As FileStream
            'Tableau octets pour recopie "octets par octets"
            Dim OctetResources() As Byte = New Byte() {}
            'Obtient Assembly de appli
            objAssembly = Assembly.GetExecutingAssembly
            objStream = objAssembly.GetManifestResourceStream("WinResourcesMDB.ModeleMDB.nnn")
            If objStream IsNot Nothing Then
                MessageBox.Show(objStream.Length.ToString)
            End If
     
            ReDim OctetResources(objStream.Length)
            objStream.Read(OctetResources, 0, objStream.Length)
            objFileStream = New FileStream(Dossier & "\" & nomFichier, FileMode.Create)
            objFileStream.Write(OctetResources, 0, objStream.Length)
     
        End Sub
     
     
    End Class
    bon code..........................

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 291
    Par défaut
    Bonjour,

    Une autre façon de faire est de créer la base de donnée directement via le code via ADOX. Un exemple de classe générique pour créer des base access 2007.

    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
    Imports ADODB
    Imports ADOX
    Public Class BaseAccess
     
        Private mNomBase As String
        Private mCat As ADOX.Catalog
     
        Public ReadOnly Property Cat() As ADOX.Catalog
            Get
                Return mCat
            End Get
     
        End Property
     
        Public Property NomBase() As String
            Get
                Return mNomBase
            End Get
            Set(ByVal value As String)
                mNomBase = value
            End Set
        End Property
     
     
        Private mChemin As String
        Public Property Chemin() As String
            Get
                Return mChemin
            End Get
            Set(ByVal value As String)
                If Mid$(value, Len(value), 1) <> "\" Then
                    value = value & "\"
                End If
                mChemin = value
            End Set
        End Property
        'existence de la base de donnée
        Public Function Exist() As Boolean
            Dim ex As Boolean = My.Computer.FileSystem.FileExists(mChemin & mNomBase & ".accdb")
            Return ex
        End Function
        'ouverture de la base
        Public Sub New(ByVal Nom As String, ByVal chemin As String)
            ' affectation chemin et nombase
            mNomBase = Nom
            Me.Chemin = chemin
            ' creation de l'objet permanent catalogue
            mCat = New ADOX.Catalog
     
            ' si la base n'existe pas création
     
            If Not Exist() Then
                On Error Resume Next
                mCat = mCat.Create("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & mChemin & mNomBase & ".accdb;")
                On Error GoTo 0
            End If
     
            'affectation de la connexion à la base pour l'objet catalogue
            Dim cnn As New ADODB.Connection
            cnn.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & mChemin & mNomBase & ".accdb;")
            mCat.ActiveConnection = cnn
     
        End Sub
        Public Sub CreationTableID(ByVal nomtable As String)
            CreationTable(nomtable, mCat)
        End Sub
        Public Sub CreationTableJointure(ByVal nomtable As String, ByVal nomtableprimaire As String)
            CreationTable(nomtable, mCat, nomtableprimaire)
        End Sub
     
        Public Sub CreationTableJointurenn(ByVal nomtable1 As String, ByVal nomtable2 As String)
            CreationTable(nomtable1, nomtable2, mCat)
     
        End Sub
     
        ' creation table de base affectation auto de la clef primaire ID_nomdelatable
        Private Sub CreationTable(ByVal nom As String, ByVal cat As ADOX.Catalog)
            Dim table As New ADOX.Table
            table.Name = nom
            Dim champs As New ADOX.Column
            champs.Name = "ID_" & nom
            champs.Type = ADOX.DataTypeEnum.adInteger
            champs.ParentCatalog = cat
            champs.Properties("Autoincrement").Value = True
            champs.Properties("Seed").Attributes = 1
            champs.Properties("Increment").Attributes = 1
            table.Columns.Append(champs)
            Dim clef As New ADOX.Key
            clef.Type = KeyTypeEnum.adKeyPrimary
            clef.Name = "clefprim"
            clef.Columns.Append("ID_" & nom)
            table.Keys.Append(clef)
            cat.Tables.Append(table)
        End Sub
        'surcharge création d'une table liée à la table ptrname
        'la table ptrname doit existante ptrname est la table coté 1 de la relation
        Private Sub CreationTable(ByVal nom As String, ByVal cat As ADOX.Catalog, ByVal PtrName As String)
            Dim table As New ADOX.Table
            table.Name = nom
            Dim champs As New ADOX.Column
            champs.Name = "ID_" & nom
            champs.Type = ADOX.DataTypeEnum.adInteger
            champs.ParentCatalog = cat
            champs.Properties("Autoincrement").Value = True
            champs.Properties("Seed").Attributes = 1
            champs.Properties("Increment").Attributes = 1
            table.Columns.Append(champs)
     
            Dim clef As New ADOX.Key
            clef.Type = KeyTypeEnum.adKeyPrimary
            clef.Name = "clefprim"
            clef.Columns.Append("ID_" & nom)
            table.Keys.Append(clef)
     
            champs = New ADOX.Column
            champs.Name = "Ptr_" & PtrName
            champs.Type = ADOX.DataTypeEnum.adInteger
     
            table.Columns.Append(champs)
     
            'champs.ParentCatalog = cat
            clef = New ADOX.Key
            clef.Type = KeyTypeEnum.adKeyForeign
            clef.Name = "clef_" & PtrName & nom
            clef.RelatedTable = PtrName
            clef.Columns.Append("Ptr_" & PtrName)
            clef.Columns("Ptr_" & PtrName).RelatedColumn = "ID_" & PtrName
            table.Keys.Append(clef)
     
            cat.Tables.Append(table)
        End Sub
     
        'surcharge création d'une table de jointure pour liaison n-n
        'fournir le nom des deux tables de chaque coté de la relation
        Private Sub CreationTable(ByVal nom1 As String, ByVal nom2 As String, ByVal cat As ADOX.Catalog)
            Dim table As New ADOX.Table
            table.Name = "Joint" & nom1 & nom2
            Dim champs As New ADOX.Column
            champs.Name = "Ptr_" & nom1
            champs.Type = ADOX.DataTypeEnum.adInteger
            table.Columns.Append(champs)
            champs = New ADOX.Column
            champs.Name = "Ptr_" & nom2
            champs.Type = ADOX.DataTypeEnum.adInteger
            table.Columns.Append(champs)
            Dim clef = New ADOX.Key
            clef.Type = KeyTypeEnum.adKeyForeign
            clef.Name = "clef_" & nom1 & "joint" & nom1 & nom2
            clef.RelatedTable = nom1
            clef.Columns.Append("Ptr_" & nom1)
            clef.Columns("Ptr_" & nom1).RelatedColumn = "ID_" & nom1
            table.Keys.Append(clef)
            clef = New ADOX.Key
            clef.Type = KeyTypeEnum.adKeyForeign
            clef.Name = "clef_" & nom2 & "joint" & nom1 & nom2
            clef.RelatedTable = nom2
            clef.Columns.Append("Ptr_" & nom2)
            clef.Columns("Ptr_" & nom2).RelatedColumn = "ID_" & nom2
            table.Keys.Append(clef)
            cat.Tables.Append(table)
        End Sub
     
        Protected Overrides Sub Finalize()
            Deconnect()
            MyBase.Finalize()
        End Sub
    End Class

  5. #5
    Membre habitué
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Par défaut Solution
    Merci pour vos réponses.
    Après les avoir parcouru, j'ai eu un sacré mal de tête.

    Mais puisque j'ai fini par trouver la solution je vous en fais part.

    Je rappelle le but:
    Disposer d'une base de donnée modèle dans mon application.
    Ouvrir une base de donnée puis demander à l'utilisateur un nom de fichier avec un chemin dans le but d"enregistrer sous" la nouvelle base de donnée.
    Je souhaitais conserver la BDD vierge pour une autre utilisation (en tant que modèle donc) -> mon message initial n'était peut-être pas clair.

    Voici donc la ligne de code correspondante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
    NomBase = InputBox("Donner un nom à votre projet?") & ".mdb"
     
    My.Computer.FileSystem.CopyFile _
    ("c:\Program Files\MonProg\MonDossier1\MonModeledeBDD.mdb", _
    "c:\Program Files\MonProg\MonDossier2\" & NomBase, _
     FileIO.UIOption.AllDialogs, FileIO.UICancelOption.DoNothing)
     
    End Sub
    Ainsi mon fichier de travail est enregistré dans MonDossier2 et prend le nom NomBase choisi par l'utilisateur

    C'était pas difficile, mais j'avais prévenu je suis débutant.

    Encore merci à Geo2A et MABROUKI pour avoir pris du temps sur mon projet
    Et promis je continue de bosser, mais dans mon cas ce n'est pas une mise à niveau mais plutôt une mise à nouveau.

    Nverder

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

Discussions similaires

  1. Ouverture BDD Access 2000 sous Access 2003
    Par Expensive dans le forum Access
    Réponses: 5
    Dernier message: 10/02/2007, 11h00
  2. [VB6] Supprimer un enregistrement bdd access
    Par floran30 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 19/06/2006, 15h24
  3. Réponses: 2
    Dernier message: 12/06/2006, 09h55
  4. [VBA-E]Ouvrir une BDD access sous Excel
    Par toniox dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 02/05/2006, 16h45
  5. Accés BDD Access sous MinGW Studio
    Par pottiez dans le forum C++
    Réponses: 1
    Dernier message: 01/12/2005, 12h47

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