connexion bdd Access et requete insert + select [objet ouvert]
Bonjour, je me connecte à ma base de données Access en ADO pour exécuter des requêtes insert et select depuis une macro Excel. J'utilise donc 2 manières d’exécuter mes requête (objConnexion.Open et rs.open). Je ne m'y connais pas et j'ai réussit à exécuter certains de mes requête sur une macro simple mais dans ma vraie macro qui contient d'autres requêtes j'ai comme erreur "Cette opération n'est pas autorisée si l'objet est ouvert" à la ligne 28.
Je met donc
Code:
1 2 3
|
objConnexion.Close
Set objConnexion = Nothing |
et cette fois j'ai l'erreur que la connexion est fermée. Je pense que je gère mal les connexions, malgré mes recherches, j'ai donc besoin de votre aide.
Mon code fonctionnel est:
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
| Dim objConnexion As ADODB.Connection
Dim objrs As ADODB.Recordset
Dim aa, bb
' Création de l'objet ADO
Set objConnexion = New ADODB.Connection
Set objrs = New ADODB.Recordset ''''''
Set objCommand = CreateObject("ADODB.Command")
' Ouverture de la base sans DSN
objConnexion.Open _
"Provider=Microsoft.ACE.OLEDB.12.0; " & _
"Password=;" & _
"User ID=Admin;" & _
"Data Source=C:\Users\MLR1.MDB;"
Dim nomClasseur As String
nomClasseur = ActiveWorkbook.Name
Dim nomFeuille As String
nomFeuille = ActiveSheet.Name
strsql = "SELECT FORMATION.LIDM as lid, lecode FROM ...."
objrs.Open strsql, objConnexion, adOpenKeyset, adLockOptimistic
aa = objrs.Fields("lid").Value
bb = objrs.Fields("lecode").Value
TexteSQL4 = "INSERT INTO .... '" & aa & "' , '" & bb & "' FROM ..."
objConnexion.Execute TexteSQL4 |
et mon code qui ne fonctionne pas est:
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 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
|
Dim objConnexion As ADODB.Connection
Dim objrs As ADODB.Recordset
Dim aa, bb
' Création de l'objet ADO
Set objConnexion = New ADODB.Connection
Set objrs = New ADODB.Recordset ''''''
Set objCommand = CreateObject("ADODB.Command")
' Ouverture de la base sans DSN
objConnexion.Open _
"Provider=Microsoft.ACE.OLEDB.12.0; " & _
"Password=;" & _
"User ID=Admin;" & _
"Data Source=C:\Users\MLR1.MDB;"
'l'annee de parcours = annee de la date courante
Dim annee As String
annee = Year(Now())
'pour chaque cellule de B19 à B55
For Each C In Range("B19:B55")
Dim ligne As Integer 'on récupère la ligne
ligne = C.Row
Dim nomClasseur As String
nomClasseur = ActiveWorkbook.Name
Dim nomFeuille As String
nomFeuille = ActiveSheet.Name
strsql = "SELECT F.LIDM as lid, lecode FROM F WHERE LIDM = (SELECT M.IDMENTION FROM M WHERE NOMM='" & nomClasseur & "') AND NOMF='" & nomFeuille & "'"
''''''''''''''''''''''' erreur sur cette ligne
objrs.Open strsql, objConnexion, adOpenKeyset, adLockOptimistic
aa = objrs.Fields("lid").Value
bb = objrs.Fields("lecode").Value
' Traitement
TexteSQL1 = "INSERT INTO A ...."
TexteSQL2 = "INSERT INTO B ...."
TexteSQL3 = "INSERT INTO C ....."
objConnexion.Execute TexteSQL1
objConnexion.Execute TexteSQL2
objConnexion.Execute TexteSQL3
TexteSQL4 = "INSERT INTO E .... '" & aa & "' , '" & bb & "' ...."
objConnexion.Execute TexteSQL4
End If
Next 'prochaine ligne |
J'ai modifier le code et réduit les requêtes mais le code d'origine est bon normalement.
J'ai l'impression que l'on ne fait pas un objConnexion.Execute et un objrs.Open en même temps de cette manière.