Mysql et Pure basic
-
- Messages : 1202
- Inscription : sam. 31/déc./2005 23:52
C'est a moi que tu repond là ?poshu a écrit :J'utilisais libmysql.dll; mais je me demandais: ODBC est il plus rapide que de passer par l'api?

J'avai esseyer libmysql dans un autre langage et sa na jamais marcher...

Pouvez vous me donner un exemple de code ? j'ai esseyer plein de truc j'y arrive pas...
Quand on peut éviter les drivers OBDC il faut mieux le faire!
Dans le cas d'une base oracle, il est connut que l'emploi des drivers OBDC fait chuter les performances de 2% environ.
Ce n'est pas grand chose pour un petit trafic. Mais lorsque la base grossit et prend de l'ampleur ca devient restrictif.
Dans le cas d'une base oracle, il est connut que l'emploi des drivers OBDC fait chuter les performances de 2% environ.
Ce n'est pas grand chose pour un petit trafic. Mais lorsque la base grossit et prend de l'ampleur ca devient restrictif.
-
- Messages : 1202
- Inscription : sam. 31/déc./2005 23:52
Heu je me repte mais personne peut me poster un ptit bou de code pour m'aider ? juste une connection a une base, ensuite acces a une table et recuperation de string dans des champs... sa serai super sympa
Merci d'avance.
P.S.: si c'est avec la libmysql c'est bon aussi, quelque soit la methode utiliser je suis preneur ! tant que sa marche pour mysql

Merci d'avance.
P.S.: si c'est avec la libmysql c'est bon aussi, quelque soit la methode utiliser je suis preneur ! tant que sa marche pour mysql

