Impossible d'écrire dans une table (dbf)

Résolu
cs_pledoux Messages postés 147 Date d'inscription mardi 12 octobre 2004 Statut Membre Dernière intervention 6 mars 2007 - 13 oct. 2004 à 11:16
cs_pledoux Messages postés 147 Date d'inscription mardi 12 octobre 2004 Statut Membre Dernière intervention 6 mars 2007 - 13 oct. 2004 à 17:09
Bonjour,

Je dois écrire dans une table DBF format FoxPro 3.0. L'ouverture de la table et la lecture se passent bien mais dès que je dois écrire dans la table (.Edit sur le recorset), j'ai un message d'erreur qui m'indique une table en lecture seule alors que mon ReadOnly est bien à False.

Suit une partie de mon code avec l'ouverture, la lecture et l'écriture des données.

Merci pour vos réponses.

' Ouverture de la base = OK

data_fichier.Connect = "FoxPro 3.0"
data_fichier.DatabaseName = CheminCourt
data_fichier.RecordSource = NomCourt
data_fichier.Refresh

'Lecture d'un enreg = OK

data_fichier.Recordset.MoveFirst
fic(nb_fic_imprime).seq_deb = Format(data_fichier.Recordset!dataseq)

' Ecriture d'un enreg = Erreur 3027 : Impossible de mettre à jour. La base de données ou l'objet est en lecture seule sur la ligne du Recrodset.Edit

data_fichier.Recordset.MoveFirst
data_fichier.ReadOnly = False
data_fichier.Recordset.Edit
data_fichier.Recordset.Fields!n_fic = Format(Str(dernier_fic + nb_fic_imprime), "000000")
data_fichier.Recordset.Fields!seq_imp = "0"
data_fichier.Recordset.Update

8 réponses

cs_pledoux Messages postés 147 Date d'inscription mardi 12 octobre 2004 Statut Membre Dernière intervention 6 mars 2007
13 oct. 2004 à 17:09
Ok trouvé,

Pour les DAO il faut impérativement utiliser des chemins d'accès DOS (8 caractères max avec le ~x à la fin si ça dépasse). J'utilisai donc ces noms de fichier (CheminCourt et NomCourt) dans les ADO. En fait il faut prendre le nom Windows pour que cela marche et retirer les crochets devant et derrière le nom du champ concerné.

Pour l'instant tout marche.

Merci pour ton aide et à bientôt.
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
13 oct. 2004 à 11:23
Salut,

Tu peux peu etre essayer de faire directement tes modifications en requetes SQL.

@+
Julien
-----------------------------------------------------------
:big) Essai ca sinon on trouvera autre chose ;)
-----------------------------------------------------------
0
cs_pledoux Messages postés 147 Date d'inscription mardi 12 octobre 2004 Statut Membre Dernière intervention 6 mars 2007
13 oct. 2004 à 11:43
Salut,

J'ai déjà essayé mais j'ai du manquer quelque chose. J'ai une erreur de syntaxe sur ma requête. Le recorset vaut :
UPDATE TOTO.DBF SET [n_fic] = '010941'

Je ne vois pas où est l'erreur. Voir le code qui suit.

data_fichier.DatabaseName = CheminCourtdata_fichier.RecordSource "UPDATE " + NomCourt + " SET [n_fic] '" + Format(Str(dernier_fic + nb_fic_imprime), "000000") + "'"
data_fichier.Refresh

Merci pour vos réponses
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
13 oct. 2004 à 11:51
salut

si tu essaie d executer la requete de cette maniere est ce que ca plante aussi ?

datafichier.recorderset.source = "UPDATE ....."
datafichier.recorderset.open


J suis pas sur que ca marche car c est du DAO que tu utilise si je ne me trompe pas, et comme j utilise ADO les syntaxe derive mais l idee est de mettre la requete SQL dans le .Source d un recordset et apres de faire simplement un .Open POur l executer.

@+
Julien
-----------------------------------------------------------
:big) Essai ca sinon on trouvera autre chose ;)
-----------------------------------------------------------
0

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

Posez votre question
cs_pledoux Messages postés 147 Date d'inscription mardi 12 octobre 2004 Statut Membre Dernière intervention 6 mars 2007
13 oct. 2004 à 12:17
Salut,

Mon code est en DAO (un peu obsolète). Si tu peux me le traduite en ADO c'est volontiers. C'sst toujour la même chose, j'ouvre des table FoxPro pour lire et écrire dedans.

Merci
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
13 oct. 2004 à 14:24
Re,

En fait il faudrait que tu regarde le Provider pour acceder a FoxPro par ADO car je le connais pas. et ensuite on regardera comment faire avec ADO mais tu verras c est tout bete.

@+
Julien
-----------------------------------------------------------
:big) Essai ca sinon on trouvera autre chose ;)
-----------------------------------------------------------
0
cs_pledoux Messages postés 147 Date d'inscription mardi 12 octobre 2004 Statut Membre Dernière intervention 6 mars 2007
13 oct. 2004 à 16:34
Me revoila,

déclarations :
Dim cnx As New ADODB.Connection
Dim rst As New ADODB.Recordset

les deux lignes suivantes fonctionnent bien

cnx.ConnectionString = "DRIVER={Microsoft Visual FoxPro Driver}; SourceType=DBF; SourceDB=" + CheminCourt + NomCourt + ";Exclusive=No;"
cnx.Open

En debug ma connectionstring vaut :
"Provider=MSDASQL.1;Extended Properties="Driver={Microsoft Visual FoxPro Driver};UID=;PWD=;SourceDB=y:\continue\200303~1\produc~1\seat_r~1.dbf;SourceType=DBF;Exclusive=Non;BackgroundFetch=Oui;Collate=;""

Jusque là OK. La suite ne fonctionne pas, j'ai un message comme quoi mon dbf n'existe pas.

cnx.Execute "UPDATE " + CheminCourt + NomCourt + " SET [n_fic] = '123456'"
cnx.Close

rst.Open "UPDATE " + CheminCourt + NomCourt + " SET [n_fic] = '123456'", cnx
rst.Close

rst.Open "SELECT N_FIC, SEQ_IMP FROM " + NomCourt, cnx
rst.Close

Merci pour ton aide.
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
13 oct. 2004 à 16:42
re,

essaie deja, en essayant de travailler avec ta base dans le meme repertoire que ton projet.
pour voir si ca vient pas du chemin.
@+
Julien
-----------------------------------------------------------
:big) Essai ca sinon on trouvera autre chose ;)
-----------------------------------------------------------
0
Rejoignez-nous