Ecriture d'un champ impossible dans un dbf avec les ADO

cs_pledoux Messages postés 147 Date d'inscription mardi 12 octobre 2004 Statut Membre Dernière intervention 6 mars 2007 - 14 oct. 2004 à 16:40
cs_pledoux Messages postés 147 Date d'inscription mardi 12 octobre 2004 Statut Membre Dernière intervention 6 mars 2007 - 15 oct. 2004 à 14:24
Bonjour,

Je ne peux pas mettre à jour le champ d'une table dbf (seq_imp). Dans le debug, tout se passe bien mais lorsque je vérifie ma table, aucune valeur n'a changé. Je n'ai aucun message d'erreur. J'ai du oublier quelque chose.

Merci pour votre aide.

cnx.ConnectionString = "DRIVER={Microsoft Visual FoxPro Driver}; SourceType=DBF; SourceDB=c:\toto.dbf; Exclusive=No;"

cnx.Open

rst.Open "SELECT seq_imp, dataseq FROM c:\toto.dbf", cnx, adOpenDynamic, adLockBatchOptimistic

rst.MoveLast
rst.MoveFirst
rst.Move 1
rst("seq_imp") = "1"
rst.Update
rst.Close
rst.Open "SELECT seq_imp, dataseq FROM c:\toto.dbf", cnx, adOpenDynamic, adLockBatchOptimistic
rst.Move 2
rst("seq_imp") = "2"
rst.Update
rst.Close
cnx.Close

11 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
14 oct. 2004 à 17:04
salut,

une question C:\toto.dbf c est une base de donnees non?

je crois que tu puisse mettre ca comme Source D un FROM dans une requete SQL. IL faut mettre le nom d une table de la base de donnees.

@+
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
14 oct. 2004 à 17:12
Salut,

Le SourceType de ma ConnectionString est bien DBF donc une table externe. Je ne peux malheureusement pas faire autrement, ce n'est pas moi qui génère les tables.
J'ai repris les mêmes bases qu'hier pour les premières lignes.
En plus je vois bien les valeurs correctes de mes champs lorsque je me déplace dans ma base avec les Move. Donc je suis bien connecté.

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

SI tu arrive bien a naviguer avec le Recordset peu etre que tu as raison alors.

Et bien mais la requete SQL de l UPDATE dans un recordset
rst.activeconnection = cnx
Rst.Source = "UPDATE C:\tot.dbf SET .... WHERE ....."
rst.open


Mais j suis vraiment pas sur que ca marche...
@+
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
14 oct. 2004 à 17:37
J'ai un autre problème, je ne connais que le n° d'enregistrement et il faut que j'incrémente mon champ. Ma requête doit ressemebler à ça :

UPDATE C:\TOTO.DBF SET SEQ_IMP=SEQ_IMP+1 WHERE N°_ENREG=i

deux questions :
- puis-je mettre SEQ_IMP=SEQ_IMP+1
- que dois-je mettre à la place de N°_ENREG

A+
0

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

Posez votre question
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
14 oct. 2004 à 17:41
SAlut,

OUi tu peux mettre SEQ_IMP=SEQ_IMP + 1 SI SEQ_IMP est le nom d une colonne de la table.

Dans Nº_Enreg tu dois mettre le nom d une colone ... en bref tu mais ce qui te permetra d identifier ta OU TES lignes
@+
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
14 oct. 2004 à 17:47
re,

Pour le N°ENREG, c'est l'équivalent du recno() en Fox.

Ma requête sous fox serait

UPDATE C:\TOTO.DBF SET SEQ_IMP=SEQ_IMP+1 WHERE recno()=1234

ainsi je ne modifie que le 1234 ème enregistrement.

A+
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
14 oct. 2004 à 17:55
re,
OUILLE alors la ca depasse mes competences en SQL...
J vais essayer de te chercher ca...
@+
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
14 oct. 2004 à 18:03
Re,

Je poste un autre message pour essayer d'avoir l'info SQL

A+
0
cs_pledoux Messages postés 147 Date d'inscription mardi 12 octobre 2004 Statut Membre Dernière intervention 6 mars 2007
15 oct. 2004 à 11:59
Salut,

C'est OK pour le UPDATE mais ça rame un max. Il faut que je trouve autre chose. Il faut que je fasse en ADO l'équivalent de :

.move
.edit
fields!champ="kjkl"
.update

A+
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
15 oct. 2004 à 12:30
Salut,

ca rame avec la Requete en 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
15 oct. 2004 à 14:24
Re,

Le mieux est que je t'explique ce que je fais.

J'ai une appli qui tourne en fond. Cette appli commande une imprimante avec une cadence de 20.000 feuilles / heure et me génère une fichier texte avec ou choix le N° d'enregistrement imprimé ou le N° sequentiel de document imprimé.

Il faut donc que j'intercepte les données du fichier texte pour mettre à jour une table et incrémenter le champ m'indiquant que l'enregistrement a été imprimé (pour éviter d'imprimer des doublons) car celui-ci est testé avant de l'imprimer (ça se mort un peu la queue).

Pour résumer :
- le programme d'impression teste si l'enregistrement n'a pas déjà été imprimé avant de la faire puis ecrit qu'il est imprimé dans une fichier texte (c'est la sortie sortie possible pour cette appli),
- le programme que je fais actuellement lit le fichier texte pour incrémenter le champ qui comporte le nombre d'impression de l'enregistrement. Donc mon UPDATE ne comporte d'un enregistrement et je ne peux pas faire 20.000 update / heure sur ma table.

A+
0
Rejoignez-nous