Mysql et Pure basic

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Le psychopathe
Messages : 764
Inscription : jeu. 03/mars/2005 19:23

Mysql et Pure basic

Message par Le psychopathe »

J'ai cherché dans l'aide et jke n'ai pas trouvé de commande pour écrire dans notre base de données. J'espère que pure basic ne se limite pas qu'à regarder la base de donnée car je voudrais écrire des informations dedans. Et aussi savoir comment créer une table sur la base par pure basic si c'est possible.

Merci
Sami
Messages : 51
Inscription : mar. 01/nov./2005 21:13
Localisation : Savigny-Sur-Orge

Message par Sami »

Va voir le langage SQL pour MySQL, tu devrais trouver une fonction du type Create Table.
Pour le PureBasic pour mettre à jour ta base utilise DatabaseUpdate().
Avatar de l’utilisateur
Le psychopathe
Messages : 764
Inscription : jeu. 03/mars/2005 19:23

Message par Le psychopathe »

donc il fat que je fasse ça ?
DatabaseUpdate(CREATE TABLE Personne (
nom VARCHAR(40),
‘prénom’ VARCHAR(40),
adresse TINYTEXT,
‘téléphone’ DECIMAL(10,0)
))

Sa fais bizarre, en php non mais là...
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

Pourquoi tu trouve çà bizarre, on dialogue avec une base de données via le langage SQL, donc pourquoi la création d'une table via une requête SQL te paraît bizarre ? En tout cas je confirme je fais comme çà.

Toutefois une autre solution est d'utiliser l'api mysql (libmysql.dll) qui autorise beaucoup plus d'interactivité que les fonctions ODBC ( qui me suffisent personnellement ).
Image
Avatar de l’utilisateur
Le psychopathe
Messages : 764
Inscription : jeu. 03/mars/2005 19:23

Message par Le psychopathe »

Meci flype. Pourrais tu me donner 2-3 morceaux de code ? du style quand tu écris dans ta base de donnée

Merci

J'ai téléchargé la ddl mysql mais je ne trouve pas les fonctions à appeler.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

Je travaille justement depuis peu à l'intégration de la libmysql.lib pour PB4. Je n'ai pas fini mais çà ressemble à quelquechose:


File:1->libmysql5.zip
Image


Fichier include 'libmysql.pb' :

Code : Tout sélectionner

;-----------------------------------------------------------------------------
; 
; Object:       MySQL 5.0 Client Library
; 
; Support:      http://www.purebasic.com
;               http://dev.mysql.com/doc/refman/5.0/en/c-api-functions.html
; 
; Requirements: Purebasic 4.0+
;               libmysql.lib
;               libmysql.dll
;-----------------------------------------------------------------------------

;- Structures

Structure MYSQL
EndStructure
Structure MYSQL_RES
EndStructure
Structure MYSQL_ROW
  field.s[255]
EndStructure
Structure MYSQL_FIELD
  name.s
  org_name.s
  table.s
  org_table.s
  db.s
  catalog.s
  def.s
  length.l
  max_length.l
  name_length.l
  org_name_length.l
  table_length.l
  org_table_length.l
  db_length.l
  catalog_length.l
  def_length.l
  flags.l
  decimals.l
  charset_nr.l
  type.l
EndStructure
Structure MY_CHARSET_INFO
  number.l
  state.l
  csname.s
  name.s
  comment.s
  dir.s
  mbminlen.l
  mbmaxlen.l
EndStructure

;- Imports

