Afficher un print venant d'une connection ADO

Bonjour,

comment indiquer dans le titre j'aimerais pouvoir afficher un print (TSQL) d'une requete SQL dans du code VBA par msgbox.

exemple de code :

Set Connect = CreateObject("ADODB.Connection")
            Set Recordset = CreateObject("ADODB.RecordSet")
            Connect.Open "Provider=SQLOLEDB;Server=xxxxxxxx;Database=xxxxxx;Persist Security Info=False;Integrated Security=SSPI;" 'chaine de connection ou le mdp et l'utilisateur sont les meme que l'identification windows et définie par Integrated Security=SSP

            suppression = "If ( (SELECT COUNT(*) FROM Table_test_arthur WHERE Prenom = 'Fabien') < (SELECT COUNT(*) FROM Table_test_arthur WHERE Prenom = 'Sarah'))" & _
                            "BEGIN " & _
                            "DELETE FROM Table_test_arthur WHERE Prenom = 'Sarah' " & _
                            "Print 'FAIT '" & _
                            "End " & _
                            "Else " & _
                            "BEGIN " & _
                            "Print 'C EST DE LA MERDE' " & _
                            "END "

            Recordset.Open suppression, Connect

ici je voudrais pouvoir sortir une MsgBox avec comme message ce que contien le print ( FAIT s'il a executer le IF, ou alors C EST DE LA MERDE s'il a executer le ELSE)'je precise que cette requete est juste un exemple hein )

Merci d'avance pour votre aide.

Cordialement.

Arthur.

Bonjour Arthur,

Pour répondre à ton problème, je remplacerais :

 Recordset.Open suppression, Connect

par

           
            Connect.Execute suppression, lNb
            If lNb > 0 Then
                sMess = "C'est fait"
            Else
                sMess = "C'est de la merde"
            End If

            MsgBox sMess

(Pour l'heure, je n'ai pas de quoi tester avec MSSQL ce code...)

ça marche mais comment avec lNb la machine sait que le IF ou le ELSE a été executé ?

Dans la requete je peux enlever

"Print 'FAIT '" & _
"Print 'C EST DE LA MERDE' " & _

??

Oui, tu peux enlever les ordres PRINT dans le SQL

ok , merci

comment ca marche du coup ?

Bon .... Mauvaise nouvelle, apres remplacement de la requete ça ne fonctionne plus , lNb est toujours <= 0

Faut-il remettre qq chose a 0 ou autre ?

PS : la nouvelle requete

            suppression = "IF ( (SELECT count(*) FROM tbl_Projet WHERE PtrIdClient = " & no_client & ") = (SELECT count(*) FROM tbl_Projet WHERE PtrIdClient = " & no_client & " AND oEtatProjet = 0))" & _
                            "BEGIN " & _
                            "SELECT * FROM tbl_Elevation WHERE PtrIdProjet IN (SELECT IdProjet FROM tbl_Projet WHERE PtrIdClient = " & no_client & ") " & _
                            "SELECT * FROM tbl_Elevation_Annexes WHERE PtrIdProjet IN (SELECT IdProjet FROM tbl_Projet WHERE PtrIdClient = " & no_client & ") " & _
                            "SELECT * FROM tbl_Elevation_Details WHERE PtrIdProjet IN (SELECT IdProjet FROM tbl_Projet WHERE PtrIdClient = " & no_client & ") " & _
                            "SELECT * FROM tbl_Elevation_Element WHERE PtrIdProjet IN (SELECT IdProjet FROM tbl_Projet WHERE PtrIdClient = " & no_client & ") " & _
                            "SELECT * FROM tbl_Elevation_Exemplaire WHERE PtrIdProjet IN (SELECT IdProjet FROM tbl_Projet WHERE PtrIdClient = " & no_client & ") " & _
                            "SELECT * FROM tbl_Elevation_InfoSAI WHERE PtrIdProjet IN (SELECT IdProjet FROM tbl_Projet WHERE PtrIdClient = " & no_client & ") " & _
                            "SELECT * FROM tbl_Elevation_Prix WHERE PtrIdProjet IN (SELECT IdProjet FROM tbl_Projet WHERE PtrIdClient = " & no_client & ") " & _
                            "SELECT * FROM tbl_Elevation_PtBois WHERE PtrIdProjet IN (SELECT IdProjet FROM tbl_Projet WHERE PtrIdClient = " & no_client & ") " & _
                            "SELECT * FROM tbl_Elevation_Traverse WHERE PtrIdProjet IN (SELECT IdProjet FROM tbl_Projet WHERE PtrIdClient = " & no_client & ") " & _
                            "SELECT * FROM tbl_Clients WHERE IdClient = 96 " & _
                            "PRINT 'La suppression a été effectué avec succès' " & _
                            "END " & _
                            "ELSE " & _
                            "BEGIN " & _
                            "PRINT 'Le client que vous voulez suppprimer a déja passer une commmande, sa suppression est donc impossible'" & _
                            "END "

