Mysql et Pure basic

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Message par poshu »

J'utilisais libmysql.dll; mais je me demandais: ODBC est il plus rapide que de passer par l'api?
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message 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...
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Message par poshu »

Non, je pose une question en profitant du topic.

J'ai transposé un code vb6 en pb pour que ca marche.
Sami
Messages : 51
Inscription : mar. 01/nov./2005 21:13
Localisation : Savigny-Sur-Orge

Message 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.
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message 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:
Anonyme

Message par Anonyme »

Heu je me repte mais personne peut me poster un ptit bou de code pour m'aider ?
+1
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message 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 :?
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Message par poshu »

Je vais porter mon code 3.94 vers 4, je fais un mini tut en meme temps. Reviendez ce weekend
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

super merci.
Dorian
Messages : 489
Inscription : mar. 15/mars/2005 15:33

Message par Dorian »

wolfjeremy a écrit :super merci.
+1 ^^
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

Image aussi !!!
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Message 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
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

Merci m'sieur :D
Anonyme

Message par Anonyme »

Merci, je vais étudier cela.
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message 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")
Répondre