ADO qui ne fonctionne pas

Bonjours à tous,

J'ai fait un code qui me permet de modifier des données dans une base de données Access. Les requêtes générées fonctionnent directement dans Access, avec un résultat visible dans la base, mais depuis ADO la requête ne ressort aucun changement visible sur celle-ci. Bizarre.

Auriez vous des idées de pourquoi cela se passe ? Sachant que vendredi dernier cela fonctionnait et que je n'ai rien changé entre temps (il me semble).

Cordialement,

Arthur.

Bonjour,

Tout cela me semble flou, quelle est le code de connexion à la base ?

Bonjour oxydum,

Pour envoyer les requêtes j'utilise des fonctions que Pierre56 m'a données lors d'un post précédent.

Option Explicit
Public Cnx As Object, Rst As Object
'http://tatiak.canalblog.com/
'https://forum.excel-pratique.com/viewtopic.php?p=761466#p761466

Sub Connect_Access(Accdb As String)
    Set Cnx = CreateObject("ADODB.Connection")
    Cnx.Provider = "MSDASQL"
    Cnx.Open "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=" & Accdb & ";"
    Set Rst = CreateObject("ADODB.Recordset")
End Sub

Function Select_Db(Req As String, Optional Head As Byte = 1) As Variant
Dim T As Variant, Rcd As Variant
Dim lig As Long, col As Long, i As Long, j As Long

    On Error GoTo errhdlr
    ReDim Rcd(1 To 1, 1 To 1)
    Rst.Open Req, Cnx, 3
    lig = Rst.RecordCount
    If lig > 0 Then
        Rst.MoveFirst
        T = Rst.GetRows
        col = Rst.Fields.Count
        ReDim Rcd(1 To lig + Head, 1 To col)

        For j = 0 To col - 1
            Rcd(1, j + 1) = Rst.Fields(j).Name
            For i = 0 To lig - 1
                Rcd(i + 1 + Head, j + 1) = IIf(IsNull(T(j, i)), 0, T(j, i))
            Next i
        Next j
    End If
    Select_Db = Rcd
    Exit Function

errhdlr:
    Rcd(1, 1) = "Erreur n°" & Err.Number & vbCrLf & Err.Description
    Select_Db = Rcd
End Function

Sub Close_Cnx(Optional x As Byte)
    On Error Resume Next
    If x > 0 Then Rst.Close
    Cnx.Close
    Set Cnx = Nothing
    Set Rst = Nothing
End Sub

Function ExisteFichier(S As String) As Boolean
Dim tatiak As Object
    Set tatiak = CreateObject("Scripting.FileSystemObject")
    ExisteFichier = tatiak.FileExists(S)
End Function

Je l’utilise de cette manière :

    Dim Req As String
    Dim T As Variant
    annee = Left(Right(ThisWorkbook.Name, 9), 4) '2019

un peu de code

   'Req = "UPDATE [cde en cours] SET `Info CVR` = ""Att_CVR_" & Date_Appro & """ WHERE `numero de cde` = " & num_cde
    Req = "UPDATE [cde en cours] SET `Info CVR` = ""Att_CVR_01/07/2019"" WHERE `numero de cde` = 4"
    Connect_Access ThisWorkbook.Path & "\Suivi cde " & annee & ".accdb" 'Fonction
    T = Select_Db(Req, 0) ' avec 1 si on veut l'entête et 0 sinon   Fonction
    Close_Cnx 'Fonction

fin de code

La ligne en commentaire est la ligne "de base" et celle en dessous est ce que cela donne. L’exécution de sort aucune erreur, elle s’exécute bien. Malgré cela aucun changement n'est visible dans la BDD.

Si j’exécute la requête directement dans Access la requête s’exécute et les changement sont visible.

Il arrive parfois qu'un plantage ait lieu avant la fermeture de la base.

Du coup, avant l'ouverture de la base, moi, je la ferme... Close_Cnx !

Bonjour à tous,

Perso, j'écrirai plutôt :

    req = "UPDATE [cde en cours] SET `Info CVR` = 'Att_CVR_01/07/2019' WHERE `numero de cde` = 4"

(cf guillemets simples pour entourer la valeur à mettre à jour)

soit :

    req = "UPDATE [cde en cours] SET `Info CVR` = 'Att_CVR_" & Date_Appro & "' WHERE `numero de cde` = " & num_cde

Pierre

Bonjour pierrep56

pour commencer désoler d'avoir écorché ton pseudo

Ta solution fonctionne parfaitement. Je me demande juste pourquoi cela fonctionnait avant et plus mnt. Si sa se trouve j'avait fait des modifs que je n'ai pas enregistrées .....

Merci oxydum pour tes proposition tout de même .

Sur ce, bonne journée a tous.

Rechercher des sujets similaires à "ado qui fonctionne pas"