Go to SoftFluent site to register or reset your account
Welcome Guest Search | Active Topics | Log In

Procédure pour générer des jeux de données (cf :instance) avec Excel et SQLServe Options
ROKKANEN
#1 Posted : Tuesday, June 22, 2010 11:17:30 AM
Rank: Member

Groups: Users

Joined: 10/7/2009
Posts: 24
Procédure pour générer des jeux de données (cf :instance) avec Excel et SQLServer 2005/2008

Nous avons le modèle objet suivant :

<Category>
<Id/>
<Nom/>
</Category>

<Product>
<Id/>
<Nom/>
<Price/>
<Category typeName="Category"/>
</Product>

Nous voulons instancier le Modèle avec les données suivantes

Produit1 Category 2
Produit2 Category 1
Produit3 Category 1

Etape 1 : Utilisation d’Excel pour remplir le jeux de donnée

Créer un classeur « GenererInstancesCF.xls » dans Excel avec 2 feuilles : Category et Product

Dans la feuille Category remplir les données comme suit :
A B
1 Id Name
2 '1 Category 1
3 '2 Category 2

Il est important pour la suite de préfixer avec une simple quote les données,
(sinon les id sont géré comme cela 1.00000000000)

Dans feuille Product remplir les données comme suit :

A B C D E
1 Id Name Category Price CategoryId
2 '1 Produit1 Category 2 30 =""&EQUIV(C2;Category!B:B;0)-1
3 '2 Produit2 Category 1 40 =""&EQUIV(C3;Category!B:B;0)-1
4 '3 Produit3 Category 1 50 =""&EQUIV(C4;Category!B:B;0)-1

Remarque : la feuille peut provenir d’un existant, dans la colonne C on a la relation produit-catégories, pour déduire l’id on utilise une fonction matricielle d’Excel (EQUIV) qui permet à partir d’une chaine de rechercher le numéro de ligne de la matrice (on retire 1 pour déduire l’ID).
Dans le cas présent les ID sont générés ordonnées de façon croissante avec les fonctions utilisateurs d’auto-incrémentation (glisser-déplacer).

Le jeu de données est prêt.

Etape 2 : Utilisation de SQLServer

On utilise SQLServer (2005 ou supérieur) avec SQLManagment Studio pour requêter le fichier Excel créé précédemment avec les fonctions de génération XML natives fourni par le moteur de base de données SQL.
Pour cela le moteur de base de données doit être configuré de la façon suivante :

"Outils de configuration /Configuration de la surface d’exposition des fonctionnalités"
- Cliquer sur Configuration de la surface d’exposition des fonctionnalités
-- Sélectionner (treeview à gauche) "Requete distantes appropriées"
-- Cocher : Activer la prise en charge des fonctions OPENROWSET et OPENDATASOURCE

Dans SQLManagment Studio, ouvrir n’importe quel base, puis exécuter les requêtes suivantes :

WITH XMLNAMESPACES (
'http://www.softfluent.com/codefluent/2005/1' as "cf"
)
select Id,Name
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=C:\dev\CodeFluent\GenererInstancesCF.xls;HDR=YES;IMEX=1', [Category$])
for xml path ('cf:instance'),root('cf:instances')

GO

Résultat :

<cf:instances xmlns:cf="http://www.softfluent.com/codefluent/2005/1">
<cf:instance>
<Id>1</Id>
<Name>Category 1</Name>
</cf:instance>
<cf:instance>
<Id>2</Id>
<Name>Category 2</Name>
</cf:instance>
</cf:instances>

WITH XMLNAMESPACES (
'http://www.softfluent.com/codefluent/2005/1' as "cf"
)
select Id,Name,CategoryId as "Category/Id"
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=C:\dev\CodeFluent\GenererInstancesCF.xls;HDR=YES;IMEX=1', [Product$])
for xml path ('cf:instance'),root('cf:instances')

GO

Résultat :

<cf:instances xmlns:cf="http://www.softfluent.com/codefluent/2005/1">
<cf:instance>
<Id>1</Id>
<Name>Produit1</Name>
<Category>
<Id>2</Id>
</Category>
</cf:instance>
<cf:instance>
<Id>2</Id>
<Name>Produit2</Name>
<Category>
<Id>1</Id>
</Category>
</cf:instance>
<cf:instance>
<Id>3</Id>
<Name>Produit3</Name>
<Category>
<Id>1</Id>
</Category>
</cf:instance>
</cf:instances>

FIN
Carl
#2 Posted : Tuesday, July 20, 2010 3:07:54 PM
Rank: Advanced Member

Groups: Users

Joined: 8/13/2009
Posts: 96
Merci pour l'astuce ;)

Carl
Users browsing this topic
Guest
Forum Jump  
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.

YAFPro Theme Created by Jaben Cargman (Tiny Gecko)
Powered by YAF 1.9.301 | YAF © 2003-2009, Yet Another Forum.NET
This page was generated in 0.101 seconds.