Vue !!!

cs_spoutnic_37 Messages postés 48 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 20 septembre 2005 - 13 sept. 2005 à 08:56
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 - 22 sept. 2005 à 09:23
aloha;



Je fais un programme qui est basé sur un base de donnée foxpro(.dbc, .dbf)et qui sera mise dans une clef usb.

Le probleme est que je voudrais pouvoir mettre a jour la meme
base de donnée qui serait elle sur le serveur de l'entreprise (donc on
arrive on branche la clef sur l'ordi et on fait la mise ajour).

Je pense que je dois utiliser des vues distantes, mais je ne trouve rien dans la msdn pour me montrer comment faire.

De plus g aussi du mal avec une vue local, ou je n'arrive pas a supprimer des enregistrements!



Est ce que quelqu'un pourrait me dire comment faire , ou m'orienter vers des exemples sur le net?

15 réponses

fonch001 Messages postés 10 Date d'inscription jeudi 25 août 2005 Statut Membre Dernière intervention 16 septembre 2005
14 sept. 2005 à 13:25
Bonjour,

concernant ta remarque :
De plus g aussi du mal avec une vue local, ou je n'arrive pas a supprimer des enregistrements!

Lorsque tu fais ton SQL (ex: SELECT * FROM MaTable INTO CURSOR MonCurs), pense à ajouter "READWRITE" à la fin, sinon le curseur est en lecture seule. (ex : SELECT * FROM MaTable INTO CURSOR MonCurs READWRITE).

Et au cas où j'aurai mal compris, il faut aussi faire SET DELETE ON pour que les éléments "supprimés" n'apparaissent plus (un PACK supprime définitivement ces éléments "marqués pour suppression").

Sinon, je vois pas trop quel est ton soucis pour accéder aux données:
* tu peut utiliser les Data-environnements
* tu peut faire des "USE"
* tu peut faire des requetes...

Il faut simplement que tu commences ton programme par une connexion à ta base...

Bon courage.


<HR>
Quand le sage montre la lune, l'idiot regarde le doigt...
0
cs_spoutnic_37 Messages postés 48 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 20 septembre 2005
14 sept. 2005 à 14:49
justement parlons du pack!

j'ai fais une vue local, grace au generateur de vue, et je voudrais
supprimer un enregistrement de cette vue , et donc des champs des deux
tables qui la compose.



Mais apres avoir fait :

use clients_contrat && ma vue composé de champs des tables clients et contrat

delete for societe="A.C.M.S "

pack



!! operation non valide sur un objet curseur (1115)



je precise que j'utilise vfp 6

ps:le readwrite n'estpas utilisable , car pas reconnu par visual foxpro
0
fonch001 Messages postés 10 Date d'inscription jeudi 25 août 2005 Statut Membre Dernière intervention 16 septembre 2005
14 sept. 2005 à 15:18
Effectivement, le readwrite, c'est à partir de la version 7, donc ton curseur est forcément "read only".

Cela dit, ce que tu veux faire ne peut pas fonctionner: tu veux supprimer un élément dans une copie de tes tables (un curseur) et que cela supprime les éléments de tes tables si j'ai bien compris.

Pour cela tu vas devoir taper du code:
sur ordre de suppression d'une lignes -> recherche des lignes correspondantes dans les tables (ici supprimer la societe "A.C.M.S" de la table societe.dbf et suprimer les contrats de la table contrats.dbf ayant "A.C.M.S." comme societe si j'ai bien compris ton idée) puis -> recalcul de la vue (forcément avec ces éléments en moins).

S'il y a une méthode plus simple, je suis preneur, mais je n'en connait pas.

En revanche si tu veut supprimer les éléments de ta requete SQL uniquement (sans toucher au valeurs dans les tables) un solution peut être de:
* faire une requete est la stocker dans curseur1
* créer curseur2 de même format que curseur1
exemple :
SELECT curseur1
DIMENSION t_fields(1)
=AFIELDS(t_fields)
CREATE CURSOR curseur2 FROM ARRAY t_fields
*copier chaque élément de curseur1 dans curseur2
SELECT curseur1
GO TOP
DO WHILE !EOF()
SCATTER MEMVAR
SELECT curseur2
APPEND BLANK
GATHER MEMVAR
SELECT curseur1
SKIP
ENDDO
* enfin, supprime curseur1 et utilise curseur2 pour ton affichage, ce curseur n'étant alors plus "read only".

Bon courage.


<HR>
Quand le sage montre la lune, l'idiot regarde le doigt...
0
cs_spoutnic_37 Messages postés 48 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 20 septembre 2005
14 sept. 2005 à 15:31
tu avais bien compris.

