Utiliser un module Access via VB.NET [Résolu]

Signaler
Messages postés
110
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
12 mai 2021
-
 ShaeGal -
Bonjour à toutes et tous,

J'ai créé un module paramétré dans Access (VBA) et j'aimerai pouvoir l'utiliser/piloter via VB.NET.

Quelqu'un aurait-il une idée?

Merci par avance.
--

2 réponses

Messages postés
1
Date d'inscription
vendredi 10 juin 2016
Statut
Membre
Dernière intervention
12 septembre 2017

Sois plus claire quel module ? Qui permet de ?

RS
Bonjour ohmProd,

J'ai une BDD Access dans laquelle j'ai créé un état lié à une requête au sein même de la BDD.

Nous sommes une bonne dizaine à devoir accéder à cette BDD et le coût d'Access étant assez élevé, la direction à décidé que je serait le seul à l'avoir, d'où l'idée de passer par une application tierce que je développe sous VB Express 2012 (gratuit).

Donc, mon objectif était de pouvoir imprimer l'état (report) via VB grace à la commande DoCmd.OpenReport, mais je me suis heurté à l'impossibilité d'y passer un paramètre.

Après avoir posé la question ici même, j'ai continué mes recherches et j'ai trouvé un moyen détourné de passer mes paramètres dans la requête: passer par un module Access. Mais ils ne passaient toujours pas.
J'ai fini par trouver le moyen d'y arriver: réécrire la requête en dur dans Access par VB. Et là, tout fonctionne comme je le souhaitais.

Voici les codes.
Dans Access:
Sub ApercuAvancements(NumDos)
  req = "SELECT <champsl> from <table> WHERE ID_DOSSIERS = NumDos;"
  Set rq = CurrentDb.QueryDefs("requête Access")
  
  rq.SQL = Replace(req, "NumDos", NumDos)
  rq.Close
  CurrentDb.QueryDefs.Refresh
End Sub


Dans VB:
Dim appAccess As Object = CreateObject("Access.Application")
    Try
      appAccess.OpenCurrentDatabase(PathDBB)
      appAccess.Run("ApercuAvancements", CInt(_IdDossier))
      appAccess.DoCmd.OpenReport("Nom de l'état à imprimer")
      appAccess.visible = True
    Catch ex As Exception
      MsgBox(ex.Message, MsgBoxStyle.Exclamation)
    Finally
      appAccess.Quit()
      appAccess = Nothing
    End Try


Voilà l'astuce trouvée et qui fonctionne bien.

Je met résolu mais si quelqu'un connaît une façon plus simple et élégante, qu'il n'hésite pas à poster.

Merci.