Suppression d'un enregistrement ACCESS à partir d'un feuile VB

Résolu
basamir Messages postés 335 Date d'inscription vendredi 21 octobre 2005 Statut Membre Dernière intervention 8 mars 2008 - 19 avril 2007 à 23:19
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 - 23 avril 2007 à 02:10
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

chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
21 avril 2007 à 14:24
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
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
21 avril 2007 à 14:52
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

 
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
21 avril 2007 à 15:28
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...
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
21 avril 2007 à 15:41
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

 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
21 avril 2007 à 15:49
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...
0
basamir Messages postés 335 Date d'inscription vendredi 21 octobre 2005 Statut Membre Dernière intervention 8 mars 2008
21 avril 2007 à 18:23
ça me rend dingue ce code
ça marche pas toujours
je nete casse plus la tete Explorateur
laisses tombé

ça marchera jamais
0
basamir Messages postés 335 Date d'inscription vendredi 21 octobre 2005 Statut Membre Dernière intervention 8 mars 2008
21 avril 2007 à 18:34
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
0
basamir Messages postés 335 Date d'inscription vendredi 21 octobre 2005 Statut Membre Dernière intervention 8 mars 2008
21 avril 2007 à 18:39
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.
0
basamir Messages postés 335 Date d'inscription vendredi 21 octobre 2005 Statut Membre Dernière intervention 8 mars 2008
21 avril 2007 à 23:57
t'es génial Chaibat merci infiniment c'est résolu.
0
basamir Messages postés 335 Date d'inscription vendredi 21 octobre 2005 Statut Membre Dernière intervention 8 mars 2008
22 avril 2007 à 01:25
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.
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
22 avril 2007 à 01:37
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
0
basamir Messages postés 335 Date d'inscription vendredi 21 octobre 2005 Statut Membre Dernière intervention 8 mars 2008
22 avril 2007 à 02:01
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
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
22 avril 2007 à 02:10
supprimes oRS.Edit et tapes oRS.
et regardes si une liste des méthodes s' affichera
0
basamir Messages postés 335 Date d'inscription vendredi 21 octobre 2005 Statut Membre Dernière intervention 8 mars 2008
22 avril 2007 à 02:21
oui ça s'affiche lequel dois je choisir?
0
basamir Messages postés 335 Date d'inscription vendredi 21 octobre 2005 Statut Membre Dernière intervention 8 mars 2008
22 avril 2007 à 02:26
mais il y a pas Edit tout court ça n'existe pas dans la iste des méthodes
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
22 avril 2007 à 02:29
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
0
basamir Messages postés 335 Date d'inscription vendredi 21 octobre 2005 Statut Membre Dernière intervention 8 mars 2008
22 avril 2007 à 02:33
j'ai essayé avec editmode mas cette erreur est génerée:

Utilisation incorrecte de la propriété

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


si ç a marche pas, laisses tomber pour cette nuit


on verra plus tard


A+
0
basamir Messages postés 335 Date d'inscription vendredi 21 octobre 2005 Statut Membre Dernière intervention 8 mars 2008
22 avril 2007 à 13:58
ça marche pas ça affiche que cette variable n'est pas définie, je parle de:
addAllAffected

Merci pour ton aide
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
22 avril 2007 à 21:35
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 ?
0
Rejoignez-nous