Import "libmysql.lib"
  mysql_affected_rows.l(*mysql.MYSQL) As "_mysql_affected_rows@4"
  mysql_autocommit.l(*mysql.MYSQL,*mode.BYTE) As "_mysql_autocommit@8"
  mysql_change_user.l(*mysql.MYSQL,user.s,passwd.s,db.s) As "_mysql_change_user@16"
  mysql_character_set_name.l(*mysql.MYSQL) As "_mysql_character_set_name@4"
  mysql_close.l(*mysql.MYSQL) As "_mysql_close@4"
  mysql_commit.l(*mysql.MYSQL) As "_mysql_commit@4"
  mysql_create_db.l(*mysql.MYSQL,db.s) As "_mysql_create_db@8"
  mysql_data_seek.l(*result.MYSQL_RES,offset.d) As "_mysql_data_seek@12"
  mysql_debug.l(string.s) As "_mysql_debug@4"
  mysql_disable_reads_from_master.l(*mysql.MYSQL) As "_mysql_disable_reads_from_master@4"
  mysql_disable_rpl_parse.l(*mysql.MYSQL) As "_mysql_disable_rpl_parse@4"
  mysql_drop_db.l(*mysql.MYSQL,db.s) As "_mysql_drop_db@8"
  mysql_dump_debug_info.l(*mysql.MYSQL) As "_mysql_dump_debug_info@4"
  mysql_embedded.l() As "_mysql_embedded@0"
  mysql_enable_reads_from_master.l(*mysql.MYSQL) As "_mysql_enable_reads_from_master@4"
  mysql_enable_rpl_parse.l(*mysql.MYSQL) As "_mysql_enable_rpl_parse@4"
  mysql_eof.l(*result.MYSQL_RES) As "_mysql_eof@4"
  mysql_errno.l(*mysql.MYSQL) As "_mysql_errno@4"
  mysql_error.l(*mysql.MYSQL) As "_mysql_error@4"
  mysql_escape_string.l(strTo.s,strFrom.s,length.l) As "_mysql_escape_string@12"
  mysql_fetch_field.l(*result.MYSQL_RES) As "_mysql_fetch_field@4"
  mysql_fetch_field_direct.l(*result.MYSQL_RES,fieldnr.l) As "_mysql_fetch_field_direct@8"
  mysql_fetch_fields.l(*result.MYSQL_RES) As "_mysql_fetch_fields@4"
  mysql_fetch_lengths.l(*result.MYSQL_RES) As "_mysql_fetch_lengths@4"
  mysql_fetch_row.l(*result.MYSQL_RES) As "_mysql_fetch_row@4"
  mysql_field_count.l(*mysql.MYSQL) As "_mysql_field_count@4"
  mysql_field_seek.l(*result.MYSQL_RES,offset.l) As "_mysql_field_seek@8"
  mysql_field_tell.l(*result.MYSQL_RES) As "_mysql_field_tell@4"
  mysql_free_result.l(*result.MYSQL_RES) As "_mysql_free_result@4"
  mysql_get_character_set_info.l(*mysql.MYSQL,*cs.MY_CHARSET_INFO) As "_mysql_get_character_set_info@8"
  mysql_get_client_info.l() As "_mysql_get_client_info@0"
  mysql_get_client_version.l() As "_mysql_get_client_version@0"
  mysql_get_host_info.l(*mysql.MYSQL) As "_mysql_get_host_info@4"
  mysql_get_parameters.l() As "_mysql_get_parameters@0"
  mysql_get_proto_info.l(*mysql.MYSQL) As "_mysql_get_proto_info@4"
  mysql_get_server_info.l(*mysql.MYSQL) As "_mysql_get_server_info@4"
  mysql_get_server_version.l(*mysql.MYSQL) As "_mysql_get_server_version@4"
  mysql_hex_string.l(strTo.s,strFrom.s,length.l) As "_mysql_hex_string@12"
  mysql_info.l(*mysql.MYSQL) As "_mysql_info@4"
  mysql_init.l(*mysql.MYSQL) As "_mysql_init@4"
  mysql_insert_id.l(*mysql.MYSQL) As "_mysql_insert_id@4"
  mysql_kill.l(*mysql.MYSQL,pid.l) As "_mysql_kill@8"
  mysql_library_end.l(*mysql.MYSQL) As "_mysql_library_end@0"
  mysql_library_init.l(argc.l,argv.l,groups.l) As "_mysql_library_init@12"
  mysql_list_dbs.l(*mysql.MYSQL,wild.s) As "_mysql_list_dbs@8"
  mysql_list_fields.l(*mysql.MYSQL,table.s,wild.s) As "_mysql_list_fields@12"
  mysql_list_processes.l(*mysql.MYSQL) As "_mysql_list_processes@4"
  mysql_list_tables.l(*mysql.MYSQL,wild.s) As "_mysql_list_tables@8"
  mysql_master_query.l(*mysql.MYSQL,query.s,length.l) As "_mysql_master_query@12"
  mysql_more_results.l(*mysql.MYSQL) As "_mysql_more_results@4"
  mysql_next_result.l(*mysql.MYSQL) As "_mysql_next_result@4"
  mysql_num_fields.l(*result.MYSQL_RES) As "_mysql_num_fields@4"
  mysql_num_rows.l(*result.MYSQL_RES) As "_mysql_num_rows@4"
  mysql_options.l(*mysql.MYSQL,option.l,arg.s) As "_mysql_options@12"
  mysql_ping.l(*mysql.MYSQL) As "_mysql_ping@4"
  mysql_query.l(*mysql.MYSQL,query.s) As "_mysql_query@8"
  mysql_read_query_result.l(*mysql.MYSQL) As "_mysql_read_query_result@4"
  mysql_real_connect.l(*mysql.MYSQL,host.s,user.s,passwd.s,db.s,port.l,unix_socket.s,client_flag.l) As "_mysql_real_connect@32"
  mysql_real_escape_string.l(*mysql.MYSQL,strTo.s,strFrom.s,length.l) As "_mysql_real_escape_string@16"
  mysql_real_query.l(*mysql.MYSQL,query.s,length.l) As "_mysql_real_query@12"
  mysql_refresh.l(*mysql.MYSQL,options.l) As "_mysql_refresh@8"
  mysql_reload.l(*mysql.MYSQL) As "_mysql_reload@4"
  mysql_rollback.l(*mysql.MYSQL) As "_mysql_rollback@4"
  mysql_row_seek.l(*mysql.MYSQL,offset.l) As "_mysql_row_seek@8"
  mysql_row_tell.l(*result.MYSQL_RES) As "_mysql_row_tell@4"
  mysql_select_db.l(*mysql.MYSQL,db.s) As "_mysql_select_db@8"
  mysql_rpl_parse_enabled.l(*mysql.MYSQL) As "_mysql_rpl_parse_enabled@4"
  mysql_rpl_probe.l(*mysql.MYSQL) As "_mysql_rpl_probe@4"
  mysql_rpl_query_type.l(*mysql.MYSQL,type.l) As "_mysql_rpl_query_type@8"
  mysql_send_query.l(*mysql.MYSQL,query.s,length.l) As "_mysql_send_query@12"
  mysql_server_end.l() As "_mysql_server_end@0"
  mysql_server_init.l(argc.l,argv.l,groups.l) As "_mysql_server_init@12"
  mysql_set_character_set.l(*mysql.MYSQL,csname.s) As "_mysql_set_character_set@8"
  mysql_set_server_option.l(*mysql.MYSQL,option.l) As "_mysql_set_server_option@8"
  mysql_shutdown.l(*mysql.MYSQL,shutdown_level.l) As "_mysql_shutdown@8"
  mysql_slave_query.l(*mysql.MYSQL,query.s,length.l) As "_mysql_slave_query@12"
  mysql_sqlstate.l(*mysql.MYSQL) As "_mysql_sqlstate@4"
  mysql_ssl_set.l(*mysql.MYSQL,key.s,cert.s,ca.s,capath.s,cipher.s) As "_mysql_ssl_set@24"
  mysql_stat.l(*mysql.MYSQL) As "_mysql_stat@4"
  mysql_store_result.l(*mysql.MYSQL) As "_mysql_store_result@4"
  mysql_thread_end.l() As "_mysql_thread_end@0"
  mysql_thread_id.l(*mysql.MYSQL) As "_mysql_thread_id@4"
  mysql_thread_init.l() As "_mysql_thread_init@0"
  mysql_thread_safe.l() As "_mysql_thread_safe@0"
  mysql_use_result.l(*mysql.MYSQL) As "_mysql_use_result@4"
  mysql_warning_count.l(*mysql.MYSQL) As "_mysql_warning_count@4"
