Page 2 sur 2

Publié : ven. 14/juil./2006 12:51
par gansta93
Merci de ton aide. :-D Je ne sais pas si c'est moi, mais je ne trouve pas beaucoup d'exemple de codes sur le forum qui utilisent la lib DataBase de Pure... si ce n'est pas moi qui suis pas doué, c domage... mais merci encore. :-D

Publié : ven. 14/juil./2006 13:14
par Flype
c'est vrai que ya pas bcp d'examples sur le forum mais ca se comprends, c'est pas trop distribuable un source qui fait appel aux bdd, puisque peu de personnes pourront le tester : installation, configuration de la bdd, création des tables, pfff, faut vraiment etre motivé :)

Publié : ven. 14/juil./2006 13:16
par gansta93
Flype a écrit :c'est vrai que ya pas bcp d'examples sur le forum mais ca se comprends, c'est pas trop distribuable un source qui fait appel aux bdd, puisque peu de personnes pourront le tester : installation, configuration de la bdd, création des tables, pfff, faut vraiment etre motivé :)
C'est pour ça que ça serait bien que PureBasic le gère...

Publié : ven. 14/juil./2006 13:16
par lionel_om
Il m'intéresse ton code Flype, car pour me connecter à une BD Access j'avais un code beaucoup plus long et avec des OpenLibrary()...

J'v matter ca de près :wink:

Publié : ven. 14/juil./2006 19:43
par KarLKoX
gansta93 a écrit :
KarLKoX a écrit :Perso, étant pas du tout orienté sgbd, je me sert d'EasyPHP qui permet de crééer rapidement une base de donnée sans trop de difficulté même pour un néophyte comme moi :P
Mais après, comment utiliser cette BDD avec Pure appart en appelant une page PHP qui transmet les information qui sont ensuite réinterprétées par le programme ?
A coup de ImportC et de libmysql.lib :P

Publié : lun. 14/août/2006 16:45
par Okaryn
Flype a écrit :c'est vrai que ya pas bcp d'examples sur le forum mais ca se comprends, c'est pas trop distribuable un source qui fait appel aux bdd, puisque peu de personnes pourront le tester : installation, configuration de la bdd, création des tables, pfff, faut vraiment etre motivé :)
Il n'est pas nécessaire d'utiliser de gros SGBD pour maniupuler des tables. Un programme avec une base de type Access, DBase, etc... peut très bien être distribué sans que l'utilisateur ai besoin de faire une installation ou un paramétrage.

Avec les API Windows il n'est même pas nécessaire d'utiliser les alias ODBC, on peut ouvrir une base avec son nom.

Après, tout dépend de ce que l'on veut faire avec le programme. Si c'est pour gérer une quelques tables ou bien des 100aines avec des milliers d'enregistrements...

Publié : ven. 25/août/2006 15:21
par fd
Je vous propose ma façon de faire (création lien ODBC) / suppression. Et utilisation SQL sur une base access. J'ai écrit ces lignes à partir de divers exemple sur les forums et je les utilise depuis un an sans problème.

Code : Tout sélectionner

#ODBC_ADD_DSN = 1 ; Add Data source 
#ODBC_CONFIG_DSN = 2 ; Configure (edit) Data source 
#ODBC_REMOVE_DSN = 3 ; Remove Data source 

;- Gadget Constants
;
Enumeration
  #ODBC_0
EndEnumeration

