Utilisation HyperFile depuis C#

Le
JC
Bonjour

Désolé si ce sujet vous parait banal (et long), mais je n'ai pas
trouvé mon bonheur dans la doc PCSoft (grrr), ni sur le web. Et j'ai
besoin d'un explication claire svp

J'ai une base (SQLite pour le moment, mais pas obligation) utilisée
par du C#. L'idée générale du travail est d'utiliser la puissance de
Windev pour son côté SGBD, tout en gardant des traitements spécifique=
s
en C# sur la base de données partagée entre Windev et C#. En résumé=
,
il faut que C# et WD se partage une BDD commune (dans un format à
déterminer).

J'ai donc essayé plusieurs choses :

- garder la base en SQLite. L'importation de la base en WD est OK,
ainsi que sa manipulation depuis Windev avec des ordres H, mais je
n'arrive pas à faire appel à WD depuis C#. Quand je regarde l'exemple
livré avec WD, la doc est très incomplète (ou alors dites-moi où
trouver les infos): par exemple il est dit dans l'aide AppelWD("<Nom
de la fonction>,<Paramètres de la fonction>"), alors que dans les
exemples de l'aide on trouve
WinDev.APPELWD("BIBLI,Disque,ville.wdl"); (c'est une fonction
BIBLI ?? je ne connais pas) et dans l'exemple C# livré (dans
langages externes C#) on trouve WinDev.APPELWD("Ecran,Selection,
+,VILLE"); (nul part dans l'aide je n'ai trouvé "Ecran, Sélection,
+," !!! Dans l'aide on trouve "Ecran,Saisie", et autre, mais pas
"Ecran,Sélection" etc. (j'en ai d'autres si vous voulez).

- créer une base HF et la manipuler depuis WD (pas de souci bien sûr)
et depuis C#. Là aussi, blocage. Côté C#, j'ai importé Windev.cs, l=
es
DLL qui vont bien, mais le code ci-dessous ne donne rien. Les données
ne sont pas créées (ni mises à jour si le fichier existe déjà), i=
l n'y
a aucune erreur signalée (tout renvoie 0 ce qui d'après la doc APPELWD
semble dire OK puisque leur exemple dit si WinDev.WDEntier() == 0
alors (ok) sinon (gestion erreur) ).
-
Code C#
-
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{

WinDev.APPELWD("fRepDonnées");
Console.WriteLine(WinDev.WDChaine()); // le chemin retourné est
bien celui du fichier
WinDev.APPELWD("HErreurInfo");
Console.WriteLine(WinDev.WDChaine()); //renvoie chaine vide

WinDev.APPELWD("HCréationSiInexistant,Personne");
Console.WriteLine("res: "+WinDev.WDEntier()); // renvoie 0
WinDev.APPELWD("HErreurInfo");
Console.WriteLine(WinDev.WDChaine()); //renvoie chaine vide

WinDev.APPELWD("HOuvre,Personne");
Console.WriteLine("res: "+WinDev.WDEntier()); // renvoie 0
WinDev.APPELWD("HErreurInfo");
Console.WriteLine(WinDev.WDChaine()); //renvoie chaine vide
WinDev.APPELWD("Personne.Nom='toto'");
WinDev.APPELWD("Personne.Age='42'");
WinDev.APPELWD("HAjoute,Personne");
Console.WriteLine("res: "+WinDev.WDEntier()); // renvoie 0
WinDev.APPELWD("HErreurInfo");
Console.WriteLine(WinDev.WDChaine()); //renvoie chaine vide
WinDev.APPELWD("HFerme");
Console.ReadLine();
}
}
}


- créer un assembly .Net où j'ai juste fait une procédure globale pou=
r
voir si C# pouvait l'appeler, ça marche, mais comme C# doit faire des
traitements assez lourds sur la base toutes les secondes, j'ai peur
que ceci ne soit pas très performant en passant par ce genre de
connexion.


Mes questions sont :

- pouvez-vous me donner des éclaircissements sur APPELWD (cf. premier
point plus haut)
- me dire pourquoi le code C# ci-dessus ne fonctionne pas ? je pense
que je n'ai pas fait tout ce qu'il fallait Faut-il inclure d'autres
choses que les DLL et Windev.cs ? Peut-être l'analyse ou autre ? si
oui, quoi, et comment ?
- me dire comment vous feriez pour faire ce genre de travail C# <-->
BDD <--> WD .

Merci par avance
JC
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jerome PAULIN
Le #22147971
Le 20/05/2010 19:43, JC a écrit :
Bonjour

- me dire comment vous feriez pour faire ce genre de travail C#<-->
BDD<--> WD .

Merci par avance
JC



Bonjour,

Pour ma part je procéderai avec une base MySQL ou PostgreSQL.

Pour les traitements, j'essayerai de les coder en procédure stockée
(sous réserve que cela soit possible) avec un lancement depuis le
planificateur MySQL ou bien depuis C# s'il n'est pas possible de faire
un traitement "coté serveur".

gg
Publicité
Poster une réponse
Anonyme