EndImport

;- End

Fichier d'exemple 'libmysql_test.pb' :

Code : Tout sélectionner

;-----------------------------------------------------------------------------
; 
; Object:       MySQL 5.0 Client Application
; 
; Support:      http://www.purebasic.com
;               http://dev.mysql.com/doc/refman/5.0/en/c-api-functions.html
; 
; Requirements: Purebasic 4.0+
;               libmysql.pb
;               libmysql.lib
;               libmysql.dll
;-----------------------------------------------------------------------------

XIncludeFile "libmysql.pb"

Procedure Test_Client()
  Debug "[Client]"
  Debug mysql_get_client_version()
  Debug PeekS(mysql_get_client_info())
  Debug Hex(mysql_get_parameters())
EndProcedure
Procedure Test_Error(handle.l)
  Debug "[Error]"
  Debug mysql_errno(handle)
  Debug PeekS(mysql_sqlstate(handle))
  Debug PeekS(mysql_error(handle))
EndProcedure
Procedure Test_Server(handle.l)
  Debug "[Server]"
  Debug mysql_get_server_version(handle)
  Debug PeekS(mysql_get_server_info(handle))
  Debug PeekS(mysql_get_host_info(handle))
EndProcedure
Procedure Test_Fields(result.l)
  Debug "[Fields]"
  For i = 0 To mysql_num_fields(result) - 1
    *field.MYSQL_FIELD = mysql_fetch_field(result)
    fields.s + *field\name + ", "
  Next
  Debug fields
