IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

DAO.Recordset - Access sous SQL Server [2005]


Sujet :

MS SQL Server

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    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
    Name conflicts with existing module, project, or object library
    Quelqu'un a t-il une idée ?
    Merci d'avance pour votre aide.

  2. #2
    Membre éclairé Avatar de GeekMokona
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2011
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 327
    Points : 817
    Points
    817
    Par défaut
    Ton probléme est plus Access que SQL Server

    Tu as des réfèrence qui ce croise d'où ton dernier probléme

    Microsoft Office 14.0 Access database engine Objet et Microsoft DAO 3.6 Object library sont la même librairie pour des versions d'access Différente (cf : http://warin.developpez.com/access/dao/?page=partie_1 )

    D'où ma question a tu en même temps changer de version d'Access ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut ça avance ...lentement
    Bonjour Mokona18

    Merci pour la réponse, j'avance lentement. Voici ce que j'ai trouvé ce matin...ça fonctionne.
    J'ai développé ma base sous Access 2003 et mise sous server SQL (fichier adp ou ade (version sécurisée)) je crois en version 2005.

    Désormais j'ai coché "Microsoft ActiveX Data Objects 2.8 library" dans le menu Tools/Référence et le code suivant me renvoi bien le nbrmails => 4 (juste !)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Public Function envoi_alerte_mail_visa()
    'déclaration et affectation de la variable objet de connexion
     
    Dim Cn As ADODB.Connection
    Set Cn = CurrentProject.Connection
     
     'MsgBox Cn.ConnectionString    'vérificationd de la connection
     
    ' RECORDSET
    '==========
    Dim monmail As New ADODB.Recordset
     
    Dim V_Liste_destinataires_ExpiryVisa As QueryDef
     
    monmail.Open "V_Liste_destinataires_ExpiryVisa", Cn, adOpenStatic, adLockReadOnly
     
    Dim nbrdemails As Integer
    Dim message As String
     
    nbrdemails = monmail.RecordCount
     
    MsgBox nbrdemails
     
     
    Set Cn = Nothing    'libération explicite de la variable
     
    End Function
    Mon but est d'envoyer un mail en automatique à une liste de personnes issue d'une query "V_Liste_destinataires_ExpiryVisa" (1 seule colonne, champs "EmailAddress")

    J'ai trouvé comment envoyer un message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.SendObject acServerView, "V_Last_List_Visa_ExpiryDate_Check", "Excel97-Excel2003Workbook(*.xls)", "monsieur.patate@jeux.com", "", "", "Iqama List", "This is the list of iqama expired", True, ""
    Désormais il me faut remplacer "monsieur.patate@jeux.com" dans le code ci dessus par une variable de type string qui sera une compilation de toutes les adresses email issuees de ma query. exemple : malistededestinataires "monsieur.patate@jeux.com; colonel.moutarde@gmail.com ; ..."

    Sais tu comment je peux :
    1°) obtenir la valeur de chaque enregistrement du recordset
    2°)mettre une boucle pour les compiler les unes à la suite des autres en les séparant par un ";" ?

    Merci de ton aide, sincères salutations.

  4. #4
    Membre éclairé Avatar de GeekMokona
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2011
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 327
    Points : 817
    Points
    817
    Par défaut
    Etant plus à l'aise avec SQL Server qu'Access ...

    Mon idée est plus tôt d'utilisé une Store Proc

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE procedure GetListeMail
     
     
    as
    begin
     
    declare @listemail varchar(MAX)
     
    Select @listemail = adresseMail+  coalesce(';' + @listeMail,';') From Personne
     
    select @listemail  as listeMail
    end
    Et d'appeler cette StoreProc via un exec GetListeMail Dans ton Code VBA ...

  5. #5
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Procédure stockée sous SQL Server et MS access
    Par mfofana dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 02/04/2011, 00h15
  2. Réponses: 2
    Dernier message: 16/06/2008, 23h42
  3. Variable booléenne sous SQL Server 2005 et Access 2003
    Par Eratosten dans le forum Développement
    Réponses: 1
    Dernier message: 02/06/2008, 15h51
  4. projet ADP sous Access 2000, sql server 2000
    Par Smix007 dans le forum Access
    Réponses: 2
    Dernier message: 07/05/2007, 17h03
  5. formulaire access et donnée sous sql server
    Par liliprog dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 09/09/2005, 20h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo