Platforms to show: All Mac Windows Linux Cross-Platform

/Main/Preferences with local Database


Required plugins for this example:

You find this example project in your Plugins Download as a Xojo project file within the examples folder: /Main/Preferences with local Database

This example is the version from Sun, 15th Feb 2014.

Project "Preferences with local Database.xojo_binary_project"
Class App Inherits Application
Const kEditClear = "&Delete"
Const kFileQuit = "&Quit"
Const kFileQuitShortcut = ""
EventHandler Sub Open() pref.init dim n as integer = pref.value("Counter") MsgBox str(n)+"nth launch." pref.Value("Counter") = n +1 End EventHandler
End Class
MenuBar MainMenuBar
MenuItem FileMenu = "&File"
MenuItem FileQuit = "#App.kFileQuit"
MenuItem EditMenu = "&Edit"
MenuItem EditUndo = "&Undo"
MenuItem EditSeparator1 = "-"
MenuItem EditCut = "Cu&t"
MenuItem EditCopy = "&Copy"
MenuItem EditPaste = "&Paste"
MenuItem EditClear = "#App.kEditClear"
MenuItem EditSeparator2 = "-"
MenuItem EditSelectAll = "Select &All"
End MenuBar
Module Pref
Const PrefFilename = "TestPref.db"
Const PrefPassword = ""
Sub Init() dic = new Dictionary // define in PrefFilename the name of the preferences file dim file as FolderItem = SpecialFolder.Preferences.Child(PrefFileName) #if RBVersion<2013 then // in Real Studio dim d as new REALSQLDatabase #else // in Xojo dim d as new SQLiteDatabase #endif if PrefPassword.len>0 then // you can put in PrefPassword a password for pref file d.EncryptionKey = PrefPassword end if d.DatabaseFile = file if file.Exists then if d.Connect then dbv = d ReadTable else dim e as string = D.ErrorMessage break end if else if d.CreateDatabaseFile then d.SQLExecute "CREATE TABLE Pref (Key VARCHAR UNIQUE, Value VARCHAR)" if d.Error then dim e as string = D.ErrorMessage Break end if d.Commit dbv = d else dim e as string = D.ErrorMessage break end if end if End Sub
Private Sub ReadTable() // values are cached in dictionary in memory for quick read access #if RBVersion<2013 then dim db as REALSQLDatabase = dbv #else dim db as SQLiteDatabase = dbv #endif dim r as RecordSet = db.SQLSelect("SELECT Key,Value FROM Pref") if db.Error then dim e as string = db.ErrorMessage Break Return end if while not r.EOF dim Key as string = r.IdxField(1).StringValue dim Value as string = r.IdxField(2).StringValue dic.Value(key) = value r.MoveNext wend End Sub
Function Value(key as string) As Variant // you can query values here Return dic.Lookup(key, nil) End Function
Sub Value(key as string, assigns value as variant) // you can set value here #if RBVersion<2013 then dim db as REALSQLDatabase = dbv #else dim db as SQLiteDatabase = dbv #endif dim sql as string = "INSERT OR REPLACE INTO Pref (Key, Value) VALUES (?,?)" dim p as PreparedSQLStatement = db.Prepare(sql) #if RBVersion<2013 then p.BindType(0, REALSQLPreparedStatement.SQLITE_TEXT) p.BindType(1, REALSQLPreparedStatement.SQLITE_TEXT) #else p.BindType(0, SQLitePreparedStatement.SQLITE_TEXT) p.BindType(1, SQLitePreparedStatement.SQLITE_TEXT) #endif p.Bind(0, key) p.Bind(1, value) p.SQLExecute if db.Error then dim e as string = db.ErrorMessage Break Return end if dic.Value(key) = value End Sub
Property Private dbv As Variant
we store as variant, so you can build this with Real Studio, Xojo or even Realbasic...
Property Private dic As Dictionary
End Module
End Project

The items on this page are in the following plugins: MBS Main Plugin.


The biggest plugin in space...