Page 1 sur 2

mysql & PB

Publié : mar. 30/juil./2013 11:55
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

Re: mysql & PB

Publié : mar. 30/juil./2013 15:03
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

Re: mysql & PB

Publié : mar. 30/juil./2013 15:27
par falsam
Effectivement MySql n'est pas natif à cause du coût de la license.
Lien : http://www.mysql.fr/products/

Re: mysql & PB

Publié : mar. 30/juil./2013 15:48
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)

Re: mysql & PB

Publié : mar. 30/juil./2013 15:56
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

Re: mysql & PB

Publié : mar. 30/juil./2013 16:01
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 :)

Re: mysql & PB

Publié : mar. 30/juil./2013 16:15
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

Re: mysql & PB

Publié : mer. 31/juil./2013 8:53
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

Re: mysql & PB

Publié : mer. 31/juil./2013 10:00
par Fred
Un bloc ImportC doit se terminer par EndImport. J'avoue que l'erreur n'est pas tres explicite.

Re: mysql & PB

Publié : mer. 31/juil./2013 10:06
par doudouvs
arff merci @Fred je viens juste de le trouver dans la doc http://www.purebasic.com/french/documen ... mport.html

Re: mysql & PB

Publié : jeu. 01/août/2013 11:10
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 ?

Re: mysql & PB

Publié : jeu. 01/août/2013 11:35
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.

Re: mysql & PB

Publié : jeu. 01/août/2013 12:58
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

Re: mysql & PB

Publié : jeu. 01/août/2013 15:54
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/

Re: mysql & PB

Publié : jeu. 01/août/2013 16:24
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."