Suppression d'un enregistrement ACCESS à partir d'un feuile VB [Résolu]

Signaler
Messages postés
335
Date d'inscription
vendredi 21 octobre 2005
Statut
Membre
Dernière intervention
8 mars 2008
-
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
-
Bonsoir,

je voulais prendre votre avis sur ce code qui marche pas pour la suppression d'un enregistrement d'une table dans une feuille VB6, voici le code:

Private Sub Suppression_Click()
' Chemin complet et nom de la base
strDB = "C:\pesageo.mdb"
' Nom de la table
strTable = "Véhicule"
 
' Ouverture connexion vers la base
Set oConn = New ADODB.Connection
oConn.Provider = "Microsoft.Jet.OLEDB.4.0"
oConn.Open strDB
 
' Optionnel : Vide la table
'oConn.Execute "DELETE FROM " & strTable
 
' Ouverture recordset sur la table
Set oRS = New ADODB.Recordset
oRS.CursorLocation = adUseClient
oRS.Open strTable, oConn, adOpenDynamic, adLockOptimistic, adCmdTable

oRS.Delete
Adodc1.Refresh
On Error Resume Next 'éviter l' erreur
oRS.MoveNext 'pour se palcer au suivant
If oRS.EOF Then oRS.MovePrevious
End Sub

mais celà engendre l'erreur suivante:

Erreur d'execution '-2147467259 (80004005)':
Impossible de supprimer dans les tables spécifiées.

Merci de m'aider

48 réponses

Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Bonjour tout le monde,
D' abord :
oRS.Open "SELECT * FROM Véhicule WHERE N°véhicule = '" & Text1(0).Text & "'", oConn
Si ton N°vehicule est numérique (Entier)
oRS.Open "SELECT * FROM Véhicule WHERE N°véhicule = " & CInt(Text1(0).Text) , oConn