( le SELECT est destiné à devenir un DELETE mais pour les test je le laisse en SELECT )

Bonjour Arthur,

Plusieurs remarques :

  • Dans ta nouvelle requête SQL, la ligne "SELECT * FROM tbl_Clients WHERE IdClient = 96 " ne devrait-elle pas s'écrire "SELECT * FROM tbl_Clients WHERE IdClient = " & no_client ?
  • Le second paramètre de la commande ado.Connection.execute (RecordsAffected, lNB dans le code) renvoit le nombre d'enregistrements affectés par la commande et a un sens lorsque la commande exécute des "DELETE", ou bien "INSERT" ou encore "UPDATE". Sur une commande renvoyant des données avec "SELECT", le résultat est à récupérer dans un recordset et le paramètre RecordsAffected renvoit -1.
  • Je te propose le code VBA suivant (je me suis permis de corriger également l'orthographe des messages ). Ce code a été testé avec connexion à un serveur MS SQL :
            suppression = "IF ( (SELECT count(*) FROM tbl_Projet WHERE PtrIdClient = " & no_Client & ") = (SELECT count(*) FROM tbl_Projet WHERE PtrIdClient = " & no_Client & " AND oEtatProjet = 0))" & _
                            " BEGIN " & _
                            " DELETE FROM tbl_Elevation WHERE PtrIdProjet IN (SELECT IdProjet FROM tbl_Projet WHERE PtrIdClient = " & no_Client & ") " & _
                            " DELETE FROM tbl_Elevation_Annexes WHERE PtrIdProjet IN (SELECT IdProjet FROM tbl_Projet WHERE PtrIdClient = " & no_Client & ") " & _
                            " DELETE FROM tbl_Elevation_Details WHERE PtrIdProjet IN (SELECT IdProjet FROM tbl_Projet WHERE PtrIdClient = " & no_Client & ") " & _
                            " DELETE FROM tbl_Elevation_Element WHERE PtrIdProjet IN (SELECT IdProjet FROM tbl_Projet WHERE PtrIdClient = " & no_Client & ") " & _
                            " DELETE FROM tbl_Elevation_Exemplaire WHERE PtrIdProjet IN (SELECT IdProjet FROM tbl_Projet WHERE PtrIdClient = " & no_Client & ") " & _
                            " DELETE FROM tbl_Elevation_InfoSAI WHERE PtrIdProjet IN (SELECT IdProjet FROM tbl_Projet WHERE PtrIdClient = " & no_Client & ") " & _
                            " DELETE FROM tbl_Elevation_Prix WHERE PtrIdProjet IN (SELECT IdProjet FROM tbl_Projet WHERE PtrIdClient = " & no_Client & ") " & _
                            " DELETE FROM tbl_Elevation_PtBois WHERE PtrIdProjet IN (SELECT IdProjet FROM tbl_Projet WHERE PtrIdClient = " & no_Client & ") " & _
                            " DELETE FROM tbl_Elevation_Traverse WHERE PtrIdProjet IN (SELECT IdProjet FROM tbl_Projet WHERE PtrIdClient = " & no_Client & ") " & _
                            " DELETE FROM tbl_Clients WHERE IdClient = " & no_Client & _
                            " END "

    Connect.Execute suppression, lNB
    If lNB > 0 Then
        MsgBox "La suppression a été effectuée avec succès"
    Else
        MsgBox "Le client que vous voulez supprimer a déjà passé une commande, sa suppression est donc impossible"
    End If

- Si tu as la possibilité d'agir sur la base de données MS SQL, je te suggère d'étudier la fonctionnalité de DELETE en CASCADE de MSSQL qui pourrait grandement simplifier ta programmation VBA. A toutes fins utiles un lien :

https://www.mssqltips.com/sqlservertip/2743/using-delete-cascade-option-for-foreign-keys/

Bonne fin d'année et attention aux excès...

Merci beaucoup GVIALLES pour ton aide,

je testerai ton code mardi au boulot quand j'aurai accès à la base de données

Je te souhaite de passer de bonnes fêtes

Cordialement.

Arthur

EDIT: Cela marche parfaitement, tout mes remerciments GVIALLES pour ton aide et bonne année

Rechercher des sujets similaires à "afficher print venant connection ado"