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
- #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é.
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."