Page 2 sur 2

Oh d'accord

Publié : lun. 09/juin/2008 18:50
par coxco
Bon bah j'ai trouvé en fait j'avais pas sélectionner dans options
du compilateur activer l'unicode !!
:D

Publié : lun. 09/juin/2008 20:46
par wolfjeremy
:D Le petite détail au quel on ne pense pas.
Heureux que tu ai trouvé solution à ton problème :wink:

Publié : mar. 10/juin/2008 16:05
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 

Publié : mar. 10/juin/2008 16:08
par wolfjeremy
Bha l'exemple que j'ai donné, c'est des fonctions interne de PB... :?

Publié : lun. 11/août/2008 8:40
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

Publié : lun. 11/août/2008 8:43
par Thyphoon
je n'ai pas de Linux sous la main, mais 100%en function purebasic, ça devrait fonctionner sans problème.

Publié : lun. 20/oct./2008 15:45
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à...

Publié : lun. 20/oct./2008 16:48
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

Publié : lun. 20/oct./2008 21:08
par GeBonet
Ben voilà, Thyphoon, c'est ça et merci. Il me reste à bloquer :lol:

Publié : mar. 21/oct./2008 7:06
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 !