;- Fct - Connexion à la BD 
Procedure MakeConnection(Driver.s,strAttributes.s) 
  Result=OpenLibrary(#ODBC_0,"ODBCCP32.DLL") 
  If Result 
    lpszDriver.s=Driver 
    MyMemory=AllocateMemory(Len(strAttributes)) 
    CopyMemory(@strAttributes,MyMemory,Len(strAttributes)) 
    For L=1 To Len(strAttributes ) 
      If PeekB(MyMemory +l-1)=Asc(";"):PokeB(MyMemory +l-1,0):  EndIf 
    Next L 
    Result = CallFunction(#ODBC_0, "SQLConfigDataSource", 0,#ODBC_ADD_DSN,lpszDriver.s,MyMemory ) 
    NewResult=SQLConfigDataSource_(0,#ODBC_ADD_DSN,lpszDriver.s,MyMemory ) 
    
    FreeMemory(#ODBC_0) 
    CloseLibrary(#ODBC_0) 
    If Result 
      ProcedureReturn 1 
    EndIf 
  EndIf 
EndProcedure 


;- Fct - Fermeture de laconnexion 
Procedure DeleteConnection(Driver.s,DSN.s) 
  Result=OpenLibrary(#ODBC_0,"ODBCCP32.DLL") 
  If Result 
    lpszDriver.s=Driver
    strAttributes.s = "DSN="+DSN 
    Result = CallFunction(#ODBC_0, "SQLConfigDataSource", 0,#ODBC_REMOVE_DSN,lpszDriver.s,strAttributes ) 
    CloseLibrary(#ODBC_0) 
    If Result 
      ProcedureReturn 1;MessageRequester("Info","DSN Delete",0) 
    EndIf 
  EndIf 
EndProcedure

;- Création DNS dans ODBC
Result=Makeconnection("Microsoft Access Driver (*.mdb)","Server=SomeServer; Description=Description For Purebasic MDB-ODBC;DSN=PureBasic_DSN;DBQ="+DbPlan+"\Base.mdb;UID='';PWD='';") 

If InitDatabase() = 0 
  MessageRequester("Erreur", "Initialisation ODBC impossible !", 0) 
  End 
EndIf 

;- Utilisation de la base de données en SELECT
Procedure Login()
If OpenDatabase(#Data_0, "PureBasic_DSN", "","") 
  If DatabaseQuery(#Data_0,"SELECT * FROM Login WHERE Code='"+User+"'")
    If NextDatabaseRow(#Data_0)
      Nom.s = GetDatabaseString(#Data_0,1)
      Pre.s = GetDatabaseString(#Data_0,2)
      StatusBarText(#StatutBar_0, 0, "Bonjour "+ Pre + " " + Nom)
    EndIf
  EndIf
  CloseDatabase(#Data_0)
EndIf
EndProcedure

;- Utilisation de la base de données en DELETE / INSERT
Procedure Ecrit()
If OpenDatabase(#Dat_00201, "PureBasic_DSN", "","")
  DatabaseQuery(#Dat_00201,"DELETE * FROM Test WHERE Code = '"+User+"'")
  DatabaseQuery(#Dat_00201,"INSERT INTO Test([code],[Debut],[Fin]) VALUES ('" + User + "','" + Debut + "','" + Fin + "')")
  CloseDatabase(#Data_0)
EndIf
EndProcedure

;- Suppression connection DNS dans ODBC : à ajouter à la fermeture de l'application
Result=Makeconnection("Microsoft Access Driver (*.mdb)","PureBasic_DSN") 


Publié : sam. 26/août/2006 10:10
par Flype
ou alors dans le meme esprit - on en parlait le mois dernier :

http://purebasic.forum-gratuit.com/view ... c&start=60

Code : Tout sélectionner

; flype, juil 2006 

Enumeration 1 
  #ODBC_ADD_DSN            ; Ajoute une source de données utilisateur. 
  #ODBC_CONFIG_DSN         ; Configure/Modifie une source de données utilisateur existante. 
  #ODBC_REMOVE_DSN         ; Supprime une source de données utilisateur existante. 
  #ODBC_ADD_SYS_DSN        ; Ajoute une source de données système. 
  #ODBC_CONFIG_SYS_DSN     ; Configure/Modifie une source de données système existante. 
  #ODBC_REMOVE_SYS_DSN     ; Supprime une source de données système existante. 
  #ODBC_REMOVE_DEFAULT_DSN ; Supprime la source de données définies par défaut. 
EndEnumeration 

#ODBC_DRIVER_MSACCESS = "Microsoft Access Driver (*.mdb)" 

Procedure.l MSAccess_AddConnection(name.s, database.s, hwnd.l = #Null) 
  
  Protected attrs.s 
  
  attrs + "UID="         + ";" 
  attrs + "PWD="         + ";" 
  attrs + "DSN="         + name + ";" 
  attrs + "DBQ="         + database + ";" 
  attrs + "FIL="         + "MS Access;" 
  attrs + "Driver="      + "ODBCJT32.DLL;" 
  attrs + "DefaultDir="  + GetPathPart(database) + ";" 
  attrs + "Description=" + FormatDate("Créé le %dd-%mm-%yyyy, %hh:%ii:%ss;", Date()) 
  
  ReplaceString(attrs, ";", #NULL$, 2) 
  
  ProcedureReturn SQLConfigDataSource_(hWnd, #ODBC_ADD_DSN, #ODBC_DRIVER_MSACCESS, attrs) 
  
EndProcedure 

Procedure.l MSAccess_RemoveConnection(name.s, hwnd.l = #Null) 
  
  ProcedureReturn SQLConfigDataSource_(hWnd, #ODBC_REMOVE_DSN, #ODBC_DRIVER_MSACCESS, "DSN="+name) 
  
EndProcedure 

If InitDatabase() 
  
  DSN.s = "pbtest" 
  
  If MSAccess_AddConnection(DSN, "c:\test.mdb") 
    
    If OpenDatabase(0, DSN, "", "") 
      
      If DatabaseQuery(0, "SELECT NOW") 
        If NextDatabaseRow(0) 
          Debug GetDatabaseString(0, 0) 
        EndIf 
      EndIf 
      
      If DatabaseQuery(0, "SELECT * FROM personne") 
        While NextDatabaseRow(0) 
          Debug GetDatabaseString(0, 0) 
          Debug GetDatabaseString(0, 1) 
          Debug GetDatabaseString(0, 2) 
        Wend 
      EndIf 
      
    EndIf 
    
    MSAccess_RemoveConnection(DSN) 
  
  EndIf 
  
EndIf