PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → Connection HFSQL via Python
Connection HFSQL via Python
Started by Raphaël Vignes, Jan., 22 2021 1:29 PM - 12 replies
Posted on January, 22 2021 - 1:29 PM
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 !
Registered member
4 messages
Popularité : +2 (2 votes)
Posted on February, 23 2021 - 9:03 PM
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
Registered member
3,883 messages
Popularité : +227 (347 votes)
Posted on February, 24 2021 - 4:09 AM
Bonjour,
Que dit le ST à ce sujet ?

--
Il y a peut être plus simple, mais, ça tourne
Registered member
4 messages
Popularité : +2 (2 votes)
Posted on February, 24 2021 - 8:56 AM
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.
Registered member
4 messages
Popularité : +2 (2 votes)
Posted on February, 26 2021 - 4:20 PM
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.
Registered member
4 messages
Popularité : +2 (2 votes)
Posted on March, 01 2021 - 10:02 AM
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]))

++
Posted on June, 16 2021 - 2:04 PM
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
Registered member
160 messages
Popularité : +18 (22 votes)
Posted on June, 16 2021 - 3:19 PM
@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
Registered member
160 messages
Popularité : +18 (22 votes)
Posted on June, 16 2021 - 3:21 PM
@Idir :
par curiosité pourquoi tu veux le modifier ?
Posted on June, 16 2021 - 5:16 PM
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).
Registered member
962 messages
Popularité : +183 (185 votes)
Posted on October, 19 2021 - 10:44 AM
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
Registered member
32 messages
Posted on December, 07 2021 - 6:01 PM
Svp j'aimerais savoir comment faire une connexion ODBC hfsql avec python

--
Merci de me soutenir.
Registered member
962 messages
Popularité : +183 (185 votes)
Posted on December, 08 2021 - 10:06 AM
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