Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Pb sur Access

5 réponses
Avatar
Emilie
Bonjour

Dans une procédure, je veux mettre à jour une table Access :
Ma table contient un champs numérique "Ordre"
et champs string "IDarticle"
Quand un enregistrement est supprimé il me renuméroter le champs "Ordre"

Pour cela je fais une procédure en boucle sur la table pour récuperer
l'IDarticle du premier enregistrement
Dans cette procédure j'en intègre une autre pour extraire l'enregistrement
et faire un Update sur le champs Ordre

Quand je teste cela marche 1 fois sur deux, quand cela beug :
c'est sur la deuxième procédure et j'ai le message : impossible de mettre à
jour, actuellement vérouillée

Voyez-vous pourquoi ?

Merci pour vos réponses
Emilie

5 réponses

Avatar
Jérémy Jeanson
Bonjour Emilie,

Pourrais tu nous indiquer la méthode que tu utilises pour lire tes données?
Tel quel ça ressemble à une écriture qui tente de se faire alors que la
donnée est verrouillée en lecture... par un DataReader par exemple.
--
Jérémy JEANSON,
MCP

http://www.jjeanson.fr/

"Emilie" a écrit dans le message de groupe de
discussion : 4ae84933$0$913$
Bonjour

Dans une procédure, je veux mettre à jour une table Access :
Ma table contient un champs numérique "Ordre"
et champs string "IDarticle"
Quand un enregistrement est supprimé il me renuméroter le champs "Ordre"

Pour cela je fais une procédure en boucle sur la table pour récuperer
l'IDarticle du premier enregistrement
Dans cette procédure j'en intègre une autre pour extraire l'enregistrement
et faire un Update sur le champs Ordre

Quand je teste cela marche 1 fois sur deux, quand cela beug :
c'est sur la deuxième procédure et j'ai le message : impossible de mettre
à jour, actuellement vérouillée

Voyez-vous pourquoi ?

Merci pour vos réponses
Emilie



Avatar
Emilie
Bonjour Jérémy

Voici mon code :

Sub VoirNum()

'connection a la base de données

Using connexion As OleDbConnection = Me.DBConn

'DBConn.Open()

Dim DBCommand As OleDbCommand

'Objet Dataset

Dim DSPageData As New DataSet

'connection a la base de données

DBCommand = New OleDbCommand("Select * From StockTRAV Where
IDrayon=?", connexion)

'objet DataAdapter

Dim myOleDbDataAdapter As New OleDbDataAdapter(DBCommand)

DBCommand.Parameters.AddWithValue("IDrayon", Session("IDrayon"))

myOleDbDataAdapter.SelectCommand.Parameters("IDrayon").Value =
Session("IDrayon")

myOleDbDataAdapter.Fill(DSPageData, "NbRef")

Session("NbRef") = DSPageData.Tables("NbRef").Rows.Count

Dim VoirNbNum As Integer = Session("NbRef")

Dim counter As Integer = 1

Dim Lid As String = ""

Dim EnPromo As String = ""

Dim EnCC As String = ""

For i = 0 To VoirNbNum - 1

If counter <= VoirNbNum + 1 Then

Session("Num") = counter

Lid = DSPageData.Tables("NbRef").Rows(counter -
1).Item("IDarticle")

Session("RefProd") = Lid

'Dim Larticle
Dim Avoir As String = Lid

ModifierNum()

End If

counter += 1

Next i

DBConn.Close()

End Using

End Sub

Sub ModifierNum()

Dim LOR As String = Session("Num")

Using connexion As OleDbConnection = Me.DBConn

'DBConn.Open()

'objet DataAdapter

Dim PourVoir As String = Session("RefProd")

Dim DBUpdate As New OleDbCommand

DBUpdate.CommandText = "Update StockTRAV set " _

& "Ordre= @Ordre" _

& " Where IDarticle= ?"

Dim myOleDbDataAdapter As New OleDbDataAdapter(DBUpdate)

DBUpdate.Parameters.AddWithValue("Ordre", Session("Num"))

DBUpdate.Parameters.AddWithValue("IDarticle",
Session("RefProd"))

DBUpdate.Connection = DBConn

DBUpdate.Connection.Open()

DBUpdate.ExecuteNonQuery()

DBConn.Close()

End Using

End Sub

Merci pour ton aide
Emilie


"Jérémy Jeanson" a écrit dans le message de news:

Bonjour Emilie,

Pourrais tu nous indiquer la méthode que tu utilises pour lire tes
données? Tel quel ça ressemble à une écriture qui tente de se faire alors
que la donnée est verrouillée en lecture... par un DataReader par exemple.
--
Jérémy JEANSON,
MCP

http://www.jjeanson.fr/

"Emilie" a écrit dans le message de groupe de
discussion : 4ae84933$0$913$
Bonjour

Dans une procédure, je veux mettre à jour une table Access :
Ma table contient un champs numérique "Ordre"
et champs string "IDarticle"
Quand un enregistrement est supprimé il me renuméroter le champs "Ordre"

Pour cela je fais une procédure en boucle sur la table pour récuperer
l'IDarticle du premier enregistrement
Dans cette procédure j'en intègre une autre pour extraire
l'enregistrement et faire un Update sur le champs Ordre

Quand je teste cela marche 1 fois sur deux, quand cela beug :
c'est sur la deuxième procédure et j'ai le message : impossible de mettre
à jour, actuellement vérouillée

Voyez-vous pourquoi ?

Merci pour vos réponses
Emilie





Avatar
Bonjour Emilie,

Je ne sais pas du tout s'il y a 1 rapport, mais j'ai eu ce genre de
désagrément la 1ère fois avec du SQL.
Après le ExecuteNonQuery du SqlCeCommand, j'ai dû ajouter pour régler mon
problème :
Commit du SqlCeTransaction avec le paramètre CommitMode.Immediate
Je mets le code avant et après, si ca peut t'aider.

Stéphane


'Sub ExecuteNonQuery_old(ByVal req As String, ByVal connection_bdd
As SqlCeConnection)
' Dim sc As New SqlCeCommand(req, connection_bdd)
' sc.ExecuteNonQuery()
'End Sub