Mais cette idée ne m'est pas venu toute seul, j'ai regardé la msdn qui dit :



chapitre 5:

"Pour extraire un ensemble d'enregistrements d'une table, modifier ces
enregistrements et transmettre les modifications aux tables source, vous pouvez
utiliser une [glsview.htm vue] Vous pouvez créer des vues à partir de tables
locales, d'autres vues, de tables figurant sur un serveur"
0

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

Posez votre question
fonch001 Messages postés 10 Date d'inscription jeudi 25 août 2005 Statut Membre Dernière intervention 16 septembre 2005
14 sept. 2005 à 16:17
Là, je ne connais pas, mais si quelqu'un connait, je suis preneur également.
0
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
15 sept. 2005 à 14:03
bon, quelques précisions s'imposent !

si tes données du serveur doivent être mises à jour avec les données de la clé (ou l'inverse, peu importe) depuis le serveur, alors c'est une vue locale! ton prog va tourner sur le serveur, et pour celui-ci, la clé est un disque local...

pour les vues, il faut bien comprendre que c'est une extraction de tes données dans un curseur, sur lequel un pack n'a aucun sens (pack supprime sur le disque les enregistrements marqués à delete SUR UNE TABLE)
si tu veux supprimer, tu marque à delete tes enregistrements dans ta vue, et ça va envoyer ces marques de delete sur la table. quand on travaille avec des vues, on ne s'occupe plus du pack sur les tables que pour de la maintenance (pour réduire la taille des tables)

pour mettre à jour tes tables depuis ta vue, regarde donc dans l'avant-dernier onglet du generateur de vue (critères de mise à jour): est-ce que la case envoyer les mises à jour est cochée? si elle est grisée, il te faut d'abord choisir la clé (c'est à dire le champ sur lequel VFP va se fier pour déterminer les enregistrements à mettre à jour - en SQL, on ne tientpas compte du recno), et les champs à mettre à jour. alors, tu décide que les mises à jour seront envoyées en cochant la case en bas à gauche.

voili, voilà pour l'essentiel
pour la suite, le mieux est de venir aux rencontres Atoutfox en novembre...
http://www.atoutfox.org/dates_rencontres_atoutfox_2005-programme.asp

PS: oui, une vue peut extraire des enregitrements venant d'autres vues, qui elles-même peuvent etc. mais alors, attention pour les mises à jour, gare aux conflits, aux incohérences, et autres emm..
0
cs_spoutnic_37 Messages postés 48 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 20 septembre 2005
15 sept. 2005 à 16:01
ok michel, ca fait plaisir de te revoir !



mais j'ai un petit probleme. j'utilise ma vue pour alimenter un combo
box, je veux supprimer un element de la liste, les table parents sont
bien affectées , et les enregistrement correspondant disparaissent.

La vue également a ete affectée et l'enregistrement a disparu!

Le formulaire se ferme ( donc les table associées aussi!) si je reouvre
le fomrulaire, que je regarde dans le combo box je retrouve l'element .



Comment faire pour que le combobox soit mis a jour ?
0
cs_spoutnic_37 Messages postés 48 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 20 septembre 2005
15 sept. 2005 à 16:01
ok michel, ca fait plaisir de te revoir !



mais j'ai un petit probleme. j'utilise ma vue pour alimenter un combo
box, je veux supprimer un element de la liste, les tables parents sont
bien affectées , et les enregistrement correspondant disparaissent.

La vue également a ete affectée et l'enregistrement a disparu!

Le formulaire se ferme ( donc les table associées aussi!) si je reouvre
le fomrulaire, que je regarde dans le combo box je retrouve l'element .



Comment faire pour que le combobox soit mis a jour ?
0
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
15 sept. 2005 à 17:26
comme d'habitude, une question pour répondre à ta question:
les tables parents sont affectées, ça veut dire quoi? les enregistrements sont mis à delete? en es tu certain? je veux dire, as-tu réouvert tes tables pour le vérifier, en faisant un browse avec un set deleted off?

d'autre part, quel est ton buffermode?
0
fonch001 Messages postés 10 Date d'inscription jeudi 25 août 2005 Statut Membre Dernière intervention 16 septembre 2005
16 sept. 2005 à 10:40
Bonjour,

merci pour tes lumières Michel .
0
cs_spoutnic_37 Messages postés 48 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 20 septembre 2005
16 sept. 2005 à 15:05
Bon j'ai rééssayé et ca marche aujourd'hui !



Sinon, je reviens sur ce que tu as dit michel :



"si tes données du serveur doivent être mises à jour avec les données de
la clé (ou l'inverse, peu importe) depuis le serveur, alors c'est une
vue locale! ton prog va tourner sur le serveur, et pour celui-ci, la
clé est un disque local..."



Dans mon cas je veux mettre a jour la base de donnée du serveur depuis
n'importe lequel des ordi du réseau, et apres que la base de la clef
soit écrasé par la base du serveur ( il y aura au moins 5 clefs, donc
necessité de mettre les autres clef ajour ).

J'ai cherché longtemps une autre solution , via des fonction foxpro ,
mais je suis resté brocouille comme on aime a le dire dans le
bouchonnois (confere "les inconnus")

Donc dans mon cas je penchais plutot pour une vue distante !



La question est donc ai-je tors ?
0
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
19 sept. 2005 à 09:36
Spoutnic,

tu peux me le redire autrement, je ne comprend plus rien! à quoi servent tes clés, si tes postes sont en réseau?

si tu as un "serveur" (je dirais plutot des données stockées sur un disque partagé sur le réseau) et des postes de travail sur ce réseau, alors il te suffit (facile à dire, c'est pas si simple, je sais ) d'utiliser des vues locales qui pointent sur les dbf qui sont sur cette unité serveur que tu mappe partout en X: ou ce que tu voudras...). La précaution, c'est de bien utiliser les transactions pour les mises à jour (facile si tu utilise les triggers générés par VFP). je te conseille d'avoir un dbc pour les dbf et leurs triggers, et un autre dbc pour les vues (c'est celui-là qui sera sur les postes de travail)

c'est un peu plus clair?
0
cs_spoutnic_37 Messages postés 48 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 20 septembre 2005
19 sept. 2005 à 16:33
En fait michel c presque ca !



Le programme foxpro sera mis sur 5 clefs, environ, car le programme
sert a faire des fiches d'intervention, donc il faut l'amener cher le
client .

C pour cela qu'il se trouve sur une clef. Apres , lorsque l'on revient
a l'entreprise , il faut que le technicien puisse brancher sa clef sur
n'importe lequel des ordinateurs du reseau , pour mettre la base de
donnée( serveur , et celle de la clef aussi) a jours (clients,
intervention, materiel....).

Donc je voudrai utiliser les vues locales comme tu me le suggeres plus
haut.Mais probleme je c pas comment faire, car le delete sur la vue ne
fait que mettre un pointeur sur l'enregistrement et ne l'efface pas, le
pack etant impossible.



Tes triggers, te les transaction peuvent peut etre m'aider mais je ne sais pas les utiliser.
0
cs_spoutnic_37 Messages postés 48 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 20 septembre 2005
20 sept. 2005 à 17:45
Présentation de la problematique:



J'ai ma base sur ma clef, je voudrais pouvoir mettre a jour la base
equivalent qui se situe sur un serveur a partir de n'importe lequel des
ordi du reseau (pour explication plus précise voir ci-dessus).

On m'a précédement suggéré de faire des vues locales,ce que j'ai fais grace au générateur de vue.

Le probleme c que cette base ne doit pas etre deplacée, coupée et
collée (meme dans le meme repertoire)car sinon les lien des vue avec
cette basesont modifiés, et donc les vue ne sont plus utilisables.



est ce que quelqu'un aurait une idée?



OU MIEUX EST CE QUE QUELQU'UN AURAIT UNE
APPLICATION SIMILAIRE ET POURRAIT ME DONNE LE CODE,OU M'EXPLIQUER
PRECISEMENT COMMENT IL A FAIT



Merci d'avance.

(VFP6)
0
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
22 sept. 2005 à 09:23
Bon,

ça fait deux jours que j'essaie de poster une réponse et que ça plante à chaque fois!

1) installer l'appli sur les clés, tu es certain que ça marche? où vont être les runtime de vfp?
je verrai plutot les données seulement, sur les clés. Et il n'est pas certain que tu aies besoin de dbf, si tu as peu de choses à transporter. regarde du coté de fichiers texte, ou d'un fichier excel... tu les crées facilement sur la clé depuis le poste du client, tu les récupère en dbf depuis tes postes de travail sur ton LAN, tu traites, tu synchronises tes dbf sur le serveur, tu vides la clé

2) avec les vues, tu oublies le pack, tu te sers du set deleted on.
le pack ne te servira que pour la maintenance des tables si elles deviennent trop grosses.

3) les transactions, tu lis l'aide de vfp6, et tu poses tes questions ensuite

4) les triggers, on en reparlera après
0
Rejoignez-nous