-
- Messages : 1202
- Inscription : sam. 31/déc./2005 23:52
Voila un exemple de code, fonctionne avec PB4b7.
Code : Tout sélectionner
; -------------------------------
; Petit exemple sur le SQL avec libmysql. Le code provient de divers sources (codes en VB 6 surtout).
; "biensur" si vous compilez tel quel, ca ne marchera pas puis ce que vous n'avez pas la meme base sql que moi ^^;
; Je n'ai pas commenté les commandes de la dll, tout simplement par ce qu'une tres bonne doc le fait à ma place ici:
;http://dev.mysql.com/doc/refman/5.0/fr/c-api-functions.html
#libmysql = 1
If OpenLibrary( #libmysql , "libmysql.dll" ) ;charger la dll et choper l'adresse des fonctions qui vont etre utiles à ce mini tut
Global init = GetFunction( #libmysql , "mysql_init")
Global close = GetFunction(#libmysql, "mysql_close")
Global list_tables = GetFunction(#libmysql, "mysql_list_tables")
Global real_connect=GetFunction(#libmysql,"mysql_real_connect")
Global num_rows=GetFunction(#libmysql,"mysql_num_rows")
Global fetch_row=GetFunction(#libmysql,"mysql_fetch_row")
Global free_result=GetFunction(#libmysql,"mysql_free_result")
Global query = GetFunction(#libmysql,"mysql_query")
Global store_result = GetFunction(#libmysql,"mysql_store_result")
Global real_query = GetFunction(#libmysql,"mysql_real_query")
Global field_count = GetFunction(#libmysql,"mysql_field_count")
Global affected_rows = GetFunction(#libmysql,"mysql_affected_rows")
Global num_fields = GetFunction(#libmysql,"mysql_num_fields")
Global num_rows = GetFunction(#libmysql,"mysql_num_rows")
Global fetch_row = GetFunction(#libmysql,"mysql_fetch_row")
Global fetch_lengths = GetFunction(#libmysql,"mysql_fetch_lengths")
dbHnd = CallCFunctionFast(init,0)
If dbHnd = 0
MessageRequester("Erreur","Impossible d'initialiser la connection", #PB_MessageRequester_Ok)
End
EndIf
Else
MessageRequester("Erreur","Impossible de charger libmysql.dll", #PB_MessageRequester_Ok)
End
EndIf
Procedure.s GetError(db_ID) ; permet de choper l'erreur revoyée par la DB.
Errormsg.s
If CallFunction(#libmysql,"mysql_errno",db_ID) > 0
*Error =CallFunction(#libmysql,"mysql_error",db_ID)
i=-1
Repeat
i=i+1
Errormsg=Errormsg+PeekS(*Error+i,1)
Until PeekB(*Error+i)=0
MessageRequester("Sql a renvoyé une erreur", Errormsg, #PB_MessageRequester_Ok)
Debug Errormsg
EndIf
EndProcedure
; Entrez les infos sur votre base sql (là, c'est celles par défaut de Easy PHP)
IPsql$ = "127.0.0.1"
user$ ="root"
pass$ =""
portsql =0
pipe$ =""
conconf =0
;Se connecter à la base de donnée est tres simple!
If CallFunctionFast(real_connect,dbHnd, IPsql$, user$, pass$, "nomdelabase", portsql, pipe$, conconf) = 0
GetError(dbHnd)
EndIf
;Maintenant, un exemple pour chopper des données:
ID$= "poshu"
MDP$ = "motdepass"
SQL$ = "SELECT ID, email, sex, access_lvl, realname FROM tbl_account WHERE Login = '"+ ID$ +"' AND Pass = '"+ MDP$ +"'" ;ca c'est la requete en SQL j'ai mis des variables pour vous montrer à quel point c'est facil & pratique.
If CallFunctionFast(real_query, dbHnd, SQL$, Len(SQL$)) ;note c'est un peu bizzare, mais real_query renvoie 0 QUAND ELLE MARCHE et des infos QUAND ELLE NE MARCHE PAS. Je suis resté bloqué comme un con à cause de ca xD
GetError(dbHnd)
Else
*mysqlResult=CallFunctionFast(store_result,dbHnd)
If *mysqlResult=0
If CallFunctionFast(field_count,dbHnd)
GetError(dbHnd)
Else
EndIf
Else
affRows = CallFunctionFast(affected_rows,dbHnd)
If affRows > 0
*mysqlRow=CallFunctionFast(fetch_row,*mysqlResult)
*mysqlLen=CallFunctionFast(fetch_lengths,*mysqlResult)
For boucle = 0 To 4 ;ici, le seul piege, c'est qu'il faut peekL puis peeks... :/
length=PeekL(*mysqlLen+4*(boucle))
fieldptr=PeekL(*mysqlRow+4*(boucle))
If fieldptr>0
content.s=PeekS(fieldptr,length)
Else
content="NULL"
EndIf
Debug content
Next boucle
Else
Debug "rien"
EndIf
EndIf
EndIf
Pour tester les requêtes SQL on peut aussi utiliser la lib MDB dispo ici : http://www.reelmedia.org/pureproject/ar ... DB_Lib.zip
Cela permet d'accéder à des base Access.
Voici le code d'exmple fourni avec pour créer une table :
Cela permet d'accéder à des base Access.
Voici le code d'exmple fourni avec pour créer une table :
Code : Tout sélectionner
curdir.s=Space(250)
GetCurrentDirectory_(250,@curdir)
If Right(curdir,1)<>"\":curdir+"\":EndIf
MDB_Create(curdir+"Test")
db=MDB_Connect(curdir,"Test","","")
If db
qry$="Create table Info(id autoincrement,name text(100),phone text(50),constraint Info unique(id));"
If DatabaseQuery(qry$)
DatabaseQuery("Insert into Info(name,phone)values('Paul','555-1234')")
DatabaseQuery("Insert into Info(name,phone)values('Fred','555-0098')")
DatabaseQuery("Insert into Info(name,phone)values('Joey','555-4455')")
Else
Debug "Data already exists"
EndIf
If DatabaseQuery("Select * from Info order by name asc;")
While NextDatabaseRow()
Debug Str(GetDatabaseLong(0))+": "+GetDatabaseString(1)+" ..."+GetDatabaseString(2)
Wend
EndIf
CloseDatabase(db)
EndIf
MDB_Disconnect("Test")