Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Utilisation HyperFile depuis C#

1 réponse
Avatar
JC
Bonjour

D=E9sol=E9 si ce sujet vous parait banal (et long), mais je n'ai pas
trouv=E9 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=E9e
par du C#. L'id=E9e g=E9n=E9rale du travail est d'utiliser la puissance de
Windev pour son c=F4t=E9 SGBD, tout en gardant des traitements sp=E9cifique=
s
en C# sur la base de donn=E9es partag=E9e entre Windev et C#. En r=E9sum=E9=
,
il faut que C# et WD se partage une BDD commune (dans un format =E0
d=E9terminer).

J'ai donc essay=E9 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 =E0 faire appel =E0 WD depuis C#. Quand je regarde l'exemple
livr=E9 avec WD, la doc est tr=E8s incompl=E8te (ou alors dites-moi o=F9
trouver les infos): par exemple il est dit dans l'aide AppelWD("<Nom
de la fonction>,<Param=E8tres 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=E9 (dans
langages externes C#) on trouve WinDev.APPELWD("Ecran,Selection,
+,VILLE"); (nul part dans l'aide je n'ai trouv=E9 "Ecran, S=E9lection,
+,..." !!! Dans l'aide on trouve "Ecran,Saisie", et autre, mais pas
"Ecran,S=E9lection..." etc. (j'en ai d'autres si vous voulez).

- cr=E9er une base HF et la manipuler depuis WD (pas de souci bien s=FBr)
et depuis C#. L=E0 aussi, blocage. C=F4t=E9 C#, j'ai import=E9 Windev.cs, l=
es
DLL qui vont bien, mais le code ci-dessous ne donne rien. Les donn=E9es
ne sont pas cr=E9=E9es (ni mises =E0 jour si le fichier existe d=E9j=E0), i=
l n'y
a aucune erreur signal=E9e (tout renvoie 0 ce qui d'apr=E8s la doc APPELWD
semble dire OK puisque leur exemple dit si WinDev.WDEntier() =3D=3D 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=E9es");
Console.WriteLine(WinDev.WDChaine()); // le chemin retourn=E9 est
bien celui du fichier
WinDev.APPELWD("HErreurInfo");
Console.WriteLine(WinDev.WDChaine()); //renvoie chaine vide

WinDev.APPELWD("HCr=E9ationSiInexistant,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=3D'toto'");
WinDev.APPELWD("Personne.Age=3D'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=E9er un assembly .Net o=F9 j'ai juste fait une proc=E9dure globale pou=
r
voir si C# pouvait l'appeler, =E7a 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=E8s performant en passant par ce genre de
connexion.


Mes questions sont :

- pouvez-vous me donner des =E9claircissements 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-=EAtre 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

1 réponse

Avatar
Jerome PAULIN
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