ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Affiliation RSS   

RSS : Really Simple Syndication

Le format RSS (fichier XML) permet de syndiquer du contenu provenant d'autres sites.
www.atoutfox.org propose :

  • la publication d'un flux RSS des dernières contributions du site www.atoutfox.org
  • de consulter les fluxs RSS relatant de Visual FoxPro provenant d'autres sites.

Pour répondre aux questions reçues suite à l'ouverture de cette rubrique :
« c'est quoi un RSS ? »  et  « à quoi cela sert-il ? »
Une  réponse résumée et très simplifiée :
Un feed RSS est un fichier créé dynamiquement, au format XML, contenant : une date de publication, un titre, un auteur, éventuellement une description (ou partie de description), et un lien.
Dans le cas d'Atoutfox, le feed RSS est une publication des entêtes des contributions.
Ce feed RSS rendu public permet d'être utilisé dans un autre site : la liste du contenu du site source apparait dynamiquement dans le contenu du site client avec un lien retournant sur la source... (Syndication). Le site client augmente son contenu, le site source reçoit des liens et augmente sa visibilité et son référencement.
Les informations sont à jours sur tous les sites en même temps puisque c'est dynamique.
Exemple d'utilisation d'un flux RSS : affichage ci-après des 6 derniers codes et forum de www.foxprofr.com à l'intérieur de www.atoutfox.org... Est-ce plus clair ? (sinon un petit appel à votre ami google... ;-)

Cordialement, Francis FAURE

 

Les 6 derniers articles de...

Feed RSS des dernières contributions ajoutées sur www.atoutfox.org    (source )

Date Titre Auteur
14/08/2010

Gérer les connexions aux données dans StrataFrame
Le point essentiel d'une connexion à une source de données, c'est la chaine de connexion.

Cette contribution tente de répondre aux questions suivantes :
Comment stocker de façon permanente les sources de données nécessaires à une application ? Comment mettre à disposition ces sources de données à travers toute l'application ? Comment utiliser plusieurs sources de données dans une même application ?

Michel Lévy
08/08/2010

Plan d'Exécution Graphique pour des Requêtes SQL Simples (traduction)
Cet article est paru initialement le 16 décembre 2008 sur le magazine en ligne Simple-Talk http://www.simple-talk.com/sql/performance/graphical-execution-plans-for-simple-sql-queries/

L'auteur de cet article est Grant Fritchey : il est DBA dans une grosse compagnie d'assurance américaine et il travaille sur SQL Server depuis la version 6.0 en 1995. Il a également travaillé sur Sybase, et a développé en VB, VB.Net, C#, et Java.

Son livre « SQL Server Execution Plans » est disponible chez Amazon http://www.amazon.com/Server-Execution-Plans-Grant-Fritchey/dp/1906434026/ref=sr_1_3?ie=UTF8&s=books&qid=1280842445&sr=8-3


Grant Fritchey est MVP SQL Server.


Michel Lévy
06/08/2010

c# - Tableau à dimension multiple
Quelque chose qui me manquais sous Vfp et qu'enfin je retrouve sous c#

tableau à 3 dimensions

Un exemple simple d'utilité serait le maintien en mémoire des mémos dans une année pour une période
de 12 mois

String DateMemo[12,5,7][ ] ;

et ou on a 12 mois, 5 semaine, 7 jours

ExempleNum = 1
l'exemple présenté est un tableau à 3 dimensions remplient de Int si
ExempleNum = 2
tableau de caractere String à 3 dimensions



eddymaue
01/08/2010

Mettre à jour une vue multi-tables sur le serveur SQL avec le trigger INSTEAD OF
Mettre à jour une vue multi-tables sur le serveur SQL avec le trigger INSTEAD OF


Très souvent, on envisage la migration des données vers SQL Server comme une solution à des problèmes que les dbf ne peuvent pas gérer nativement (sécurité, fragilité par exemple), ou en réponse à des dysfonctionnements liés à l'évolution des OS et des machines (caches disque entre autres).

Mais on peut aussi choisir de migrer de façon positive, pour accéder à des fonctionnalités nouvelles, pour simplifier l'écriture, pour accélérer les traitements, pour faciliter la maintenance.

L'objectif de cette contribution est de vous donner envie de migrer.

Quelques définitions : Une vue sur le serveur, pourquoi faire ? Nos données sont normalisées, et nous utilisons des vues pour obtenir des jeux d'enregistrements dénormalisés, consommables dans notre code métier ou notre couche visuelle sur le client fox. En tant que développeurs fox, nous avons l'habitude de réaliser cette dénormalisation en créant des vues coté client, ou en requêtant cette jointure par du code SPT ou dans un Cursor Adapter. C'est ce que nous faisons par exemple entre une table « clients » et une table « contacts », ou bien entre une table « en_tete_facture » et une table « lignes_de_factures ».

