PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Connection HFSQL via Python
Connection HFSQL via Python
Débuté par Raphaël Vignes, 22 jan. 2021 13:29 - 12 réponses
Posté le 22 janvier 2021 - 13:29
Bonjour,
je souhaite me connecter à une base HFSQL avec le driver windev et en utilisant le client python odbc pyodbc (le seule que je connaisse).
Je suis sous Ubuntu et en python 3.8


Vu que le driver HFSQL ne peut s'installer qu'avec le gestionnaire de driver iODBC, j'ai désinstallé unixODBC et installé iODBC. Puis j'ai testé avec succès la connexion avec iodbctest.
Mais je bloque ensuite sur l'utilisation de pyodbc avec iODBC.
Nativement, pyodbc ne s'interface qu'avec UnixODBC et les solutions proposées ici:
https://github.com/mkleehammer/pyodbc/issues/444 et ici https://github.com/mkleehammer/pyodbc/tree/444-iodbc ne sont pas fonctionnelles.
Quelqu'un a t'il réussit à utiliser le driver HFSQL avec pyodbc (ou un autre package python ? ).
Merci d'avance !
Membre enregistré
4 messages
Popularité : +2 (2 votes)
Posté le 23 février 2021 - 21:03
Bonjour,
J'ai exactement le même problème que vous et j'ai déjà suivi les même étapes.
Sur Windows le connecteur ODBC fonctionne avec Excel mais le connecteur ODBC fait planter Python à la connexion.
Avec Linux, vous avez bien résumé le problème, je bloque à la compilation de pyodbc avec iODBC.
Avez-vous trouvez une astuce ?

Merci
Membre enregistré
3 844 messages
Popularité : +227 (347 votes)
Posté le 24 février 2021 - 04:09
Bonjour,
Que dit le ST à ce sujet ?

--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
4 messages
Popularité : +2 (2 votes)
Posté le 24 février 2021 - 08:56
Bonjour,
Je n'ai pas contacté le ST, je ne suis pas client direct chez Windev, je suis utilisateurs d'un produit qui est développé avec Windev par une société et qui utilise une BDD HFSQL.

Si on lit le contenu de cette page https://pcsoft.fr/hfsql/ouverture.htm, le connecteur ODBC devrait être compatible avec Python, mais je n'ai vu personne réussir pour le moment.
Membre enregistré
4 messages
Popularité : +2 (2 votes)
Posté le 26 février 2021 - 16:20
J'ai tester aussi avec le module turbodbc sur Windows. Python ne plante plus mais j'ai toujours des erreurs, ça ne fonctionne pas.

Petite astuce qui peut en aider certains : La connexion à une base de donnée avec ODBC fonctionne en Powershell.
Membre enregistré
4 messages
Popularité : +2 (2 votes)
Posté le 01 mars 2021 - 10:02
J'ai trouvé la parade. Il faut utiliser sous windows le module pypyodbc.

Vous allez sûrement vous retrouver avec des erreurs sur les tables avec des dates. Erreur du genre :
"ValueError: invalid literal for int() with base 10"

Il faut modifier le package pypyodbc dans le fichier pypyodbc.py et remplacer le code suivant (ligne 600) :

def dt_cvt(x):
if py_v3:
x = x.decode('ascii')
if x == '': return None
else: return datetime.date(int(x[0:4]),int(x[5:7]),int(x[8:10]))

Par ça :

def dt_cvt(x):
if py_v3:
x = x.decode('ascii')
if x == '': return None
elif len(x) == 8: return datetime.date(int(x[0:4]),int(x[4:6]),int(x[6:8]))
else: return datetime.date(int(x[0:4]),int(x[5:7]),int(x[8:10]))

++
Posté le 16 juin 2021 - 14:04
Bonjour,

Merci pour la solution. Cependant j'aimerais savoir comment modifier le fichier pypyodbc.py ? je ne trouve nulle part ce fichier.
Pour ma part je suis sous jupyter notebook et j'ai juste fait un pip install pypyodbc, comment faire pour accéder et modifier le fichier source ?

Merci beaucoup
Membre enregistré
160 messages
Popularité : +18 (22 votes)
Posté le 16 juin 2021 - 15:19
@Idir
Il jamais modifier un package installé. À la place, installe une version forkée du package.
si tu doit modifier le code fréquemment, n'installes PAS le package via pip install "quelque chose" et modifie le code dans '.../site_packages/...'

Au lieu de cela, place le code source dans un répertoire de développement et installe-le avec

python setup.py develop
# OU
pip install -e path/to/SomePackage


et si tu veux juste voir le code le plus simple c 'est de regarder dans github :

https://github.com/jiangwen365/pypyodbc/blob/master/pypyodbc.py
Membre enregistré
160 messages
Popularité : +18 (22 votes)
Posté le 16 juin 2021 - 15:21
@Idir :
par curiosité pourquoi tu veux le modifier ?
Posté le 16 juin 2021 - 17:16
Merci et je veux modifier le package suite à la lecture du poste d'Alec PO qui a préconisé de modifier la fonction dt_cvt(x).
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 19 octobre 2021 - 10:44
Idir a écrit :
> Merci et je veux modifier le package suite à la lecture du poste d'Alec PO qui a préconisé de modifier la fonction dt_cvt(x).

hello,
le plus simple c'est de :
1 - Copier le fichier pypyodbc.py dans le même répertoire que le script python à exécuter.
2 - Renommer le fichier pypyodbc.py ( par exemple en pypyodbcWD.py).
3 - Inclure dedans la modification d' Alec PO.
4 - Modifier son script python en remplaçant pypyodbc par pypyodbcWD. Exemple :
import pypyodbcWD

cnx = pypyodbcWD.connect("DSN=contacts;")


--
Ami calmant, J.P
Membre enregistré
32 messages
Posté le 07 décembre 2021 - 18:01
Svp j'aimerais savoir comment faire une connexion ODBC hfsql avec python

--
Merci de me soutenir.
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 08 décembre 2021 - 10:06
hello,
après avoir décrit sa connexion à la base de données HFSQL dans Source de données ODBC ( 32 ou 64 bits suivant version python) avec un DSN ayant un driver HFSQL, en utilisant le script pypyodbcWD décrit plus haut, voici comment par exemple se connecter à la base de données de l'exemple Windev Gestion de parc Informatique :
import pypyodbcWD

cnx = pypyodbcWD.connect("DSN=Parc_Informatique;")

cur = cnx.cursor()
cur.execute("select * from Fournisseur;")
print("\n**",[i[0] for i in cur.description], "**\n")
for row in cur.fetchall():
for field in row:
print (field,end=' - ')
print()
#cur.execute("insert into Fournisseur(nomfournisseur, adresse,tel) values ('Acme', 'Lille','03 34 35 36 xx')")
#commit the transaction
#cnx.commit()
cur.close()
cnx.close()


et on obtient :
** ['nomfournisseur', 'adresse', 'tel', 'telsav', 'fax'] **

COMPAQ - Montpellier - 04 48 25 60 xx -  -  - 
DELL - Paris - 01 49 18 22 xx -  -  - 
MICROTRON - Paris - 01 31 11 30 xx -  -  - 
MICRO PLUS - Nimes - 04 27 63 31 xx -  -  - 
MITSUBISHI - Montpellier - 04 19 72 81 xx -  -  - 
CARREFOUR - Paris - 01 12 58 45 xx -  -  - 
HP - Nice - 04 56 12 25 xx -  -  -


--
Ami calmant, J.P