basamir
Messages postés335Date d'inscriptionvendredi 21 octobre 2005StatutMembreDernière intervention 8 mars 2008
-
19 avril 2007 à 23:19
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 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
A voir également:
Suppression d'un enregistrement ACCESS à partir d'un feuile VB
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 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
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 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...
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 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...
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
basamir
Messages postés335Date d'inscriptionvendredi 21 octobre 2005StatutMembreDerniè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
basamir
Messages postés335Date d'inscriptionvendredi 21 octobre 2005StatutMembreDerniè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é.
basamir
Messages postés335Date d'inscriptionvendredi 21 octobre 2005StatutMembreDerniè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.
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 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
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 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 ?