EndProcedure
Procedure Test_Rows(result.l)
  Debug "[Rows]"
  For i = 0 To mysql_num_rows(result) - 1
    *row.MYSQL_ROW = mysql_fetch_row(result)
    If *row
      rows.s = ""
      For j = 0 To mysql_num_fields(result) - 1
        rows + *row\field[j] + ", "
      Next
      Debug rows
    EndIf
  Next
EndProcedure
Procedure Test_Query(handle.l,query.s)
  Debug "[Query]"
  If mysql_query(handle,query)
    Test_Error(handle)
  Else
    result = mysql_store_result(handle)
    If result
      Test_Fields(result)
      Test_Rows(result)
      mysql_free_result(result)
    EndIf
  EndIf
EndProcedure
Procedure Test_Processes(handle.l)
  Debug "[Processes]"
  result = mysql_list_processes.l(handle)
  If result
    Test_Fields(result)
    Test_Rows(result)
    mysql_free_result(result)
  EndIf
EndProcedure
Procedure Test_Tables(handle.l)
  Debug "[Tables]"
  result = mysql_list_tables.l(handle,"")
  If result
    Test_Fields(result)
    Test_Rows(result)
    mysql_free_result(result)
  EndIf
EndProcedure
Procedure Test_Dbs(handle.l)
  Debug "[Dbs]"
  result = mysql_list_dbs.l(handle,"")
  If result
    Test_Fields(result)
    Test_Rows(result)
    mysql_free_result(result)
  EndIf
EndProcedure

;-------------

#MYHOST = "localhost"
#MYUSER = "root"
#MYPASS = ""

