OVH Cloud OVH Cloud

Erreur 3027 Read-Only

5 réponses
Avatar
Francois Soucy
Bonjour à tous,
J'ai un petit problème pour modifier un enregistrement dans
une base de donnée Access XP.
Je montre comment le code est fait....
##########
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase(App.Path & "\Recettes.mdb")
Set rs = db.OpenRecordset("ingredients", dbOpenTable)
'
' Un peu plus loin dans le prog....
'
Set rs = db.OpenRecordset("Select * from Ingredients, Classes where
Ingredients = '" & Trim(lstIngredient.List(lstIngredient.ListIndex)) & "'" &
"And Ingredients.ClasseskId = Classes.kId", dbOpenDynaset)
'
' Et lorsque je clique sur Sauvegarder..
'
rs.Edit
rs("IngDesc") = TxtIngDesc.Text
rs.Update

########
Le programme plante ici à la ligne rs.edit en me disant que j'ai une erreur
3027 (La base de données ou l'objet est en lecture seule. J'ai essayé
plusieurs types d'ouverture mais je tombe toujours sur la même erreur ? Vous
savez où je dois chercher mon erreur ?? Elle me fait suer à grosses goutes
depuis 3-4 hrs!!!

Merci
Francois

5 réponses

Avatar
Bismark Prods
tu peux déjà aller voir dans ton disque dur si le fichier n'est pas en
lecture seule ?


"Francois Soucy" a écrit dans le message de
news:y25Oa.19989$
Bonjour à tous,
J'ai un petit problème pour modifier un enregistrement


dans
une base de donnée Access XP.
Je montre comment le code est fait....
##########
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase(App.Path & "Recettes.mdb")
Set rs = db.OpenRecordset("ingredients", dbOpenTable)
'
' Un peu plus loin dans le prog....
'
Set rs = db.OpenRecordset("Select * from Ingredients, Classes where
Ingredients = '" & Trim(lstIngredient.List(lstIngredient.ListIndex)) & "'"


&
"And Ingredients.ClasseskId = Classes.kId", dbOpenDynaset)
'
' Et lorsque je clique sur Sauvegarder..
'
rs.Edit
rs("IngDesc") = TxtIngDesc.Text
rs.Update

########
Le programme plante ici à la ligne rs.edit en me disant que j'ai une


erreur
3027 (La base de données ou l'objet est en lecture seule. J'ai essayé
plusieurs types d'ouverture mais je tombe toujours sur la même erreur ?


Vous
savez où je dois chercher mon erreur ?? Elle me fait suer à grosses


goutes
depuis 3-4 hrs!!!

Merci
Francois




Avatar
Alain Cotterot
Salut

Je jeterais un coup d'oeil sur les clés primaires. Pour qu'une requète soit
"Updatable", il faut impérativement avoir une clé primaire.

Alain Cotterot

Francois Soucy a écrit dans le message :
y25Oa.19989$
Bonjour à tous,
J'ai un petit problème pour modifier un enregistrement


dans
une base de donnée Access XP.
Je montre comment le code est fait....
##########
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase(App.Path & "Recettes.mdb")
Set rs = db.OpenRecordset("ingredients", dbOpenTable)
'
' Un peu plus loin dans le prog....
'
Set rs = db.OpenRecordset("Select * from Ingredients, Classes where
Ingredients = '" & Trim(lstIngredient.List(lstIngredient.ListIndex)) & "'"


&
"And Ingredients.ClasseskId = Classes.kId", dbOpenDynaset)
'
' Et lorsque je clique sur Sauvegarder..
'
rs.Edit
rs("IngDesc") = TxtIngDesc.Text
rs.Update

########
Le programme plante ici à la ligne rs.edit en me disant que j'ai une


erreur
3027 (La base de données ou l'objet est en lecture seule. J'ai essayé
plusieurs types d'ouverture mais je tombe toujours sur la même erreur ?


Vous
savez où je dois chercher mon erreur ?? Elle me fait suer à grosses


goutes
depuis 3-4 hrs!!!

Merci
Francois




Avatar
Francois Soucy
Bonjour,

Je suis reparti du début et j'ai trouvé quelque chose. Cela arrange pas mon
problème, mais peut être que qqun saura plus m'éclairer avec cela.
Lors que j'ouvre mon "Recordset (rs)" de la manière suivant je peux faire un
.edit sur le champ:
'#### Méthode qui fonctionne #####
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase(App.Path & "recettes.mdb")
Set rs = db.OpenRecordset("ingredients", dbOpenTable)
rs.Edit
rs("IngDesc") = TxtIngDesc.Text
rs.Update
'############################

Mais si j'ouvre mon recordset de la manière suivant (cela doit être fait
dans la prog...) alors là je ne peux plus edit un champ dans la table.
J'obtient toujours la même erreur 3027 comme quoi que ma base de données est
read-only
'#### Méthode qui NE fonctionne PAS #####
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase(App.Path & "recettes.mdb")
Set rs = db.OpenRecordset("Select * from Ingredients, Classes where
Ingredients = '" & Trim(lstIngredient.List(lstIngredient.ListIndex)) & "'" &
" Ingredients.ClasseskId = Classes.kId", dbOpenDynaset)
rs.Edit
rs("IngDesc") = TxtIngDesc.Text
rs.Update
'############################

Est-ce que ca peut éclairer qqun? Parce que je doit vraiment utiliser une
méthode comportant un select sur deux table (donc pas de dbOpenTable)

Merci
Francois

ps: Les droit d'access sont tous OK et j'ai bel et bien des clefs primaires


"Alain Cotterot" wrote in message
news:pIUOa.87195$
Salut

Je jeterais un coup d'oeil sur les clés primaires. Pour qu'une requète


soit
"Updatable", il faut impérativement avoir une clé primaire.

Alain Cotterot

Francois Soucy a écrit dans le message :
y25Oa.19989$
> Bonjour à tous,
> J'ai un petit problème pour modifier un enregistrement
dans
> une base de donnée Access XP.
> Je montre comment le code est fait....
> ##########
> Set ws = DBEngine.Workspaces(0)
> Set db = ws.OpenDatabase(App.Path & "Recettes.mdb")
> Set rs = db.OpenRecordset("ingredients", dbOpenTable)
> '
> ' Un peu plus loin dans le prog....
> '
> Set rs = db.OpenRecordset("Select * from Ingredients, Classes where
> Ingredients = '" & Trim(lstIngredient.List(lstIngredient.ListIndex)) &


"'"
&
> "And Ingredients.ClasseskId = Classes.kId", dbOpenDynaset)
> '
> ' Et lorsque je clique sur Sauvegarder..
> '
> rs.Edit
> rs("IngDesc") = TxtIngDesc.Text
> rs.Update
>
> ########
> Le programme plante ici à la ligne rs.edit en me disant que j'ai une
erreur
> 3027 (La base de données ou l'objet est en lecture seule. J'ai essayé
> plusieurs types d'ouverture mais je tombe toujours sur la même erreur ?
Vous
> savez où je dois chercher mon erreur ?? Elle me fait suer à grosses
goutes
> depuis 3-4 hrs!!!
>
> Merci
> Francois
>
>




Avatar
Bluesy
Salut.

Je ne sais pas si ça a à voir, mais il manque pas un AND dans ta clause where
?

Set rs = db.OpenRecordset("Select * from Ingredients, Classes " & _
"where Ingredients = '" & _
Trim$(lstIngredient.List(lstIngredient.ListIndex)) & "'" & _
" AND Ingredients.ClasseskId = Classes.kId", _
dbOpenDynaset)

Un certain Francois Soucy écrivait ici même ce qui suit:

'#### Méthode qui NE fonctionne PAS #####
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase(App.Path & "recettes.mdb")
Set rs = db.OpenRecordset("Select * from Ingredients, Classes where
Ingredients = '" & Trim(lstIngredient.List(lstIngredient.ListIndex)) &
"'" & " Ingredients.ClasseskId = Classes.kId", dbOpenDynaset)
rs.Edit
rs("IngDesc") = TxtIngDesc.Text
rs.Update


Avatar
Bluesy
Sinon, tu as une liaison entre 2 table. Je pense que c'est ça qui te mets ton
rs en lecture seule.
Je pense qu'il serait pas mal d'avoir 2 requettes :
- la requette actuelle (pour l'affichage, je suppose...)
- Une requette pour la mise à jour
2 solutions pour ça :
- Tu crées un nouveau rs avec
SELECT IngDesc From Ingrédient Where Ingredtion.TonIndex =
idingredientàmodifier
puis tu fait ton update
- Tu fait une requête Update (Syntaxe dans l'aide)

Espérant t'avoir aidé...

Un certain Bluesy <bluesy49 écrivait ici même ce qui suit:

Salut.

Je ne sais pas si ça a à voir, mais il manque pas un AND dans ta clause
where ?

Set rs = db.OpenRecordset("Select * from Ingredients, Classes " & _
"where Ingredients = '" & _
Trim$(lstIngredient.List(lstIngredient.ListIndex)) &
"'" & _
" AND Ingredients.ClasseskId = Classes.kId", _
dbOpenDynaset)

Un certain Francois Soucy écrivait ici même ce qui suit:

'#### Méthode qui NE fonctionne PAS #####
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase(App.Path & "recettes.mdb")
Set rs = db.OpenRecordset("Select * from Ingredients, Classes where
Ingredients = '" & Trim(lstIngredient.List(lstIngredient.ListIndex)) &
"'" & " Ingredients.ClasseskId = Classes.kId", dbOpenDynaset)
rs.Edit
rs("IngDesc") = TxtIngDesc.Text
rs.Update