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 FunctionJe l’utilise de cette manière :
Dim Req As String
Dim T As Variant
annee = Left(Right(ThisWorkbook.Name, 9), 4) '2019un 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 'Fonctionfin 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_cdePierre
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.