Connexion ADO

Bonjour,

Afin de vérifier si le résultat de mon recordset contient quelque chose ou non j'utilise

                    Set Connect = CreateObject("ADODB.Connection")
                    Set Recordset = CreateObject("ADODB.RecordSet")

                    Connect.Open "Provider=SQLOLEDB;Server=A42APTECP02;Database=BDDChacal_TEST;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

                    'TestPrixImpose = "SELECT * FROM tbl_Projet INNER JOIN tbl_Projet ON PtrIdProjet = IdProjet WHERE tNomProjet = '" & DChacal & "' AND oEtatProjet = '0' AND tInitiales = " & Environ("USERNAME") & " AND CurPrixImposeMatiere = 0"
                    TestPrixImpose = "SELECT tNomProjet, PtrIdProjet, IdProjet, oEtatProjet, tInitiales, iPtrIdElevation, curPrixTarif, curPrixImposeMatiere FROM tbl_Elevation_Prix INNER JOIN tbl_Projet ON PtrIdProjet = IdProjet WHERE tNomProjet = '" & DChacal & "' AND oEtatProjet = '0' AND tInitiales = 'C4572433' AND CurPrixImposeMatiere = '0.00'"

                    Connect.Execute TestPrixImpose, lNB
                    MsgBox lNB
                    If lNB = -1 Then

Le code était tiré d'un post de je-ne-sais-plus-où, il fonctionnait pour des requetes simple mais avec les inner join cela ne marche plus car il me sort 0.

En me documentant un peu j'ai cru comprendre que de base ce code doit sortir 0 lorsqu'il y a des enregistrement et sinon -1 mais ici ce n'est pas le cas donc je ne comprend plus trop.

Si quelqu'un aurait la charité de m'expliquer comment marche la connexion ADO et de m'envoyer un exemple de connection "propre" à une base et récuperer un recordset je ne dirai pas non .

Cordialement.

Arthur.

Bonjour,

Tu travailles avec Excel 2016.

