L'appel a db.close ne ferme pas l'application MS ACCESS
Bonjour à tous,
Je pose ici ma première question, j'espère être au bon endroit.
Voici ma problématique:
Sous Excel 2010, que j'utilise comme GUI pour accéder à une base MS Access sur un réseau, j'ai écrit le code ci-dessous qui fonctionne très bien:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Function DernierNumeroAuto() As Long
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim temp As String
Set db = DBEngine.OpenDatabase(Workbooks("SAVPRO.xlsm").Sheets("Paramètres").Range("C4").Value & "SAVPRO.accdb") 'Etablissement de la connection avec la base access SAVPRO
temp = UCase(Environ("username"))
db.Execute ("INSERT INTO [SAVP_Data] (RSV_BDD, USER) VALUES ('RESERVE', """ & temp & """)") ' Ecriture et réservation de la fiche suivante avec N° de fiche
Set rs = db.OpenRecordset("SELECT @@identity AS NewID FROM SAVP_Data")
Numfiche = CLng(rs.Fields("NewID")) ' ATTENTION LES DEUX NUMEROS SERONT A CONCORDER DANS LA NOVUELLE BASE
FicheID = Numfiche
Workbooks("SAVPRO.xlsm").Sheets("Fiche").Range("ID").Value = Numfiche
'rs.Close ' On ferme !
db.Close ' On ferme !
Set rs = Nothing
Set db = Nothing
End Function |
En mode pas à pas, dans le gestionnaire des tâches, on voit bien MS ACCESS s'ouvrir puis se fermer avec l'exécution de db.close
Mais pour des raisons que je ne comprends pas, le code ci-dessous, que j'ai aussi écrit, ne ferme pas l’application MS ACCESS lors de l'exécution de db.close.
Ce qui rends mon application instable par la suite lors d'un prochain accès à la bdd notament.
Code:
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
| Public Sub RechercherDsBase(ByVal Selection As String, ByVal Champs As String, Optional ByVal MaDate As String)
Dim db As DAO.Database ' ou déclarer Dim db AsDatabase ne change rien
Dim rs As DAO.Recordset
Dim strSQL As String
Dim iCols As Integer
strSQL = "SELECT SAVP_Data.[N° FICHE], SAVP_Data.[DATE D'ENTREE], SAVP_Data.[Soldé], SAVP_Data.[REF PRODUIT], SAVP_Data.[N° SERIE MP], SAVP_Data.[N° LOT], " & _
"SAVP_Data.[CODE CLIENT], SAVP_Data.[Nom du CLIENT], SAVP_Data.[Ref_Pdt_Client], SAVP_Data.[N° SERIE CLIENT], " & _
"SAVP_Data.[DOC CLIENT], SAVP_Data.[RAPPORT QUALITE CLIENT], SAVP_Data.[D_Pdt_Rep], SAVP_Data.[Date Transmis Expedition] " & _
"FROM SAVP_Data "
Select Case Selection ' Complétion de la commande SQL
Case "Référence Eaton" ' OptionButton01
strSQL = strSQL & "WHERE (SAVP_Data.[REF PRODUIT] = """ & Champs & """);"
Case "N° Série Eaton" ' OptionButton02
strSQL = strSQL & "WHERE (SAVP_Data.[N° SERIE MP] = """ & Champs & """);"
Case "N° BL Eaton" ' OptionButton03
strSQL = strSQL & "WHERE (SAVP_Data.[Extraction BL de SAP] = """ & Champs & """);"
Case "Référence Client" ' OptionButton04
strSQL = strSQL & "WHERE (SAVP_Data.[Ref_Pdt_Client] = """ & Champs & """);"
Case "Code Client" ' OptionButton05
strSQL = strSQL & "WHERE (SAVP_Data.[CODE CLIENT] = """ & Champs & """);"
Case "N° Série Client" ' OptionButton06
strSQL = strSQL & "WHERE (SAVP_Data.[N° SERIE CLIENT] = """ & Champs & """);"
Case "N° Doc/Cmd Client" ' OptionButton07
strSQL = strSQL & "WHERE (SAVP_Data.[DOC CLIENT] = """ & Champs & """);"
Case "N° Rapport NC Clt" ' OptionButton08
strSQL = strSQL & "WHERE (SAVP_Data.[RAPPORT QUALITE CLIENT] = """ & Champs & """);"
Case Else
Call Messagerie("")
End Select
Set db = DBEngine.OpenDatabase(Workbooks("SAVPRO.xlsm").Sheets("Paramètres").Range("C4").Value & "SAVPRO.accdb") 'Etablissement de la connection avec la base access SAVPRO
Set rs = db.OpenRecordset(strSQL)
For iCols = 0 To rs.Fields.count - 1 ' Copie de l'entête du recordset dans l'onglet
Workbooks("SAVPRO.xlsm").Sheets("ResultRech").Cells(1, iCols + 1).Value = rs.Fields(iCols).Name
Next
Workbooks("SAVPRO.xlsm").Sheets("ResultRech").Range("A2").CopyFromRecordset rs ' Copie du contenu du recordset dans l'onglet
'rs.Close
db.Close ' On ferme !
Set rs = Nothing
Set db = Nothing
End Sub |
J'ai commenté out les lignes a partir de: set rs... jusqu'à rs.close mais rien y fait.
J'en déduit donc que l'ouverture de la base est ce qui pose problème. Mais mes compétences s'arrêtes la...
Pouvez vous m'aider à comprendre ce qu'il se passe?
Merci pour votre aide
MAJ_1: Je viens de m'apercevoir que lorsque je ferme mon GUI rien ne change mais si je stop le débugger ensuite (alors qu'il est arrêté d’apparence) alors MS Access se ferme.
DAO vs ADO: DAO est une technologie obsolèe et non supportée pour machines 64-bits
Citation:
Envoyé par
dysorthographie
J'ai donc implémenté le code pour du ADO et mon problème d'ouverture et de fermeture de MS ACCESS est résolu. :)
Merci: dysorthographie