PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 23 → Accès à une base HFSQL CS via C#
Accès à une base HFSQL CS via C#
Débuté par RaphR, 17 mai 2018 03:19 - 2 réponses
Membre enregistré
1 message
Posté le 17 mai 2018 - 03:19
Bonjour à tous, je sèche depuis quelques jours sur ce problème.

J'ai une application windev d'un éditeur couplée à une base HFSQL CS les fichiers sont cryptés avec un mot de passe. Mon but est de faire quelques requetes sur quelques tables sur la même base via une appli externe en C#. (Pas besoin d'analyse)

J'utilise le fournisseur oledb PCSOFT.HFSQL via l'assembly .NET Oledb pour y parvenir. Car le pilote supporte l'accès aux fichiers protégés. Expliqué dans la doc.

J'ai cette connexionstring :
Provider=PCSoft.HFSQL;Data Source=192.168.1.5:4900;Initial Catalog=Base;User ID=UserRO;Extended Properties=\"Language=ISO-8859-1;Password=*:PASSS\";Password=UserRO


L'ouverture de la base se passe bien

Je lance une requête sur une table1 du dossier1 :

OleDbCommand oc = new OleDbCommand("Select * from \"Dossier1\\Table1\", connect);
 OleDbDataReader or = oc.ExecuteReader();


Il me retourne l'erreur : Aucune analyse ouverte et fichier pas décrit (70114)

La logique Windev aurait voulu un HDeclareExterne() mais je ne sais pas comment faire passer ça, C# se contente à priori d'envoyer des requetes ou des instructions SQL (executeReader ou ExecuteNonQuery).

Pour aller plus loin j'ai fait d'autres tests

- avec une copie non cryptée de la même base, les tables sont listées dans l'explorateur de serveur. Les \ des chemin des fichiers (tables) sont remplacés par des _.. Il suffit d'utiliser ces noms dans les requêtes. Ex :
select * from Dossier1_TAble1


-Avec un accès HFSQL Classic direct dans le dossier1 de table1 :
Provider=PCSoft.HFSQL;Initial Catalog=\\192.168.1.5\Base\Dossier1;Extended Properties=""Language=ISO-8859-1;Password=*:PASS; """;


ça fonctionne aussi avec la requête "Select * from TAble1" (on omet Dossier1)

Mon but est de pouvoir faire des requetes via la première méthode. Si quelqu'un à une idée.

MERCI !
Posté le 17 mai 2018 - 14:04
Le 17/05/2018 à 01:19, RaphR a écrit :
Bonjour à tous, je sèche depuis quelques jours sur ce problème.

J'ai une application windev d'un éditeur couplée à une base HFSQL CS les
fichiers sont cryptés avec un mot de passe. Mon but est de faire
quelques requetes sur quelques tables sur la même base via une appli
externe en C#.  (Pas besoin d'analyse)

J'utilise le fournisseur oledb PCSOFT.HFSQL via l'assembly .NET Oledb
pour y parvenir. Car le pilote supporte l'accès aux fichiers protégés.
Expliqué dans la doc.

J'ai cette connexionstring :
Provider=PCSoft.HFSQL;Data Source=192.168.1.5:4900;Initial
Catalog=Base;User ID=UserRO;Extended
Properties=\"Language=ISO-8859-1;Password=*:PASSS\";Password=UserRO


L'ouverture de la base se passe bien

Je lance une requête sur une table1 du dossier1 :

OleDbCommand oc = new OleDbCommand("Select * from \"Dossier1\\Table1\",
connect);
OleDbDataReader or = oc.ExecuteReader();


Il me retourne l'erreur : Aucune analyse ouverte et fichier pas décrit
(70114)

La logique Windev aurait voulu un HDeclareExterne() mais je ne sais pas
comment faire passer ça, C# se contente à priori d'envoyer des requetes
ou des instructions SQL (executeReader ou ExecuteNonQuery).

Pour aller plus loin j'ai fait d'autres tests

- avec une copie non cryptée de la même base, les tables sont listées
dans l'explorateur de serveur. Les \ des chemin des fichiers (tables)
sont remplacés par des _.. Il suffit d'utiliser ces noms dans les
requêtes. Ex :
select * from Dossier1_TAble1


-Avec un accès HFSQL Classic direct dans le dossier1 de table1  :
Provider=PCSoft.HFSQL;Initial
Catalog=\\192.168.1.5\Base\Dossier1;Extended
Properties=""Language=ISO-8859-1;Password=*:PASS; """;


ça fonctionne aussi avec la requête "Select * from TAble1" (on omet
Dossier1)

Mon but est de pouvoir faire des requetes via la première méthode. Si
quelqu'un à une idée.

MERCI !


salut.
je n'utilises pas odbc, mais pour accéder à des tables dans des dossiers
en HFCS, il faut omettre le premier "\". ( dossier\table )
Posté le 17 mai 2018 - 15:49
Bonjour, merci pour la réponse :
"Select * from \"Dossier1\\Table1\"

L'\ sert à échapper les caractères spéciaux dans une chaîne en C#. C'est pourquoi on le trouve devant les " et les \. ça fait du code pas très lisible. On peut éventuellement utiliser la syntaxe type verbatim
@"Select * from ""Dossier1\Table1"" "

Mais il faut quand même doubler les guillemets quand ils sont dans la chaîne.

J'ai essayé d'autres combinaisons mais l'OLEDB me renvoie l'erreur "Fichier non trouvé" à la place. Ce qui signifie que le chemin de la table est bon, à priori.