Code: Select all
;=============================================================================================== ===============================================================================
;
;==================================================================================================== ==========================================================================
UseSQLiteDatabase() ; Tell compiler we are using SQLite support
;==================================================================================================== ==========================================================================
;
;==================================================================================================== ==========================================================================
Global DatabaseHandle.i, DatabaseName.s ;
;==================================================================================================== ==========================================================================
;
;==================================================================================================== ==========================================================================
CurrentDirectory.s = GetCurrentDirectory() ;
DatabaseName.s = CurrentDirectory.s + "Stuffaduckelse.db" ;
;==================================================================================================== ==========================================================================
;
;==================================================================================================== ==========================================================================
Declare OpenMasterRecipebook() ;
Declare.s CountRecords(TableField.s, TableName.s) ;
Declare InsertDummyData() ;
;==================================================================================================== ==========================================================================
; Try to open the system database and create missing tables
;==================================================================================================== ==========================================================================
Procedure OpenMasterRecipebook()
;------------------------------------------------------------------------------------------------
;
;------------------------------------------------------------------------------------------------
Protected FileHandle.i, DatabaseUpdate.s
;------------------------------------------------------------------------------------------------
;
;------------------------------------------------------------------------------------------------
FileHandle.i = OpenFile(#PB_Any, DatabaseName.s)
;------------------------------------------------------------------------------------------------
;
;------------------------------------------------------------------------------------------------
If FileHandle.i
CloseFile(FileHandle.i)
DatabaseHandle.i = OpenDatabase(#PB_Any, DatabaseName.s, "", "", #PB_Database_SQLite)
If DatabaseHandle.i <> 0
; Write out the chapters table
DatabaseUpdate.s = "CREATE TABLE IF NOT EXISTS Chapters("
DatabaseUpdate.s + "Chaptername TEXT, "
DatabaseUpdate.s + "Description TEXT, "
DatabaseUpdate.s + "Createdon INTEGER, "
DatabaseUpdate.s + "Recordid INTEGER PRIMARY KEY AUTOINCREMENT, "
DatabaseUpdate.s + "UNIQUE (Chaptername))"
If Not DatabaseUpdate(DatabaseHandle.i, DatabaseUpdate.s)
Debug DatabaseError()
EndIf
; Write the linked categories/subcategories table out. Each chapter can have the same categories and subcategories
DatabaseUpdate.s = "CREATE TABLE IF NOT EXISTS ChapterCategories("
DatabaseUpdate.s + "Categoryid INTEGER PRIMARY KEY AUTOINCREMENT, " ; This entry's own id
DatabaseUpdate.s + "Category TEXT, "
DatabaseUpdate.s + "Subcategory TEXT, "
DatabaseUpdate.s + "Recordid INTEGER, "
DatabaseUpdate.s + "FOREIGN KEY(Recordid) REFERENCES Chapters(Recordid) ON DELETE CASCADE, "
DatabaseUpdate.s + "UNIQUE (Category, Subcategory, Recordid) ON CONFLICT FAIL)"
If Not DatabaseUpdate(DatabaseHandle.i, DatabaseUpdate.s)
Debug DatabaseError()
EndIf
Else
MessageRequester("Database open error", "Could not open database file in database mode.", #PB_MessageRequester_Ok)
EndIf
;
Else
;
MessageRequester("Database open error", "Could not open or create raw database file.", #PB_MessageRequester_Ok)
;
EndIf
;------------------------------------------------------------------------------------------------
;
;------------------------------------------------------------------------------------------------
EndProcedure
;==================================================================================================== ============================================================================
; Count the number of records in an SQLite database
;==================================================================================================== ============================================================================
Procedure.s CountRecords(TableField.s, TableName.s)
;------------------------------------------------------------------------------------------------
;
;------------------------------------------------------------------------------------------------
QueryString.s + "Select COUNT(" + TableField.s + ") AS totalrecs FROM " + TableName.s + ""
;------------------------------------------------------------------------------------------------
; Get the count of the records in the database
;------------------------------------------------------------------------------------------------
If DatabaseQuery(DatabaseHandle.i, QueryString.s) <> 0
If FirstDatabaseRow(DatabaseHandle.i)
NumberOfRecords.s = GetDatabaseString(DatabaseHandle.i, 0)
EndIf
FinishDatabaseQuery(DatabaseHandle.i)
Else
NumberOfRecords.s = "0"
EndIf
;------------------------------------------------------------------------------------------------
;
;------------------------------------------------------------------------------------------------
ProcedureReturn NumberOfRecords.s
;------------------------------------------------------------------------------------------------
;
;------------------------------------------------------------------------------------------------
EndProcedure
;==================================================================================================== ==========================================================================
;
;==================================================================================================== ==========================================================================
Procedure InsertDummyData()
;------------------------------------------------------------------------------------------------
;
;------------------------------------------------------------------------------------------------
DatabaseUpdate.s = "INSERT INTO Chapters("
DatabaseUpdate.s + "Chaptername, "
DatabaseUpdate.s + "Description, "
DatabaseUpdate.s + "Createdon) "
DatabaseUpdate.s + "VALUES("
DatabaseUpdate.s + "'Tricia''s Southern Kitchen', "
DatabaseUpdate.s + "'Country cooking at its'' finest', "
DatabaseUpdate.s + "1467291007)"
;------------------------------------------------------------------------------------------------
;
;------------------------------------------------------------------------------------------------
DatabaseUpdate(DatabaseHandle.i, DatabaseUpdate.s)
;------------------------------------------------------------------------------------------------
;
;------------------------------------------------------------------------------------------------
DatabaseUpdate.s = "INSERT INTO Chapters("
DatabaseUpdate.s + "Chaptername, "
DatabaseUpdate.s + "Description, "
DatabaseUpdate.s + "Createdon) "
DatabaseUpdate.s + "VALUES("
DatabaseUpdate.s + "'Rob''s Burgers', "
DatabaseUpdate.s + "'Heart attack food, beware!', "
DatabaseUpdate.s + "1467291009)"
;------------------------------------------------------------------------------------------------
;
;------------------------------------------------------------------------------------------------
DatabaseUpdate(DatabaseHandle.i, DatabaseUpdate.s)
;------------------------------------------------------------------------------------------------
;
;------------------------------------------------------------------------------------------------
DatabaseUpdate(DatabaseHandle.i, "INSERT INTO ChapterCategories (Category, Subcategory, Recordid) VALUES ('Chickens', '', 1)")
DatabaseUpdate(DatabaseHandle.i, "INSERT INTO ChapterCategories (Category, Subcategory, Recordid) VALUES ('Chickens', 'Boiled', 1)")
DatabaseUpdate(DatabaseHandle.i, "INSERT INTO ChapterCategories (Category, Subcategory, Recordid) VALUES ('Chickens', 'Roasted', 1)")
DatabaseUpdate(DatabaseHandle.i, "INSERT INTO ChapterCategories (Category, Subcategory, Recordid) VALUES ('Chickens', 'Grilled', 1)")
DatabaseUpdate(DatabaseHandle.i, "INSERT INTO ChapterCategories (Category, Subcategory, Recordid) VALUES ('Beef', '', 1)")
DatabaseUpdate(DatabaseHandle.i, "INSERT INTO ChapterCategories (Category, Subcategory, Recordid) VALUES ('Pork', '', 1)")
DatabaseUpdate(DatabaseHandle.i, "INSERT INTO ChapterCategories (Category, Subcategory, Recordid) VALUES ('Pork', 'Wild', 1)")
DatabaseUpdate(DatabaseHandle.i, "INSERT INTO ChapterCategories (Category, Subcategory, Recordid) VALUES ('Seafood', '', 1)")
DatabaseUpdate(DatabaseHandle.i, "INSERT INTO ChapterCategories (Category, Subcategory, Recordid) VALUES ('Seafood', 'Lobster', 1)")
DatabaseUpdate(DatabaseHandle.i, "INSERT INTO ChapterCategories (Category, Subcategory, Recordid) VALUES ('Seafood', 'Crayfish', 1)")
DatabaseUpdate(DatabaseHandle.i, "INSERT INTO ChapterCategories (Category, Subcategory, Recordid) VALUES ('Seafood', '', 2)")
DatabaseUpdate(DatabaseHandle.i, "INSERT INTO ChapterCategories (Category, Subcategory, Recordid) VALUES ('Seafood', 'Marinara', 2)")
DatabaseUpdate(DatabaseHandle.i, "INSERT INTO ChapterCategories (Category, Subcategory, Recordid) VALUES ('Onions', '', 2)")
DatabaseUpdate(DatabaseHandle.i, "INSERT INTO ChapterCategories (Category, Subcategory, Recordid) VALUES ('Onions', 'Boiled', 2)")
DatabaseUpdate(DatabaseHandle.i, "INSERT INTO ChapterCategories (Category, Subcategory, Recordid) VALUES ('Onions', 'Caramelised', 2)")
EndProcedure
;==================================================================================================== ==========================================================================
;
;==================================================================================================== ==========================================================================
Procedure GetDummyData()
;------------------------------------------------------------------------------------------------
;
;------------------------------------------------------------------------------------------------
Structure ChapterInfo
Recordid.s
Chaptername.s
EndStructure
;------------------------------------------------------------------------------------------------
;
;------------------------------------------------------------------------------------------------
NewList ChapterRecords.ChapterInfo()
;------------------------------------------------------------------------------------------------
;
;------------------------------------------------------------------------------------------------
DatabaseQuery.s = "SELECT Chaptername, Recordid FROM Chapters ORDER BY Recordid"
;------------------------------------------------------------------------------------------------
;
;------------------------------------------------------------------------------------------------
If DatabaseQuery(DatabaseHandle.i, DatabaseQuery.s)
While NextDatabaseRow(DatabaseHandle.i)
AddElement(ChapterRecords.s())
ChapterRecords()\Chaptername = ReplaceString(GetDatabaseString(DatabaseHandle.i, 0), "''", "'")
ChapterRecords()\Recordid = GetDatabaseString(DatabaseHandle.i, 1)
Wend
FinishDatabaseQuery(DatabaseHandle.i)
EndIf
;------------------------------------------------------------------------------------------------
;
;------------------------------------------------------------------------------------------------
ForEach ChapterRecords.s()
;----------------------------------------------------------------------------------------------
;
;----------------------------------------------------------------------------------------------
Debug ChapterRecords()\Chaptername
;----------------------------------------------------------------------------------------------
;
;----------------------------------------------------------------------------------------------
DatabaseQuery.s = "SELECT * FROM ChapterCategories WHERE Recordid = '" + ChapterRecords()\Recordid + "' "
DatabaseQuery.s + "ORDER BY Recordid, Category, SubCategory"
;----------------------------------------------------------------------------------------------
;
;----------------------------------------------------------------------------------------------
If DatabaseQuery(DatabaseHandle.i, DatabaseQuery.s)
While NextDatabaseRow(DatabaseHandle.i)
Category.s = ReplaceString(GetDatabaseString(DatabaseHandle.i, 1), "''", "'")
SubCategory.s = ReplaceString(GetDatabaseString(DatabaseHandle.i, 2), "''", "'")
If Category.s <> "" And SubCategory.s = ""
Debug " +--" + Category.s
ElseIf Category.s <> "" And SubCategory.s <> ""
Debug " +--" + SubCategory.s
EndIf
Wend
FinishDatabaseQuery(DatabaseHandle.i)
Else
MessageRequester("Error", "Failed to return any categories: " + DatabaseError(), #PB_MessageRequester_Ok)
EndIf
;----------------------------------------------------------------------------------------------
;
;----------------------------------------------------------------------------------------------
Next ; ChapterRecords.s()
;------------------------------------------------------------------------------------------------
;
;------------------------------------------------------------------------------------------------
EndProcedure
;==================================================================================================== ==========================================================================
;
;==================================================================================================== ==========================================================================
OpenMasterRecipebook()
InsertDummyData()
;SetWindowLongPtr_(GadgetID(0), #GWL_STYLE, GetWindowLongPtr_(GadgetID(0), #GWL_STYLE)|#TVS_TRACKSELECT)
GetDummyData()
Spaces added
01.07.2016
RSBasic