French Base de Donnée locale

bonjour, pour mon application je dois utiliser une base de donnée locale (c' est à dire stocké sur la mémoire du téléphone).

J' ai trouvé un tuto sur le forum anglais qui montre comment la créer :

SQL1.Initialize(File.DirDefaultExternal, "test1.db", True)

Pour la créer qu' une seule fois, j' utilise ça :

If FirstTime Then

SQL1.Initialize(File.DirDefaultExternal, "test1.db", True)
SQL1.ExecNonQuery("CREATE TABLE table1 (col1 INT)")

End If



J' ai mis une requéte pour créer une table mais seulement elle se créer à chaque fois, donc mon code ne marche pas.
Ce que je veux faire, c' est créer une base avec une table, mais uniquement si cette dernière n' existe pas sinon je vais perdre les données à l' intérieur.
 

klaus

Expert
Licensed User
Longtime User
Non ça ne suffit pas.
Il faut encore tester si le fichier existe déjà et ne créer la base de données que si le fichier n'existe pas!
FirstTime ne veut pas dire la toute première fois que le programme est lancé mais FirstTime = True chaque fois que le programme est lancé après que le système d'exploitation l'a arrêté.

Dans le User's Guide il y a un programme exemple SQL complet, expliqué et avec le code source.

Meilleures salutations.
 
Merci énormément de ton aide.
Je viens de regarder le user' s guide, il est vraiment génial !!
Seulement ça ne marche toujours pas, cette fois ci j' ai une erreur.

Voici le code que j' ai repris du guide :

If File.Exists(File.DirDefaultExternal, "data1.db") = False Then
If FirstTime Then
File.Copy(File.DirAssets, "data1.db", File.DirDefaultExternal, "data1.db")
SQL1.Initialize(File.DirDefaultExternal, "data1.db", True)
End If
Else
If FirstTime Then
SQL1.Initialize(File.DirDefaultExternal, "data1.db", True)
End If
End If
 

klaus

Expert
Licensed User
Longtime User
Désolé, le cas dans le User's Guide est différent du tien car il suppose qu'une base de données existe dans le répertoire DirAssets.
Il faut remplacer la ligne
File.Copy(File.DirAssets, "data1.db", File.DirDefaultExternal, "data1.db")
par votre ligne de création de la base de données.

Meilleures salutations.
 
ce qui donne au final ce code :

If File.Exists(File.DirDefaultExternal, "data1.db") = False Then
If FirstTime Then


SQL1.ExecNonQuery("CREATE DATABASE data1")
SQL1.ExecNonQuery("CREATE TABLE table1 (col1 INT)")

End If
Else
If FirstTime Then
SQL1.Initialize(File.DirDefaultExternal, "data1.db", True)
End If
End If

Ce doit pas être ça puisque ça ne fonctionne pas
 

klaus

Expert
Licensed User
Longtime User
Ce code fonctionne:
B4X:
If FirstTime Then
     If File.Exists(File.DirDefaultExternal, "data1.db") = False Then
         SQL1.Initialize(File.DirDefaultExternal, "data1.db", True)
         SQL1.ExecNonQuery("CREATE TABLE table1 (col1 INT)")
     Else
         SQL1.Initialize(File.DirDefaultExternal, "data1.db", True)
     End If
End If
Meilleures salutations.
 
Merci énormément je n' ai plus d' erreur mais il y a un truc que je ne comprends pas bien.

SQL1.Initialize(File.DirDefaultExternal, "data1.db", True)

Que fait cette ligne ? Elle créai la base ?
Si oui cela veut dire que je vais toujours me retrouver avec une base vierge ?
 

klaus

Expert
Licensed User
Longtime User
SQL1.Initialize(File.DirDefaultExternal, "data1.db", True)
Que fait cette ligne ? Elle créai la base ?
C'est le troisième paramètre qui définit si la base sera créée.
True elle sera créé
False elle ne le sera pas.

Si oui cela veut dire que je vais toujours me retrouver avec une base vierge ?
Bien sûr que NON !
Si la base existe cette ligne initialise donc attribue l'objet SQL1 à la base de donnée concernée.

Meilleures saluatations.
 
Top