Page 4 sur 5

Publié : mer. 15/mars/2006 3:30
par poshu
J'utilisais libmysql.dll; mais je me demandais: ODBC est il plus rapide que de passer par l'api?

Publié : mer. 15/mars/2006 13:00
par wolfjeremy
poshu a écrit :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à ? :?
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...

Publié : mer. 15/mars/2006 14:00
par poshu
Non, je pose une question en profitant du topic.

J'ai transposé un code vb6 en pb pour que ca marche.

Publié : mer. 15/mars/2006 18:13
par Sami
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.

Publié : mer. 15/mars/2006 18:36
par wolfjeremy
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 :P

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 :wink:

Publié : mer. 15/mars/2006 19:49
par Anonyme
Heu je me repte mais personne peut me poster un ptit bou de code pour m'aider ?
+1

Publié : ven. 17/mars/2006 19:31
par wolfjeremy
Mouai... apparement pas de réponse... dommage car j'avais principalement pris purebasic pour faire des programmes qui communiquement avec des bases de donnée :?

Publié : ven. 17/mars/2006 22:08
par poshu
Je vais porter mon code 3.94 vers 4, je fais un mini tut en meme temps. Reviendez ce weekend

Publié : ven. 17/mars/2006 22:09
par wolfjeremy
super merci.

Publié : ven. 17/mars/2006 22:14
par Dorian
wolfjeremy a écrit :super merci.
+1 ^^

Publié : sam. 18/mars/2006 0:37
par flaith
Image aussi !!!

Publié : sam. 18/mars/2006 11:16
par poshu
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

Publié : sam. 18/mars/2006 12:36
par flaith
Merci m'sieur :D

Publié : sam. 18/mars/2006 13:04
par Anonyme
Merci, je vais étudier cela.

Publié : sam. 18/mars/2006 13:29
par Droopy
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 :

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")