Test_Client()
hDB = mysql_init(#Null)
If hDB
  If mysql_real_connect(hDB,#MYHOST,#MYUSER,#MYPASS,"test",3306,"NULL",#Null)
    Test_Server(hDB)
    Test_Processes(hDB)
    Test_Dbs(hDB)
    Test_Tables(hDB)
    Test_Query(hDB,"SELECT NOW()")
    Test_Query(hDB,"SELECT NOW() 'DateTime', (1+2*16) 'Expression'")
    Test_Query(hDB,"DROP TABLE people")
    Test_Query(hDB,"CREATE TABLE people (firstname VARCHAR(64), name VARCHAR(64))")
    Test_Query(hDB,"INSERT INTO people VALUES('Jean','Dupont')")
    Test_Query(hDB,"INSERT INTO people VALUES('Patrice','Durand')")
    Test_Query(hDB,"INSERT INTO people VALUES('Hélène','Dubois')")
    Test_Query(hDB,"SELECT firstname,name FROM people ORDER BY name ASC")
  Else
    Test_Error(hDB)
  EndIf
  mysql_close(hDB)
EndIf

;-------------

Dernière modification par Flype le mer. 22/févr./2006 15:12, modifié 1 fois.
Image
Dorian
Messages : 489
Inscription : mar. 15/mars/2005 15:33

Message par Dorian »

Super je cherchais sa aussi ^^. Deplus je viens d'installer cette version de MySQL ^^
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

Oui la libmysql est mieu mais moi j'ai eu beaucoup de problème avec.
Avatar de l’utilisateur
Le psychopathe
Messages : 764
Inscription : jeu. 03/mars/2005 19:23

Message par Le psychopathe »

Meci flype mais j'avais déjà ton code avec le forum anglais.
Donc en gros personne se sert de pure basic pour le mysql.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

Le psychopathe a écrit :Meci flype mais j'avais déjà ton code avec le forum anglais.
Donc en gros personne se sert de pure basic pour le mysql.
ben si, moi je le fais quotidiennement depuis 2ans,
je vois pas où est le problème...
Image
Avatar de l’utilisateur
Le psychopathe
Messages : 764
Inscription : jeu. 03/mars/2005 19:23

Message par Le psychopathe »

Quand je dis personne sans sert du point de vue que l'on passe par la lib externe mysql. Enfin si j'ai tout compris.
Dorian
Messages : 489
Inscription : mar. 15/mars/2005 15:33

Message par Dorian »

Le psychopathe a écrit :Quand je dis personne sans sert du point de vue que l'on passe par la lib externe mysql. Enfin si j'ai tout compris.
Je pense qu'il n'y a pas trop d'autres moyen sachant que même apache passe par cette dll :?

Peut-être le driver ODBC mais j'ai jamais réussi à faire fonctionner un de ces Driver ^^.

Je vais enfin pouvoir me mettre aux DataBases ^^
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

Apparemment ya malentendu, je reprécise que les 2 solutions fonctionnent très bien.

Moi j'utilise surtout les fonctions natives de PB via le pilote MyODBC
http://dev.mysql.com/get/Downloads/MyOD ... pub/MySQL/

Ensuite, c'est sûr il faut savoir configurer correctement ODBC,
et pour çà rendez vous dans démarrer -> éxécuter -> odbcad32 -> source de données système -> ajouter -> MySQL ODBC 3.51 Driver -> et remplissez les champs.

Et d'autres parts, il faut configurer correctement la base de données, les accès, le réseau, les ports... Enfin toute la chaîne quoi...

Honnetement, çà marche très très bien.

Sinon, j'avais télécharger une doc il y a treeeès longtemps sur comment configurer ODBC pour Purebasic, je la repropose en téléchargement ici:
File:1->PB_SQL.zip
Image



Sinon, pour l'include 'libmysql.pb', tout marche bien pour moi,
mais il y a beaucoup de fonctions alors ceux qui veulent tester
çà m'aiderait beaucoup de rapporter tous les problèmes ici, merci et amusez vous bien.

File:1->libmysql5.zip
Image


:P
Image
Dorian
Messages : 489
Inscription : mar. 15/mars/2005 15:33

Message par Dorian »

Flype a écrit :Sinon, pour l'include 'libmysql.pb', tout marche bien pour moi,
mais il y a beaucoup de fonctions alors ceux qui veulent tester
çà m'aiderait beaucoup de rapporter tous les problèmes ici, merci et amusez vous bien.

File:1->libmysql5.zip
Image


:P
J'ai un pb avec ce zip :( . J'ai dézippé le contenu du zip dans le même dossier et j'ai essayé de compiler le fichier test mais je tombe sur l'erreur :
"Le point d'entrée de procédure mysql_hex_string est introuvable dans la bibliotèque de liaisons dynamique LIBMYSQL.dll"

Pour info j'ai MySQL 5.0.18
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

mets la/les lignes qui bloque en commentaire et relance. :roll:
Image
Répondre