Bases de données

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message 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
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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é :)
Image
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message 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...
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message 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:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message 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
"Qui baise trop bouffe un poil." P. Desproges
Okaryn
Messages : 2
Inscription : lun. 14/août/2006 16:35

Message 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...
fd
Messages : 70
Inscription : mar. 15/mars/2005 21:41
Localisation : Savoie

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

Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

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