Tu dois pouvoir travailler avec Récupérer et transformer (Power Query, natif sous cette version d'Excel).

Nul besoin à priori de VBA.

Maintenant, sans plus d'informations !...

Cdlt.

Maintenant, sans plus d'informations !...

Bonjour,

Tu as raison j'ai omis des choses. Je travail avec VBA car je fait un UserForm donc le code est là :

Private Sub CommandButton2_Click()

    If MsgBox("Êtes vous sur de vouloir figer le prix de ce dossier ? Cette action sera définitive et non modifiable", vbYesNo) = vbYes Then

        Set Connect = CreateObject("ADODB.Connection")
        Set Recordset = CreateObject("ADODB.RecordSet")

        Connect.Open "Provider=SQLOLEDB;;Server=A42APTECP02;Database=BDDChacal_TEST;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
        ConnectionString = "Driver={SQL Server}Server=NOMDUSERVEUR;Database=chbase;Uid=id1;Pwd=confi;"
        TestDossier = "SELECT tNomProjet, IdProjet, oEtatProjet, tInitiales FROM tbl_Projet WHERE tNomProjet = '" & DChacal & "'"

        Connect.Execute TestDossier, lNB
        If lNB = -1 Then

            Set Connect = CreateObject("ADODB.Connection")
            Set Recordset = CreateObject("ADODB.RecordSet")

            Connect.Open "Provider=SQLOLEDB;Server=A42APTECP02;Database=BDDChacal_TEST;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

            TestEtat = "SELECT tNomProjet, IdProjet, oEtatProjet, tInitiales FROM tbl_Projet WHERE tNomProjet = '" & DChacal & "' AND oEtatProjet = '0'"

            Connect.Execute TestEtat, lNB
            If lNB = -1 Then

                Set Connect = CreateObject("ADODB.Connection")
                Set Recordset = CreateObject("ADODB.RecordSet")

                Connect.Open "Provider=SQLOLEDB;Server=A42APTECP02;Database=BDDChacal_TEST;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

                'TestInitiales = "SELECT * FROM tbl_Projet INNER JOIN tbl_Projet ON PtrIdProjet = IdProjet WHERE tNomProjet = '" & DChacal & "' AND oEtatProjet = '0' AND tInitiales = " & Environ("USERNAME")
                TestInitiales = "SELECT tNomProjet, IdProjet, oEtatProjet, tInitiales FROM tbl_Projet WHERE tNomProjet = '" & DChacal & "' AND oEtatProjet = '0' AND tInitiales = 'C4572433'"

                Connect.Execute TestInitiales, lNB
                MsgBox lNB
                If lNB = -1 Then

                    Set Connect = CreateObject("ADODB.Connection")
                    Set Recordset = CreateObject("ADODB.RecordSet")

                    Connect.Open "Provider=SQLOLEDB;Server=A42APTECP02;Database=BDDChacal_TEST;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

                    'TestPrixImpose = "SELECT * FROM tbl_Projet INNER JOIN tbl_Projet ON PtrIdProjet = IdProjet WHERE tNomProjet = '" & DChacal & "' AND oEtatProjet = '0' AND tInitiales = " & Environ("USERNAME") & " AND CurPrixImposeMatiere = 0"
                    TestPrixImpose = "SELECT tNomProjet, PtrIdProjet, IdProjet, oEtatProjet, tInitiales, iPtrIdElevation, curPrixTarif, curPrixImposeMatiere FROM tbl_Elevation_Prix INNER JOIN tbl_Projet ON PtrIdProjet = IdProjet WHERE tNomProjet = '" & DChacal & "' AND oEtatProjet = '0' AND tInitiales = 'C4572433' AND CurPrixImposeMatiere = '0.00'"

                    Connect.Execute TestPrixImpose, lNB
                    MsgBox lNB
                    If lNB = -1 Then

                        MsgBox "Les vérifs sont passées"

                        'REQUETE "FINALE"

                    End If
                Else
                    MsgBox "Vous n'êtes pas le créateur de ce dossier, vous ne pouvez donc pas figer le prix de celui-ci." & Chr(13) & "Vérifier que le N-°CHACAL renseigné est le bon puis réessayer.", vbCritical
                End If
            Else
                MsgBox "Ce dossier n'est plus en devis, vous ne pouvez donc pas figer le prix de celui-ci." & Chr(13) & "Vérifier que le N-°CHACAL renseigné est le bon puis réessayer.", vbCritical
            End If
        Else
            MsgBox "Ce dossier n'existe pas" & Chr(13) & "Vérifier que le N-°CHACAL renseigné est le bon puis réessayer.", vbCritical
        End If
    End If
    Unload Me
End Sub

Comme tu l'auras sans doute compris, je vérifie chaque critère séparément afin de voir si la requête peut être effectuer et si non pourquoi afin de prévenir l'utilisateur.

Ici le problème est que la dernière vérif ne fonctionne pas car elle me sort 0 tout le temps, puis j'ai fait des test à coter et maintenant ne me sort que -1 alors qu'il n'y a aucun enregistrement possible dans le recordset vu que la requête demande des critère impossible à remplir.

Je commence à me perdre petit à petit dans cette vérif....

Le code est-il au moins bon ? Aurais-tu une solution à mon problème à me proposer ?

Cordialement.

Arthur.

Re,

J'ai écrit :

Bonjour,

Tu travailles avec Excel 2016.

Tu dois pouvoir travailler avec Récupérer et transformer (Power Query, natif sous cette version d'Excel).

Nul besoin à priori de VBA.

Maintenant, sans plus d'informations !...

Cdlt.

Quel est le type de fichier à traiter ? Peux-tu le joindre (partiellement et anonymisé si nécessaire ?

Peux-tu envoyer aussi, une exemple de résultat souhaité ?

Quel est le type de fichier à traiter ? Peux-tu le joindre (partiellement et anonymisé si nécessaire ?

Peux-tu envoyer aussi, une exemple de résultat souhaité ?

Je n'ai pas vraiment de fichier à traiter, j'explique :

il n'y aura pas de feuille rempli dans le classeur juste un bouton pour ouvrir un userform

l'userform dois juste faire un update dans une base de donné mais avant cela il fait des select avec les critères qui se rajoute petit à petit afin de savoir, si il y a , ou se situer le problème afin de prévenir l'utilisateur

Je ne vois pas ce que tu veux que je t'envoie , le fichier excel ? pas de problème voila.

Soit juste un peu plus clair dans tes demandes car je ne comprend pas trop ce que tu dis la

Et désoler si c'est l'inverse

C'est bon ça fonctionne avec le code

                'Connexion à la base de données
                cnx.ConnectionString = "Provider=SQLOLEDB;Server=A42APTECP02;Database=BDDChacal_TEST;Persist Security Info=False;Integrated Security=SSPI;"
                cnx.Open

                'TestInitiales = "SELECT * FROM tbl_Projet INNER JOIN tbl_Projet ON PtrIdProjet = IdProjet WHERE tNomProjet = '" & DChacal & "' AND oEtatProjet = '0' AND tInitiales = '" & Environ("USERNAME") & "'"
                TestInitiales = "SELECT tNomProjet, IdProjet, oEtatProjet, tInitiales FROM tbl_Projet WHERE tNomProjet = '" & DChacal & "' AND oEtatProjet = '0' AND tInitiales = 'C4572433'"

                rs.Open TestInitiales, cnx, , , adCmdText
                reccount = rs(0)
                cnx.Close

                If reccount > 0 Then

Voila pour ceux qui veulent et qui galèere aussi

reccount = le nombre de ligne dans le résultat

Rechercher des sujets similaires à "connexion ado"