mysql & PB

Codes specifiques à Linux
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

mysql & PB

Message par doudouvs »

Salut,

Je me demande comment connecter une base mysql en natif sur linux

J'ai fait un petit prog server qui répond à un client pour l'instant pas de problème, seulement je souhaite cherche des informations dans une base mysql qui seront transmise au client par SendNetworkString.

pour l'instant j'ai :

Code : Tout sélectionner

UseODBCDatabase()

If OpenDatabase(#PB_Database_ODBC,"localhost","login","password")
SendNetworkString(ClienID, "Connect OK")
Else
SendNetworkString(ClienID, "Connect KO")
EndIf
Bien sur il répond toujours "Connect KO"

Je précise que mysql et sur le même serveur localhost ou 127.0.0.1 ou l'ip donnent les mêmes résultat
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: mysql & PB

Message par doudouvs »

D'après ce que j'ai compris il n'y a pas de connecteur Mysql problème de licence me reste plus qu'a passer par PostgreSQL
Allez @Fred on dira rien si tu nous rajoute Mysql :)

Dans tous les cas la Doc à ce sujet et indigeste enfin pour ma part
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: mysql & PB

Message par falsam »

Effectivement MySql n'est pas natif à cause du coût de la license.
Lien : http://www.mysql.fr/products/
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: mysql & PB

Message par falsam »

Il existe des wrapper mysql sous forme de fichier include développés par la communauté Pure Basic. je te propose celui que j'ai développé et qui fonctionne avec des serveur MySql locaux et distant Cloud SQL.

Par contre ce wrapper ne contient pas les Dll et Lib de connexion pour linux.

MySql.zip (X86) n'ayant pas linux je ne peux pas tester les connectors sous linux mais tu peux les télécharger sur cette page http://dev.mysql.com/downloads/connector/c/ aprés avoir sélectionner ton Os.

Exemple de code pour établir une connexion avec une base données (Prélablement crée sur ton serveur)

Code : Tout sélectionner

;Connection à une base de données 

EnableExplicit

IncludeFile "libmysql.pbi"

Global SqlHost.s, SqlUser.s, SqlPassWord.s, SqlDatabase.s, SqlPort
Global SqlHandle.l, SqlQuery.s


;Initialisation de l'environnement MySQL
SqlHandle=MySqlInit()

;Initialisation des paramétres de connexion
SqlHost="127.0.0.1"
SqlUser="root"
SqlPassWord=""
SqlDatabase="dbdemo"
SqlPort=0

;Connection à la base de données 
If MySqlConnect(SqlHandle, SqlHost, SqlUser, SqlPassWord, SqlDatabase, SqlPort) 
  Debug "Vous êtes connecté. Version MySql " + MySqlGetSetverVersion(SqlHandle) 
 
Else
    Debug "Erreur d’accès à la base de données "
EndIf

;Fermeture de la connexion MySql
MySqlClose(SqlHandle)
Dernière modification par falsam le jeu. 01/août/2013 15:47, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: mysql & PB

Message par doudouvs »

Ah merci @Falsam, je viens juste de finir d'installer Postgres et la connexion marche nickel depuis le soft.

Je vais quand même étudier ta solution car j'ai vraiment envie d'installer Postgres sur un serveur de prod
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: mysql & PB

Message par falsam »

doudouvs a écrit :Je vais quand même étudier ta solution car j'ai vraiment envie d'installer Postgres sur un serveur de prod
Ma solution ne fonctionne qu'avec des bases de données MysQL ..... pas postgresql. Doudouvs la pause s'impose :)
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: mysql & PB

Message par doudouvs »

oui justement je souhaite utiliser Mysql, c'est surement mon premier post qui ta tromper :), moi je me suis perdu dans la doc et j'ai rien compris

Ahhhhh je viens de voir mon erreur
Je vais quand même étudier ta solution car j'ai vraiment envie d'installer Postgres sur un serveur de prod
au lieu de
Je vais quand même étudier ta solution car j'ai vraiment pas envie d'installer Postgres sur un serveur de prod
C'est vrai une pose s'impose d'ailleurs c'est Ricard 1/4
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: mysql & PB

Message par doudouvs »

Des choses m'échappes

Si j'ai :

Code : Tout sélectionner

EnableExplicit
importC "/usr/lib/libmysqlclient.so"

Global SqlUser.s
SqlUser = "localhost"
Réponse "Variable already declared with another type : SqlUser "

Si je commente Global
Réponse "Garbage at the end of the line"

Si je commente importC tout marche normalement
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Fred
Site Admin
Messages : 2652
Inscription : mer. 21/janv./2004 11:03

Re: mysql & PB

Message par Fred »

Un bloc ImportC doit se terminer par EndImport. J'avoue que l'erreur n'est pas tres explicite.
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: mysql & PB

Message par doudouvs »

arff merci @Fred je viens juste de le trouver dans la doc http://www.purebasic.com/french/documen ... mport.html
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: mysql & PB

Message par doudouvs »

Bon j'avance j'arrive a faire la connexion à Mysql avec libmysqlclient.so

INSERT, UPDATE, DELETE marche nickel

Par contre pour SELECT Je n'arrive pas à repuc le resultat

Code : Tout sélectionner

