Connexion à une base access et/ou création de base de données access en vb.net / vb 2005

Contenu du snippet

Petit code pour établir une connexion à la base de donnée (appellée à chaque requête pour éviter de laisser la connexion ouverte)
Si jamais le fichier prévu à l'origine (ici TVA.mdb) est absent, on le recrée pour éviter un plantage.

Etant donné que j'ai eu du mal à trouver ce dont j'avais besoin sur le net, je me suis dis que ce bout de code pourrait être utile à d'autres.

On y voit aussi comment récupérer et supprimer les processus zombies.

Il est pas mal commenté, mais si jamais vous désirez d'avantage de précision n'hésitez pas à poser des questions

MàJ : Pour la ligne 37 "Dim appAccess As Access.Application" il faut au préalable charger la librairie "Microsoft Office Access Object X.0" (X = version)
Sinon l'objet Access n'est pas reconnu.

Source / Exemple :


' Initialisation de la base de données et connexion
    Private Function Connexion_MDB() As OleDb.OleDbConnection

        ' tableau contenant l'ensemble des processus excel
        Dim monproc() As Process

        ' une instance parmis le tableau précédent
        Dim instance As Process

        ' création de l'objet Connection
        Dim connex As New OleDb.OleDbConnection
        ' initialisation de la chaîne de connexion au provider
        connex.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                            "Data Source= " & CurDir() & _
                            "\" & "TVA.mdb;"

        ' on tente un établissement de la connection
        Try
            connex.Open()
        Catch ex As Exception
            ' si jamais ça ne passe pas, c'est que la base est corrompue ou absente, on la recrée

            ' Si le fichier existe, c'est qu'il est corrompu, donc on l'efface
            If File.Exists(CurDir() & "\TVA.mdb") Then
                ' On essaie de supprimer le fichier TVA.mdb
                Try
                    ' mettre ses attributs à normal pour pouvoir l'effacer
                    File.SetAttributes(CurDir() & "\TVA.mdb", FileAttributes.Normal)
                    File.Delete(CurDir() & "\TVA.mdb")
                Catch err As Exception
                    ' si jamais on arrive pas à supprimer le fichier, on prévient l'utilisateur
                    MsgBox("Supression du fichier TVA.mdb échouée: " & Chr(13) & err.ToString(), MsgBoxStyle.Exclamation, "Erreur")
                End Try
            End If

            Dim appAccess As Access.Application

            ' on crée un objet de type BDD Access
            appAccess = CreateObject("Access.Application.11")

            ' on crée une nouvelle base de nom TVA.mdb
            appAccess.NewCurrentDatabase(CurDir() & "\TVA.mdb")

            ' comme le programme ne se ferme pas bien (j'ai du raté une instruction pour fermer l'application)
            ' on met fin aux processus MSACCESS en background
            monproc = Process.GetProcessesByName("MSACCESS")

            ' Si la liste n'est pas vide, on ferme toutes les applis concernées
            If monproc.Length <> 0 Then
                For Each instance In monproc
                    ' si l'instance ne porte pas de nom, elle est en background et zombie, donc on met fin au processus
                    If instance.MainWindowTitle = "" Then
                        instance.Kill()
                    End If
                Next
            End If

            ' on essaie de connecter à la base que l'on viens de créer
            Try
                connex.Open()
            Catch ex2 As Exception

                ' si ça échoue encore, on quitte directement le programme
                ' on quitte par un kill pour éviter de passer par la confirmation de sortie du programme (le handle closing() )
                MsgBox("Erreur : " & ex2.ToString)

                MsgBox("Impossible de recréer la base de donnée." & Chr(13) & "L'application va se terminer !", MsgBoxStyle.Critical, "Erreur critique !")

                monproc = Process.GetProcessesByName("FactureSoft")

                ' Si la liste n'est pas vide, on ferme toutes les applis concernées
                If monproc.Length <> 0 Then
                    For Each instance In monproc
                        MsgBox(instance.Id.ToString)
                        instance.Kill()
                    Next
                End If
            End Try

            MsgBox("Création de la table, la base de données originale n'a pas été trouvée", MsgBoxStyle.Information, "BDD manquante")

            ' Création d'un objet commande
            Dim cmd As New OleDb.OleDbCommand

            ' on récupère la connexion dans l'objet
            cmd.Connection() = connex

            ' nouvelle requête de création de table, là c'est du SQL Access
            cmd.CommandText = "CREATE TABLE Facture(ID_Facture AUTOINCREMENT CONSTRAINT PKEY Primary Key, Fact_Montant_HT FLOAT, Fact_TVA FLOAT, Fact_Montant_TTC FLOAT, Fact_Four INTEGER, Fact_Mois INTEGER)"

            ' on lance la requête
            cmd.ExecuteNonQuery()

            ' on prend les même et on recommence pour les autres tables...
            cmd.CommandText = "CREATE TABLE Fournisseur(ID_Fournisseur AUTOINCREMENT CONSTRAINT PKEY Primary Key, Four_Nom VARCHAR(100), Four_Adresse VARCHAR(200))"

            cmd.ExecuteNonQuery()

            cmd.CommandText = "CREATE TABLE Mois(ID_Mois AUTOINCREMENT CONSTRAINT PKEY Primary Key, Mois_HT VARCHAR(30))"

            cmd.ExecuteNonQuery()

            ' Pour fermer la connexion à la base on fait juste un connex.Close(), mais ici on doit garder la connexion ouverte

        End Try

        Return connex

    End Function

Conclusion :


Ce bout de code fait partie d'une application de gestion de facture en VB.Net.
L'application n'est pas particulièrement compliquée, mais il y a pas mal de fonctionnalitées différentes et aussi aps mal de contrôle / gestion d'erreur.
On utilise une base de données Access (comme vous pouvez le voir) et une impression par export Excel en invisible.

Si ça vous intéresse, faites moi signe.

Merci à la communauté de dev qui publient leurs sources, c'est toujours super utile.
Ça permet en général d'éviter de réinventer la roue tout les matins ;-)

A vérifier : si la base exite, qu'on peut s'y connecter, mais que ce n'est aps la bonne base (pas les bon champs etc.)
A update si j'ai le temps ;-)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.