Maintenant :
Soit ton recordset comprend un enregistrement (celui recherché)
Soit il est vide (il n' a pas trouvé)
Pour le savoir tu testes
If Ors.Eof And oRS.Bof Then
 MsgBox "Aucun enregistrement"
Else
  On error Goto Err_Delete
  oRS.Delete
  MsgBox "Enregistrement supprimé avec succès"
  'ne fait pas de .MoveNext car ton oRS est maintenant vide
End If
Exit Sub
Err_Delete:
MsgBox Err.Description
End Sub
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
12
Bonjour Chaibat05,

Merci de ton aide, car là je ne m'en sortait pas...(trop récent les requêtes pour moi)..D'ailleurs rappel toi mon MP, concernant : Demande d'explications, cela en faisait partit entre autre de comprendre les requêtes(ajout/suppression/modification/recherche) dans une bdd...

Dommage pour moi...

A+
Exploreur

 
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Bonjour Exploreur,
bien sûr que je me rappelle ton MP ...
et rassures toi personne ne t' en voudra...
Le fait est qu'  il fallait distinguer entre
Requete Action (Ajout/Suppression/Mise à jour) et requete Selection.
Dans ce cas précis,vous tentiez d' éxécuter une requête Action en l' associant
à un RecordSet alors qu' elle doit être éxécutée via la connection.
Avec un recordset on ne peut faire que SELECT .et c' est après qu' on peut
effectuer la suppression..car le recordset permet toutes les actions mais en tant
que jeu d' enregisment mais pas en mode transaction..

A+


Ps: au rythm de tes participations, tu maitriseras bientôt la question...
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
12
Salut Chaibat05,

Donc si bien compris ton code, on fait dans un premier temps une requêtes séléction(on "remplis le recordset), on vérifie ce ce que l'on cherche dans le rst, si cela correspond on efface sinon on sort ?

Donc on aurai pu lancer la requête avec :

oconn.execute Sql ?

Je cherche juste à comprendre car je suis entrain de refaire une Maj d'une de mes sources pour y intégrer des requêtes, ne m'en veux pas...

A+
Exploreur

 
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Tout à fait Exploreur,
tu vois que tu comprends vite

PS: je t' en voudrais si tu continues avec tes "...ne m' en vuewx pas...!"
tu sais très bien que je suis dispo...
Messages postés
335
Date d'inscription
vendredi 21 octobre 2005
Statut
Membre
Dernière intervention
8 mars 2008

ça me rend dingue ce code
ça marche pas toujours
je nete casse plus la tete Explorateur
laisses tombé

ça marchera jamais
Messages postés
335
Date d'inscription
vendredi 21 octobre 2005
Statut
Membre
Dernière intervention
8 mars 2008

voici un code qui marche mais qui supprime le premier enregistrement et pas celui sélectionné :

Private Sub Suppression_Click()
strDB = "C:\pesageo.mdb"
strTable = "Véhicule"

Set oConn = New ADODB.Connection
oConn.Provider = "Microsoft.Jet.OLEDB.4.0"
oConn.Open strDB

Set oRS = New ADODB.Recordset
oRS.CursorLocation = adUseClient
oRS.Open strTable, oConn, adOpenDynamic, adLockOptimistic, adCmdTable

If oRS.EOF And oRS.BOF Then
 MsgBox "Aucun enregistrement"
Else
  On Error GoTo Err_Delete
  oRS.Delete
  MsgBox "Enregistrement supprimé avec succès"
  'ne fait pas de .MoveNext car ton oRS est maintenant vide
  Adodc1.Refresh
End If
Exit Sub
Err_Delete:
MsgBox err.Description

End Sub
Messages postés
335
Date d'inscription
vendredi 21 octobre 2005
Statut
Membre
Dernière intervention
8 mars 2008

si je remplace cette ligne :
oRS.Open strTable, oConn, adOpenDynamic, adLockOptimistic, adCmdTable
par:
oRS.Open "SELECT * FROM Véhicule WHERE N°véhicule = '" & Text1(0).Text & "'", oConn
alors ce message apparait et rien ne se produit:
Le jeu d'enregistrements suivant ne prend pas en charge la mise à jour. Il s'agit peut etre d'une limitation du fournisseur ou du type de verrou sélectionné.

Franchement c'est du chinois pour moi.
Messages postés
335
Date d'inscription
vendredi 21 octobre 2005
Statut
Membre
Dernière intervention
8 mars 2008

t'es génial Chaibat merci infiniment c'est résolu.
Messages postés
335
Date d'inscription
vendredi 21 octobre 2005
Statut
Membre
Dernière intervention
8 mars 2008

j'ai un autre problème avec un bouton que j'ai nommé Modifier et je ne sais pas d'où saute un message d'erreur quand j'essaie de parcourir les enregistrements à partir de adodc1 ou bien quand je ferme ma Form.
voici mon code:
Private Sub update_Click()
Dim enr1, enr2 As String
' Chemin complet et nom de la base
strDB = "C:\pesageo.mdb"
' Nom de la table
strTable = "Véhicule"
 
Set oConn = New ADODB.Connection
oConn.Provider = "Microsoft.Jet.OLEDB.4.0"
oConn.Open strDB
 
Set oRS = New ADODB.Recordset
oRS.CursorLocation = adUseClient
oRS.Open strTable, oConn, adOpenDynamic, adLockOptimistic, adCmdTable
 
     enr1 = Text1(0).Text ' Extraction de la ligne en cours
     enr2 = Text1(1).Text
     oRS.Fields("N°véhicule") = enr1  ' remplacer Champ1 par le vrai nom du champ
     oRS.Fields("Libellé") = enr2
     oRS.update
  
MsgBox ("Votre modification est enregistrée!")
End Sub

voici le message:
l'opération doit utiliser une requête qui peut être mise à jour.
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Pourquoi il faut toujours que tu te compliques la vie ...?
Il faut tirer profit de ce qui marche ...!


Private Sub Modifier_Click()
strDB = "C:\pesageo.mdb"
strTable = "Véhicule"


Set oConn = New ADODB.Connection
oConn.Provider = "Microsoft.Jet.OLEDB.4.0"
oConn.Open strDB


Set oRS = New ADODB.Recordset
oRS.CursorLocation = adUseClient
oRS.Open oRS.Open "SELECT * FROM Véhicule WHERE N°véhicule = '" & Text1(0).Text & _
 "'" , oConn, adOpenDynamic, adLockOptimistic, adCmdText


If oRS.EOF And oRS.BOF Then
 MsgBox "Aucun enregistrement"
Else
  On Error GoTo Err_Update
     enr1 = Text1(0).Text ' Extraction de la ligne en cours
     enr2 = Text1(1).Text
      oRs.Edit
     oRS.Fields("N°véhicule") = enr1  ' remplacer Champ1 par le vrai nom du champ
     oRS.Fields("Libellé") = enr2
     oRs.Update
     MsgBox "Enregistrement Modifié avec succès"
     Adodc1.Refresh
End If
Exit Sub
Err_Update:
MsgBox err.Description


End Sub

tu remarques qu' un simple Copier/Coller et deux petites modifications suffisen
Messages postés
335
Date d'inscription
vendredi 21 octobre 2005
Statut
Membre
Dernière intervention
8 mars 2008

j'ai fait exactement ce que tu m'as dit et voici une erreur qui surgie dans cette ligne:
oRS.Edit

erreur =
Méthode ou membre de données introuvable
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
supprimes oRS.Edit et tapes oRS.
et regardes si une liste des méthodes s' affichera
Messages postés
335
Date d'inscription
vendredi 21 octobre 2005
Statut
Membre
Dernière intervention
8 mars 2008

oui ça s'affiche lequel dois je choisir?
Messages postés
335
Date d'inscription
vendredi 21 octobre 2005
Statut
Membre
Dernière intervention
8 mars 2008

mais il y a pas Edit tout court ça n'existe pas dans la iste des méthodes
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
u as EditMode quelque chose ?
si oui testes tout ce qui correspond à Edit

J' ai pas d' exemple avec Ado, c' est pour ça que je ne sais pas encore
Messages postés
335
Date d'inscription
vendredi 21 octobre 2005
Statut
Membre
Dernière intervention
8 mars 2008

j'ai essayé avec editmode mas cette erreur est génerée:

Utilisation incorrecte de la propriété

???
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Après EditMode fait un espace puis addAllAffected je pense...


si ç a marche pas, laisses tomber pour cette nuit


on verra plus tard


A+
Messages postés
335
Date d'inscription
vendredi 21 octobre 2005
Statut
Membre
Dernière intervention
8 mars 2008

ça marche pas ça affiche que cette variable n'est pas définie, je parle de:
addAllAffected

Merci pour ton aide
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
laisses tomber oRS pour la modif
et fais une requete Mise à jour avec oConn


Private Sub Modifier_Click()
Dim enr1, enr2 As String
' Chemin complet et nom de la base
strDB = "C:\pesageo.mdb"
' Nom de la table
strTable = "Véhicule"
 
Set oConn = New ADODB.Connection
oConn.Provider = "Microsoft.Jet.OLEDB.4.0"
oConn.Open strDB


On Error GoTo Err_Update
     enr1 = Text1(0).Text ' Extraction de la ligne en cours
     enr2 = Text1(1).Text


Dim sQuery as StringsQuery"Update Vehicule Set N°véhicule '" & enr1 & _
 "', Libellé='" & "enr2"' & " Where N°véhicule = '" & Text1(0).Text & "'"


oConn.Execute sQuery


Adodc1.Refresh


Exit Sub
Err_Update:
MsgBox err.Description


End Sub

question : pourquoi tu remplaces Text1(0).Text
par Text1(0).Text ?