result = mysql_query(*hDB, "SELECT * FROM nom WHERE id='4' ")
Debug result
il renvoi bien 1, les logs du serveur j'ai bien Query SELECT * FROM nom WHERE id ='4'

Comment je récupère le contenu de la requête ?
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: mysql & PB

Message par falsam »

Apparement tu n'utilises pas ma lib :)

je te donne un exemple de code te montrant la maniere de récupérer le résultat de ta requéte.

Code : Tout sélectionner

If MySqlConnect(SqlHandle, SqlHost, SqlUser, SqlPassWord, SqlDatabase, SqlPort) 
  
    ;Sélection de toutes les colonnes d'une table
    SqlQuery="Select * from contacts"    
    SqlQueryResult=MySqlQuery(Sqlhandle, SqlQuery)
    
    ;Le résultat de la requete est composé d'un tableau 
    If SqlQueryResult<>0 
      ;Nombre de lignes dans le résultat de la requete
      SqlRowCount = MySqlGetRowCount(SqlQueryResult)
  
      ;Nombre de colonnes dans le résultat de la requete
      SqlColCount.l=MySqlGetColCount(SqlQueryResult)
      
      ;Affichons le résultat
      For Row=0 To SqlRowCount-1
        Debug "Ligne : "+Str(Row)
        
        ;Lecture de la prochaine ligne du résultat de la requete
        MySqlNextQueryRow(SqlQueryResult)
        
        ;Pour chaque ligne, lecture de chque colonne
        For Col=0 To SqlColCount-1
          Debug MySqlNextQueryCol(Col, #PB_Ascii)
        Next
      Next
      Debug " "
    EndIf
    
    ;Libère la mémoire utilisée par un jeu de résultats. 
    MySqlQueryFree(SqlQueryResult)
    
Else
  Debug "Erreur d'acces"
EndIf
je te laisse regarder le code de la lib que tu as eu pour voir à quoi correspond chacune des fonctions afin que tu puisses créer tes propres fonctions.

PS : Dans ma lib j'ai une fonction qui permet de transférer le résultat d'une requete directement dans une ListIconGadget.
MySqlQueryToListConGadget(MySqlhandle.l, MySqlQuery.s, Gadget.l, Option.i)

MySqlhandle.l : Handle de la base de données.
MySqlQuery.s : la réquete
Gadget : l'identifiant du listicongadget
Option : Une des valeurs suivant
  1. #PB_Ascii : Jeu de caractére ASCII
  • #PB_UTF8 : jeu de caractére UTF-8
  • #PB_Unicode : Jeu de caractère Unicode
A mon avis tu aurais pu améliorer ma lib pour qu'elle fonctionne aussi sous linux. N'ayant pas linux, je ne peux pas le faire.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: mysql & PB

Message par doudouvs »

Je suis pas arriver a le transposer

Code : Tout sélectionner

;Connection à une base de données 

EnableExplicit

ImportC "/usr/lib/libmysqlclient.so"
EndImport

Global SqlHost.s, SqlUser.s, SqlPassWord.s, SqlDatabase.s, SqlPort
Global SqlHandle.l, SqlQuery.s


;Initialisation de l'environnement MySQL
SqlHandle=MySqlInit()

;Initialisation des paramétres de connexion
SqlHost="127.0.0.1"
SqlUser="root"
SqlPassWord="pass"
SqlDatabase="dbdemo"
SqlPort=3306

;Connection à la base de données 
If MySqlConnect(SqlHandle, SqlHost, SqlUser, SqlPassWord, SqlDatabase, SqlPort) 
  Debug "Vous êtes connecté. Version MySql " + MySqlGetSetverVersion(SqlHandle) 

Else
    Debug "Erreur d’accès à la base de données "
EndIf

;Fermeture de la connexion MySql
MySqlClose(SqlHandle)
Me donne comme erreur MySqlInit() is not a function, array, list, map or macro

J'ai rajouter

Code : Tout sélectionner

Macro MySqlInit()
SqlHandlel
SqlHost.s
SqlUser.s
SqlPassWord.s
SqlDatabase.s
;SqlPort
J'ai toujours la même erreur je doit mi prendre comme un pied
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: mysql & PB

Message par falsam »

@doudouvs et ceux sous linux :) : J'ai modifié libmysql.pbi.
Le fichier compressé ci-dessous contient les connecteurs pour Windows (x86) qu'il est inutile d'installer ainsi que les connectors pour Linux et Mac Os qu'il faut par contre installer.

Sous windows je n'ai pas de souci de connexion.

N'ayant pas de PC sous Linux, je ne peux pas tester les connectors sous cet environnement. Pourrais tu tester le code qui se trouve dans ce fichier compressé. Ce code ne fait que tester une connexion sur une base de de données MySql hébergé.

:arrow: MySql.zip (X86)


Vous trouverez les connectors sur ce lien : http://dev.mysql.com/downloads/connector/c/
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: mysql & PB

Message par doudouvs »

J'ai du rajouter le chemin pour la lib /usr/lib/libmysqlclient.so autrement j'ai une erreur gcc qui trouve pas la lib

quand je compile dans libmysql.pbi ligne 91 "Accès mémoire invalide."
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Répondre