Bases de données
C'est pour ça que ça serait bien que PureBasic le gère...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é
-
lionel_om
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
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
J'v matter ca de près
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
A coup de ImportC et de libmysql.libgansta93 a écrit :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 ?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
"Qui baise trop bouffe un poil." P. Desproges
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.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é
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...
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")
ou alors dans le meme esprit - on en parlait le mois dernier :
http://purebasic.forum-gratuit.com/view ... c&start=60
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