Function ExecuteNonQuery(ByVal req As String, ByVal connection_bdd
As SqlCeConnection) As Boolean
Dim st As SqlCeTransaction = connection_bdd.BeginTransaction()
Dim sc As SqlCeCommand = connection_bdd.CreateCommand()
sc.Transaction = st
Try
sc.CommandText = req
sc.ExecuteNonQuery()
st.Commit(CommitMode.Immediate)
Return True
Catch ex As Exception
st.Rollback()
Return False
End Try
End Function


"Emilie" a écrit dans le message de news:
4ae96918$0$996$
Bonjour Jérémy

Voici mon code :

Sub VoirNum()

'connection a la base de données

Using connexion As OleDbConnection = Me.DBConn

'DBConn.Open()

Dim DBCommand As OleDbCommand

'Objet Dataset

Dim DSPageData As New DataSet

'connection a la base de données

DBCommand = New OleDbCommand("Select * From StockTRAV Where
IDrayon=?", connexion)

'objet DataAdapter

Dim myOleDbDataAdapter As New OleDbDataAdapter(DBCommand)

DBCommand.Parameters.AddWithValue("IDrayon",
Session("IDrayon"))

myOleDbDataAdapter.SelectCommand.Parameters("IDrayon").Value =
Session("IDrayon")

myOleDbDataAdapter.Fill(DSPageData, "NbRef")

Session("NbRef") = DSPageData.Tables("NbRef").Rows.Count

Dim VoirNbNum As Integer = Session("NbRef")

Dim counter As Integer = 1

Dim Lid As String = ""

Dim EnPromo As String = ""

Dim EnCC As String = ""

For i = 0 To VoirNbNum - 1

If counter <= VoirNbNum + 1 Then

Session("Num") = counter

Lid = DSPageData.Tables("NbRef").Rows(counter -
1).Item("IDarticle")

Session("RefProd") = Lid

'Dim Larticle >
Dim Avoir As String = Lid

ModifierNum()

End If

counter += 1

Next i

DBConn.Close()

End Using

End Sub

Sub ModifierNum()

Dim LOR As String = Session("Num")

Using connexion As OleDbConnection = Me.DBConn

'DBConn.Open()

'objet DataAdapter

Dim PourVoir As String = Session("RefProd")

Dim DBUpdate As New OleDbCommand

DBUpdate.CommandText = "Update StockTRAV set " _

& "Ordre= @Ordre" _

& " Where IDarticle= ?"

Dim myOleDbDataAdapter As New OleDbDataAdapter(DBUpdate)

DBUpdate.Parameters.AddWithValue("Ordre", Session("Num"))

DBUpdate.Parameters.AddWithValue("IDarticle",
Session("RefProd"))

DBUpdate.Connection = DBConn

DBUpdate.Connection.Open()

DBUpdate.ExecuteNonQuery()

DBConn.Close()

End Using

End Sub

Merci pour ton aide
Emilie


"Jérémy Jeanson" a écrit dans le message de news:

Bonjour Emilie,

Pourrais tu nous indiquer la méthode que tu utilises pour lire tes
données? Tel quel ça ressemble à une écriture qui tente de se faire alors
que la donnée est verrouillée en lecture... par un DataReader par
exemple.
--
Jérémy JEANSON,
MCP

http://www.jjeanson.fr/

"Emilie" a écrit dans le message de groupe de
discussion : 4ae84933$0$913$
Bonjour

Dans une procédure, je veux mettre à jour une table Access :
Ma table contient un champs numérique "Ordre"
et champs string "IDarticle"
Quand un enregistrement est supprimé il me renuméroter le champs "Ordre"

Pour cela je fais une procédure en boucle sur la table pour récuperer
l'IDarticle du premier enregistrement
Dans cette procédure j'en intègre une autre pour extraire
l'enregistrement et faire un Update sur le champs Ordre

Quand je teste cela marche 1 fois sur deux, quand cela beug :
c'est sur la deuxième procédure et j'ai le message : impossible de
mettre à jour, actuellement vérouillée

Voyez-vous pourquoi ?

Merci pour vos réponses
Emilie









Avatar
Patrice
Sans certitude mais je ferais aussi un "dispose" ou un "close" de tous les
objets (à part donc la connexion qui a déjà son "using") qui disposent d'une
méthode close ou dispose (par exemple OleDbCommand.dispose)...

--
Patrice

"Emilie" a écrit dans le message de
news:4ae96918$0$996$
Bonjour Jérémy

Voici mon code :

Sub VoirNum()

'connection a la base de données

Using connexion As OleDbConnection = Me.DBConn

'DBConn.Open()

Dim DBCommand As OleDbCommand

'Objet Dataset

Dim DSPageData As New DataSet

'connection a la base de données

DBCommand = New OleDbCommand("Select * From StockTRAV Where
IDrayon=?", connexion)

'objet DataAdapter

Dim myOleDbDataAdapter As New OleDbDataAdapter(DBCommand)

DBCommand.Parameters.AddWithValue("IDrayon",
Session("IDrayon"))

myOleDbDataAdapter.SelectCommand.Parameters("IDrayon").Value =
Session("IDrayon")

myOleDbDataAdapter.Fill(DSPageData, "NbRef")

Session("NbRef") = DSPageData.Tables("NbRef").Rows.Count

Dim VoirNbNum As Integer = Session("NbRef")

Dim counter As Integer = 1

Dim Lid As String = ""

Dim EnPromo As String = ""

Dim EnCC As String = ""

For i = 0 To VoirNbNum - 1

If counter <= VoirNbNum + 1 Then

Session("Num") = counter

Lid = DSPageData.Tables("NbRef").Rows(counter -
1).Item("IDarticle")

Session("RefProd") = Lid

'Dim Larticle >
Dim Avoir As String = Lid

ModifierNum()

End If

counter += 1

Next i

DBConn.Close()

End Using

End Sub

Sub ModifierNum()

Dim LOR As String = Session("Num")

Using connexion As OleDbConnection = Me.DBConn

'DBConn.Open()

'objet DataAdapter

Dim PourVoir As String = Session("RefProd")

Dim DBUpdate As New OleDbCommand

DBUpdate.CommandText = "Update StockTRAV set " _

& "Ordre= @Ordre" _

& " Where IDarticle= ?"

Dim myOleDbDataAdapter As New OleDbDataAdapter(DBUpdate)

DBUpdate.Parameters.AddWithValue("Ordre", Session("Num"))

DBUpdate.Parameters.AddWithValue("IDarticle",
Session("RefProd"))

DBUpdate.Connection = DBConn

DBUpdate.Connection.Open()

DBUpdate.ExecuteNonQuery()

DBConn.Close()

End Using

End Sub

Merci pour ton aide
Emilie


"Jérémy Jeanson" a écrit dans le message de news:

Bonjour Emilie,

Pourrais tu nous indiquer la méthode que tu utilises pour lire tes
données? Tel quel ça ressemble à une écriture qui tente de se faire alors
que la donnée est verrouillée en lecture... par un DataReader par
exemple.
--
Jérémy JEANSON,
MCP

http://www.jjeanson.fr/

"Emilie" a écrit dans le message de groupe de
discussion : 4ae84933$0$913$
Bonjour

Dans une procédure, je veux mettre à jour une table Access :
Ma table contient un champs numérique "Ordre"
et champs string "IDarticle"
Quand un enregistrement est supprimé il me renuméroter le champs "Ordre"

Pour cela je fais une procédure en boucle sur la table pour récuperer
l'IDarticle du premier enregistrement
Dans cette procédure j'en intègre une autre pour extraire
l'enregistrement et faire un Update sur le champs Ordre

Quand je teste cela marche 1 fois sur deux, quand cela beug :
c'est sur la deuxième procédure et j'ai le message : impossible de
mettre à jour, actuellement vérouillée

Voyez-vous pourquoi ?

Merci pour vos réponses
Emilie









Avatar
Jérémy Jeanson
Bonjour tout le monde,

Dans ton code d'Emilie, le gros soucis c'est qu'il y a utilisation de
données par deux DataAdapter en même temps!?
As tu déjà remarqué que le DataAdapter te permes de lire, mais aussi de
mettre à jour des donnée?
Les propriété "Ordre" et "IDarticle" peuvent être mises à jour directement à
partir du DataSet. ensuite il faut demander un update de la base de données

voir documentation par ici :
http://msdn.microsoft.com/fr-fr/library/system.data.common.dataadapter.update.aspx
--
Jérémy JEANSON,
MCP

http://www.jjeanson.fr/

"Patrice" <http://scribe-fr.blogspot.com/> a écrit dans le message de groupe
de discussion : #
Sans certitude mais je ferais aussi un "dispose" ou un "close" de tous les
objets (à part donc la connexion qui a déjà son "using") qui disposent
d'une méthode close ou dispose (par exemple OleDbCommand.dispose)...

--
Patrice

"Emilie" a écrit dans le message de
news:4ae96918$0$996$
Bonjour Jérémy

Voici mon code :

Sub VoirNum()

'connection a la base de données

Using connexion As OleDbConnection = Me.DBConn

'DBConn.Open()

Dim DBCommand As OleDbCommand

'Objet Dataset

Dim DSPageData As New DataSet

'connection a la base de données

DBCommand = New OleDbCommand("Select * From StockTRAV Where
IDrayon=?", connexion)

'objet DataAdapter

Dim myOleDbDataAdapter As New OleDbDataAdapter(DBCommand)

DBCommand.Parameters.AddWithValue("IDrayon",
Session("IDrayon"))

myOleDbDataAdapter.SelectCommand.Parameters("IDrayon").Value =
Session("IDrayon")

myOleDbDataAdapter.Fill(DSPageData, "NbRef")

Session("NbRef") = DSPageData.Tables("NbRef").Rows.Count

Dim VoirNbNum As Integer = Session("NbRef")

Dim counter As Integer = 1

Dim Lid As String = ""

Dim EnPromo As String = ""

Dim EnCC As String = ""

For i = 0 To VoirNbNum - 1

If counter <= VoirNbNum + 1 Then

Session("Num") = counter

Lid = DSPageData.Tables("NbRef").Rows(counter -
1).Item("IDarticle")

Session("RefProd") = Lid

'Dim Larticle >>
Dim Avoir As String = Lid

ModifierNum()

End If

counter += 1

Next i

DBConn.Close()

End Using

End Sub

Sub ModifierNum()

Dim LOR As String = Session("Num")

Using connexion As OleDbConnection = Me.DBConn

'DBConn.Open()

'objet DataAdapter

Dim PourVoir As String = Session("RefProd")

Dim DBUpdate As New OleDbCommand

DBUpdate.CommandText = "Update StockTRAV set " _

& "Ordre= @Ordre" _

& " Where IDarticle= ?"

Dim myOleDbDataAdapter As New OleDbDataAdapter(DBUpdate)

DBUpdate.Parameters.AddWithValue("Ordre", Session("Num"))

DBUpdate.Parameters.AddWithValue("IDarticle",
Session("RefProd"))

DBUpdate.Connection = DBConn

DBUpdate.Connection.Open()

DBUpdate.ExecuteNonQuery()

DBConn.Close()

End Using

End Sub

Merci pour ton aide
Emilie


"Jérémy Jeanson" a écrit dans le message de
news:
Bonjour Emilie,

Pourrais tu nous indiquer la méthode que tu utilises pour lire tes
données? Tel quel ça ressemble à une écriture qui tente de se faire
alors que la donnée est verrouillée en lecture... par un DataReader par
exemple.
--
Jérémy JEANSON,
MCP

http://www.jjeanson.fr/

"Emilie" a écrit dans le message de groupe de
discussion : 4ae84933$0$913$
Bonjour

Dans une procédure, je veux mettre à jour une table Access :
Ma table contient un champs numérique "Ordre"
et champs string "IDarticle"
Quand un enregistrement est supprimé il me renuméroter le champs
"Ordre"

Pour cela je fais une procédure en boucle sur la table pour récuperer
l'IDarticle du premier enregistrement
Dans cette procédure j'en intègre une autre pour extraire
l'enregistrement et faire un Update sur le champs Ordre

Quand je teste cela marche 1 fois sur deux, quand cela beug :
c'est sur la deuxième procédure et j'ai le message : impossible de
mettre à jour, actuellement vérouillée

Voyez-vous pourquoi ?

Merci pour vos réponses
Emilie