Créons cette vue sur le serveur SQL lui-même : nous gagnerons en performance, en utilisant toute la puissance de la mise en cache des plans d'exécution et leur adaptation automatique aux données réelles (imaginez cela comme une super-optimisation Rushmore).

Une vue sur le serveur n'est rien d'autre que du code SELECT dont le résultat est « vu » comme une table, elle est mise à jour sans aucune intervention nécessaire .
Un TRIGGER INSTEAD, qu'est-ce que c'est ? En fox, nous ne connaissons que les trigger after , c'est-à-dire du code procédural exécuté automatiquement après un événement INSERT, UPDATE, ou DELETE. J'emploie ici volontairement le terme d'événement, dans le sens utilisé dans le monde SQL : ce ne sont pas des événements au sens de la POO, mais des événements de données.

En SQL, la norme SQL:1999 prévoit 2 types de triggers, les BEFORE et les AFTER. Cette norme est implémentée en Transact-SQL sous la syntaxe de TRIGGER INSTEAD OF et TRIGGER AFTER.

Un trigger AFTER s'exécute après le ou les évènements auxquels il répond, et de ce fait les contraintes de lignes et les règles d'intégrité référentielles structurelles ont déjà été vérifiées quand on arrive au début du trigger.

Un TRIGGER INSTEAD OF « intercepte » le ou les événement(s) de données pour lesquels il est écrit, et c'est le code contenu dans ce trigger qui est exécuté à la place de l'événement initial. Aucune contrainte de ligne ou d'intégrité n'a été vérifiée à l'entrée dans le trigger (uniquement les contraintes de schéma et de type de données).
Mettre à jour une vue multi-table sur le serveur, comment ? Si une vue contient des calculs (et à fortiori des agrégations) ou une clause DISTINCT, ou des sous-requêtes ailleurs que dans sa clause WHERE, elle ne peut être mise à jour directement. Nous allons donc utiliser le TRIGGER INSTEAD pour coder cette mise à jour des tables sous-jacentes.

Les objets de notre exemple :
Parcourons le script « create_tables_parent_enfant », qui définit nos 2 tables. Il crée 2 tables nommées parent et enfant, chacune dotée d'un champ identity (autoinc en fox) sur lequel est basée la clé primaire. Ces 2 tables sont liées dans une contrainte d'intégrité référentielle nommée « FK_enfant_parent ». De plus, les données du champ « enf_ch1 » sur la table « enfant » ne doivent pas prendre la valeur ' z2z2 '. C'est ce qu'en fox on appelle une règle de niveau champ. En SQL, on appelle cet objet une contrainte de validation, ou contrainte check. Comme tout objet, il porte un nom, nous l'avons appelé « CK_enfant_enf_ch1 »

Le script de création de la vue nous permet de voir qu'elle modifie la casse de la colonne « par_ch1 » issue de la table « parent » ; les 2 tables sont liées par une jointure sans surprise, de type FK/PK. Remarquons juste que nous faisons remonter dans cette vue les PK des 2 tables (nous les utiliserons dans le trigger).
Regardons maintenant plus attentivement le script de création du trigger.

Comme nous voulons mettre à jour les 2 tables ou aucune, nous empaquetons ces 2 mises à jours dans une transaction. Le code lui-même est inséré dans une structure d'interception d'erreur par TRY/CATCH, dont le principe est identique à celui que nous connaissons en fox (remarquons seulement la petite différence syntaxique). Une erreur déclenchée dans le TRY entrainera l'exécution du code contenu dans le CATCH, que nous avons ici simplifié à un simple ROLLBACK. Bien entendu, ce code devrait comporter un traitement personnalisé de gestion de l'erreur, afin de remonter ses détails jusqu'à la couche client, mais ce n'est pas l'objet de la présente contribution. Nous aurions pu également utiliser un SET XACT_ABORT ON.

