Publié : mer. 15/mars/2006 3:30
J'utilisais libmysql.dll; mais je me demandais: ODBC est il plus rapide que de passer par l'api?
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?
+1Heu je me repte mais personne peut me poster un ptit bou de code pour m'aider ?
+1 ^^wolfjeremy a écrit :super merci.
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
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")