DAO.Recordset - Access sous SQL Server
Bonjour
J'ai récupéré ce code qui fonctionne parfaitement sur une base access de type .accdb qui se trouve sur mon bureau.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| Sub toto()
Dim oRst As DAO.Recordset
Dim oDb As DAO.Database
Set oDb = CurrentDb
Set oRst = oDb.OpenRecordset("SELECT Field1 FROM Table1 ", dbOpenDynaset)
MsgBox "Le nom du client est : " & oRst.Fields("Field1").Value
'Libération des objets
oRst.Close
oDb.Close
Set oRst = Nothing
Set oDb = Nothing
End Sub |
Par contre le même code mis dans un module d'une base mise sous SQL server (extension .adp) ne fonctionne plus
Le message d'erreur est
Citation:
Run-Time error'91' Object variable or with block variable not set
Il semble d'après des infos glanées sur des forum qu'il s'agisse d'un problème de bibliothèques.
Pour info les références (menu "Tools/References" dans module VBA) que j'ai sur cette base mise sur serveur sont :
- Visual Basic For Applications
- Microsoft Access 14.0 Object Library
- Microsoft Office 14.0 Access database engine Objet
- OLE Automation
Si je tente d'ajouter :
- Microsoft DAO 3.6 Object library
le message d'erreur est
Citation:
Name conflicts with existing module, project, or object library
Quelqu'un a t-il une idée ?
Merci d'avance pour votre aide.
Envoyer un mail (+ fichier joint) à une liste de diffusion (variable selon résultat requête) via Access
Re
ça y est ! j'ai enfin trouvé le moyen d'envoyer un email avec un fichier joint à une liste de personnes issues d'une requête access :
ATTENTION : il s'agit ici d'une base Access sous Server SQL (fichier .adp)
Il faut pour que cela fonctionne que dans le module VBA Tools/Preference soit cochée
MICROSOFT ActiveX Data Objects 2.8 Library
==================================
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
| Sub envoi_alerte_mail_visa()
'déclaration et affectation de la variable objet de connexion
Dim Cn As ADODB.Connection
Set Cn = CurrentProject.Connection
'déclaration du recordset
Dim monmail As New ADODB.Recordset
' V_Liste_destinataires_ExpiryVisa est une query (view) qui sort un seul champs EmailAddress
monmail.Open "V_Liste_destinataires_ExpiryVisa", Cn, adOpenStatic, adLockReadOnly
Dim nbrdemails As Integer
Dim message As String
Dim maliste As String
Dim malistemoinsun As String
Dim longueurmalisteemails As Integer
' nbrdemails = monmail.RecordCount vérification du nombre d'adresses mail / par rapport au résultat de la query
' msgbox nbrdemails ça fonctionne !
'boucle pour concaténer les adresses email obtenues dans le recordset
While Not monmail.EOF
maliste = maliste & monmail.Fields("EmailAddress") & ";" 'séparation par ";" entre les adresses emails (utilisation outlook)
monmail.MoveNext
Wend
'PROBLEME la liste obtenue commence par ";" et plante l'envoi, pour supprimer le premier ";"
'je passe par ...
longueurmalisteemails = Len(maliste)
malistemoinsun = Right(maliste, longueurmalisteemails - 1)
'MsgBox malistemoinsun vérification de la liste obtenue => ça marche
'Corps du message du mail
message = "Hello" + Chr(13) + Chr(13)
message = message + "Please find herejoined Warning Visa List (expired visa or visa that will expire within 60 days)" + Chr(13)
message = message + "when necessary, please renew document and update database (+ hyperlink)" + Chr(13) + Chr(13)
message = message + "Thanks for your comprehension and help, regards."
On Error GoTo Send_Email_Err
'procédure pour envoyer un mail
'on envoi en document joint une vue (acServerView)
'ce document joint s'appelera "V_last_ListVisa_ExpiryDate_Check"
'ce sera un document de type Excel 2003
'la liste de diffusion est la variable malistemoinsun obtenur à partir du recordset
'en copie j'utilise ici des adresses fixes connues à l'avance donc pas besoin de calcul comme pour la diffusion
'le titre du message ser "Warning Visa List"
'le corps du message est travaillé à part pour ne pas faire trop long dans cette partie de la programmation
DoCmd.SendObject acServerView, "V_Last_List_Visa_ExpiryDate_Check", "Excel97-Excel2003Workbook(*.xls)", malistemoinsun, "toto@gamail.com; monsieur.patate@free.fr", "", "Warning Visa List", message, True, ""
Send_Email_Exit:
Exit Sub
Send_Email_Err:
MsgBox Error$
Resume Send_Email_Exit
Set Cn = Nothing 'libération explicite de la variable
End Sub |
:D