Le code traite donc la mise à jour de chaque table par un UPDATE, en vérifiant d'abord si la mise à jour est requise, et en utilisant les pseudo-tables :
Vérifier si la mise à jour est requise pour cette table La commande UPDATE(nom_de_colonne) renvoie le booléen VRAI si l'évènement déclencheur impacte cette colonne.
L'utilisation de la pseudo-table INSERTED Les pseudo-tables sont des jeux d'enregistrements présentés dans les trigger, et disponibles comme des tables dans le code des trigger. Ces pseudo-tables (que nous appellerions des cursor en fox) sont nommées INSERTED et DELETED, elles ont exactement la même structure que l'objet (table ou vue) sur lequel porte le trigger, elles contiennent les jeux d'enregistrements impactés par l'évènement demandeur. Dans un trigger INSERT, seule la pseudo-table INSERTED est présentée ; dans un trigger DELETE, seule la pseudo-table DELETED est présentée. Et dans un trigger UPDATE, les 2 pseudo-tables sont présentées, DELETED contient les valeurs d'origine (avant l'update) de la table ou de la vue, et INSERTED contient les valeurs de destination.

Dans notre exemple, nous avons uniquement besoin des valeurs contenues dans INSERTED pour les appliquer aux tables sous-jacentes de la vue.
La clause FROM dans la source des données du SET Nous retrouvons les enregistrements dans chacune des tables par une simple jointure entre cette table et INSERTED sur la clé primaire. La clause FROM permet d'utiliser le jeu résultant de cette jointure à la fois pour identifier la ligne à mettre à jour et pour déterminer la valeur de remplacement. Tout simple, non ?

Le dernier script est un simple test, permettant de vérifier le fonctionnement de l'ensemble.

Il ne reste plus qu'à consommer cette vue serveur comme si c'était une table, dans notre client fox (avec une vue distante, du code SPT, ou un Cursor Adapter) ou notre client StrataFrame (avec un BO).

Michel Lévy
21/07/2010

Comment obtenir l'information sur le serveur SMTP Sous Windows 7

Mike Gagnon
12/07/2010

Comment utiliser un DLL foxpro (ou autre) sans avoir besoin de l'enregistrer
Cette technique vise Foxpro 9 (SP2) spécifiquement.

Mise-à-jour. Je me suis fait demandé comment obtenir le CLSID d'un DLL pour pouvoir ensuite le mettre dans le manifest. Voici une méthode: (cette methode utilise tlbinf32.dll qui vient avec Visual Studio)

1. Trouver l'information à partir du fichier TBL.

CLEAR
LOCAL otlb
otli=NEWOBJECT('tli.tliapplication')
otlb=otli.TypeLibInfoFromFile("serial.dll")
FOR EACH oCoClass IN otlb.CoClasses
?"Class name : ",oCoClass.NAME
?"CLSID is : ",oCoClass.GUID
ENDFOR


Mike Gagnon

Feed RSS des derniers codes ajoutés sur www.foxprofr.com    (source )

Date Titre Auteur
01/10/2009

AUTOMATION DE WORD AVEC VFP
Nécessite VFP >= 8 Facilite l'automation de Word Ferme automatiquement les documents ouverts et Word Donne la main à l'utilisateur pour modifier un

AbaqueInside
28/11/2008

SAISIE GRAPHIQUE D'UN CRÉNEAU HORAIRE
Bonjour à tous J'avais besoin d'un module permettant de saisir de manière graphique un créneau horaire l'heure de début et celle de fin sont so

leissler
18/04/2008

ENVOYEUR D'IP
------------------------------------ | Envoyeur d'adresse IP par e-Mail | --

psyb
03/01/2008

RENOMMER LE PRÉFIXE DE TOUS LES FICHIERS D'UN DOSSIER
Vous disposez d'un dossier où les noms de plusieurs fichiers commencent par la même chaine. Vous voulez remplacer cette chaîne par une autre pour tou

mike_vk
07/07/2006

ETAT DYNAMIQUE
Afin d'obtenir dans un état des objets dynamiquement paramétrable. Mettre le contenu du zip dans le répertoire de l'appli Le principe fonction

aumeric
10/06/2006

UN AUTRE CALENDRIER
Pour choisir une date sur un calendrier tout en fox.

aumeric

Feed RSS du forum www.foxprofr.com    (source )

Date Titre Auteur
27/08/2010

Modifier les réglages de l'IDE
Modifier les réglages de l'IDE

hassoub
23/08/2010

impression usb sous foxpro 2.6
impression usb sous foxpro 2.6

bricococo
12/08/2010

comment faire une application client serveur avec vfp
comment faire une application client serveur avec vfp

hakima75
09/08/2010

cursor temporaire pouvat être misàjour
cursor temporaire pouvat être misàjour

wdev1
28/07/2010

Erreur OLE - classe non enregistrée sur une machine
Erreur OLE - classe non enregistrée sur une machine

stepber
25/07/2010

effacement d'enregistrementennumérés
effacement d'enregistrementennumérés

supersoft5

Feed RSS des news de www.foxcentral.net    (source )

Date Titre Auteur
01/09/2010

FoxShow #67: Interview with Rick Borup on Ruby on Rails and Design Patterns

Fox Show Podcast
31/08/2010

Second Early Bird for West Wind Web Connection Training Expiring tomorrow

West Wind Technologies
28/08/2010

Southwest Fox 2010: Early-bird Deadline

Southwest Fox Conference
19/08/2010

West Wind Web & AJAX Toolkit 1.6 for ASP.NET released

West Wind Technologies
10/08/2010

FoxShow #66: Interview with Toni Feltman on Lean/Agile and the Pomodoro Technique

Fox Show Podcast
09/08/2010

Chicago FUDG meeting Tuesday 10 Aug 10

Chicago FoxPro Users and Developers Group

Feed RSS de fox.wikis.com    (source )

Date Titre Auteur
03/09/2010

BlogWatch

01/09/2010

OpportunisticLocking

01/09/2010

ApiStructures

01/09/2010

ChristofWollenhaupt

01/09/2010

CompuServe

05/08/2004

LarrySerflaten

 


www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.3.0 - © 2004-2010.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0