Utilisation de la lib interne pour les base de donnée

Sujets variés concernant le développement en PureBasic
coxco
Messages : 92
Inscription : ven. 06/juin/2008 16:04

Oh d'accord

Message par coxco »

Bon bah j'ai trouvé en fait j'avais pas sélectionner dans options
du compilateur activer l'unicode !!
:D
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

:D Le petite détail au quel on ne pense pas.
Heureux que tu ai trouvé solution à ton problème :wink:
Kayne
Messages : 157
Inscription : sam. 06/oct./2007 18:33
Contact :

Message par Kayne »

A oui mais il y une fonction SQLite pour créer une BDD:

Code : Tout sélectionner

;- Constantes
; ----------
#ODBC_ADD_DSN = 1 ; Ajoute une source de donnée
#ODBC_CONFIG_DSN = 2 ; Configure la source de donnée
#ODBC_REMOVE_DSN = 3 ; Supprime la source

#DataBase = 1
#DSN = "PureBasic_DSN" ;nom de votre base
#Driver = "Microsoft Access Driver (*.mdb)" ;driver utilisé

;- Variables
; ---------
File.s = "C:\Documents and Settings\Hugo\Bureau\mabase.mdb" ;emplacement de la bdd

;- Procedures
; ----------
;** On ouvre la connection
; ----------------------
Procedure Makeconnection(Driver.s,Attributes.s)
result = OpenLibrary(1,"ODBCCP32.DLL")
If result <>; 0 ;si il y a un ; enlevez le !
result = CallFunction(1, "SQLConfigDataSource", 0,#ODBC_ADD_DSN,Driver.s,@Attributes)
NewResult = CallFunction(1, "SQLConfigDataSource", 0,#ODBC_ADD_DSN,Driver.s,@Attributes)
CloseLibrary(1)
EndIf
ProcedureReturn result
EndProcedure ; fin de MakeConnection
;===============================================================================
;** On ferme la connection
; ----------------------
Procedure DeleteConnection(Driver.s,DSN.s)
result=OpenLibrary(1,"ODBCCP32.DLL")
If result
strAttributes.s = "DSN="+DSN
result = CallFunction(1, "SQLConfigDataSource", 0,#ODBC_REMOVE_DSN,Driver,strAttributes )
CloseLibrary(1)
If result
ProcedureReturn 1
EndIf
EndIf
EndProcedure ; fin de DeleteConnection

;*******************************************************************************


;Ensuite vous vous connectez comme ca:
;- Programme
; ---------
InitDatabase() ;ou UseODBCDatabase() pour les dernières versions
Makeconnection(#Driver, "DSN="+#DSN+";Description=Access File;DBQ="+File+";") ;ajoute la connexion
OpenDatabase(#DataBase, #DSN, "", "") ;ouvre la base de donnée
DeleteConnection(#Driver, #DSN ) ; ferme la connexion 
Dernière modification par Kayne le mar. 10/juin/2008 16:18, modifié 2 fois.
__________________________________________

Débutant les tutoriels de mon site sont la pour vous n'hésitez pas à aller les voir: http://tripamort.free.fr/
__________________________________________
Kayne - Webmaster de http://tripamort.free.fr/
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

Bha l'exemple que j'ai donné, c'est des fonctions interne de PB... :?
djmcg
Messages : 139
Inscription : sam. 28/août/2004 6:37

Message par djmcg »

Bonjour,
wolfjeremy a écrit :
CreateFile(0, "DataBase.db")
CloseFile(0)

UseSQLiteDatabase()

OpenDatabase(0, "DataBase.db", "", "")

DatabaseQuery(0, "CREATE DATABASE DataBase") ;Création de la base de donnée dans le fichier DataBase.db

;On créé une table MaTable, on y met les champs Champ1 en varchar (taille spécifié dans la parenthèse) et le champ de de type int.
DatabaseUpdate(0, "CREATE TABLE MaTable (Champ1 varchar(255), Champ2 int(5))")

;Maintenant on insère une entrée dans cette base de donnée, dans la table MaTable
DatabaseUpdate(0, "INSERT INTO MaTable (Champ1, Champ2) VALUES ('Texte dans le champ 1', 12345)")

;Puis on peut lire ce qui a dans la base de donnée
DatabaseQuery(0, "SELECT * FROM MaTable") ;Le * signifie que l'on prend toutes les entrée de la table, ici il y en a qu'une

NextDatabaseRow(0)

;Un petit debug pour te montré ce qu'il y a dans la table
Debug GetDatabaseString(0, 0)
Debug GetDatabaseLong(0, 1)
Savez-vous si cela fonctionne aussi sous Linux ?
Merci
Jean-Marie
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

je n'ai pas de Linux sous la main, mais 100%en function purebasic, ça devrait fonctionner sans problème.
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

Message par GeBonet »

Bonjour,

wolfjeremy à écrit, il y a un temps....

Un exemple de création d'une base de donnée :
CreateFile(0, "DataBase.db")
CloseFile(0)

UseSQLiteDatabase()

OpenDatabase(0, "DataBase.db", "", "")

DatabaseQuery(0, "CREATE DATABASE DataBase") ;Création de la base de donnée dans le fichier DataBase.db

;On créé une table MaTable, on y met les champs Champ1 en varchar (taille spécifié dans la parenthèse) et le champ de de type int.
DatabaseUpdate(0, "CREATE TABLE MaTable (Champ1 varchar(255), Champ2 int(5))")

;Maintenant on insère une entrée dans cette base de donnée, dans la table MaTable
DatabaseUpdate(0, "INSERT INTO MaTable (Champ1, Champ2) VALUES ('Texte dans le champ 1', 12345)")

;Puis on peut lire ce qui a dans la base de donnée
DatabaseQuery(0, "SELECT * FROM MaTable") ;Le * signifie que l'on prend toutes les entrée de la table, ici il y en a qu'une

NextDatabaseRow(0)

;Un petit debug pour te montré ce qu'il y a dans la table
Debug GetDatabaseString(0, 0)
Debug GetDatabaseLong(0, 1)
Ma question : Est-ce que avec Sqlite, pour la même base de donnée "DataBase.db" je peux traiter plusieurs fichiers dans le même fichier "DataBase.db" ... d???
ET greffer sur la séquence ci dessus :
DatabaseUpdate(0, "INSERT INTO MonAutreTABLE (ChampAutre1, ChampAutre2) VALUES ('Un autre Texte dans le ChampAutre1', 56789)")
En supposant évidement que j'ai aussi créer : DatabaseUpdate(0, "CREATE TABLE MonAutreTABLE (ChampAutre1 varchar(255), ChampAutre2 int(5))")

Comme vous le voyez, je ne suis pas spécialement SQlite... Et jusque là préférais traiter mes fichiers seul... Mais bon, faut suivre... :?

J'ai jeté un oeil sur la doc... Mais pas vraiment envie de m'y coller si la réponse que je pose est négative... Merci aux expert !
Voilà, voilà...
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Si j'ai bien compris ta question, la reponse est OUi !!!
Dans un même fichier de base de donnée tu peux avoir autant de table que tu veux !!!
:D
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

Message par GeBonet »

Ben voilà, Thyphoon, c'est ça et merci. Il me reste à bloquer :lol:
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

voilà une procedure que j'utilise dans une de mes applications pour initialisé le fichier de la base de donnée

Code : Tout sélectionner

Procedure NewKeyDb(Name.s)
	Protected Sql.s
	If CreateFile(#Db, Name.s)
		CloseFile(#Db)
		If IsDatabase(#Db)<>0 : CloseDatabase(#Db) : EndIf ;Si on a une base de donnée ouverte on la ferme
		If OpenDatabase(#Db, Name.s, "", "", #PB_Database_SQLite) = 0
			MessageRequester("Error", "Impossible d'ouvir la base de donnée")
			ProcedureReturn #False
		EndIf
		If DatabaseUpdate(#Db, "BEGIN TRANSACTION");
			Sql.s = "Grrrrrr";
			If DatabaseUpdate(#Db, "CREATE TABLE [InfoData] ([Name] VARCHAR(80)  NULL,[Value] VARCHAR(80)  NULL);") = 0 : DbError(Sql.s) : EndIf
			If DatabaseUpdate(#Db, "INSERT INTO [InfoData] ('Name','Value') VALUES ('Version','" + Prefs\Version + "')") = 0 : DbError(Sql.s) : EndIf
			If DatabaseUpdate(#Db, "INSERT INTO [InfoData] ('Name','Value') VALUES ('PluginSignature','B64&RC4')") = 0 : DbError(Sql.s) : EndIf
			If DatabaseUpdate(#Db, "INSERT INTO [InfoData] ('Name','Value') VALUES ('Password','" + MD5StringFingerprint(Prefs\Cle) + "')") = 0 : DbError(Sql.s) : EndIf
			If DatabaseUpdate(#Db, "CREATE TABLE [Group] ([Id] INTEGER  Not NULL PRIMARY KEY AUTOINCREMENT,[Id_Source] INTEGER  NULL,[Icon] VARCHAR(20)  NULL,[Title] VARCHAR(80)  NULL,[Notes] TEXT  NULL);") = 0 : DbError(Sql.s) : EndIf
			If DatabaseUpdate(#Db, "CREATE TABLE [Entry] ([Id] INTEGER  Not NULL PRIMARY KEY AUTOINCREMENT,[Icon] VARCHAR(20)  NULL,[Id_Group] INTEGER  NULL,[Title] VARCHAR(80)  NULL,[Notes] TEXT  NULL);") = 0 : DbError(Sql.s) : EndIf
			If DatabaseUpdate(#Db, "CREATE TABLE [Field] ([Id] INTEGER  Not NULL PRIMARY KEY AUTOINCREMENT,[Icon] VARCHAR(20)  NULL,[Id_Entry] INTEGER  NULL,[FieldName] VARCHAR(80)  NULL,[FieldType] INTEGER  NULL,[FieldValue] VARCHAR(255)  NULL);") = 0 : DbError(Sql.s) : EndIf
			If DatabaseUpdate(#Db, "CREATE TABLE [File] ([Id] INTEGER Not NULL PRIMARY KEY AUTOINCREMENT,[Icon] VARCHAR(20)  NULL,[Id_Entry] INTEGER,[FileName] VARCHAR(40),[Pack] BOOLEAN,[Crypt] BOOLEAN,[FileSize] INTEGER, [FileData] VARCHAR);") = 0 : DbError(Sql.s) : EndIf
			DatabaseUpdate(#Db, "COMMIT");
		EndIf
		;MessageRequester("Times", "Temps d'éxécution total : " + Str(ElapsedMilliseconds()-time) + " ms ", #PB_MessageRequester_Ok);
	EndIf
	ProcedureReturn #True
EndProcedure
les requêtes Sql BEGIN et COMMIT sont là pour accelerer les requêtes, mais là ça ne sert pas a grand chose !
Répondre