Sorry to bump an Old thread but having to do this again and remembered the query builder code.
Knocked this up to kist tables and defined queries in database and fields in selected table or query should be able to list field types as well only SQlite can it be extended to use other DBs as well?
Code: Select all
UseSQLiteDatabase()
Global Window_0
Global btnOpenDB, btnNewDB, strCurrentDB, txtCurrentdB, txtTables, lstTables, txtFields, lstFields, btnDone
Global QueryDBName.s,QueryDB.l
Procedure.s SelectDB()
File$ = OpenFileRequester("Please choose database", "C:\", "Database (*.db)|*.db", 0)
If File$
MessageRequester("Information", "You have selected following file:" + Chr(10) + File$, 0)
ProcedureReturn File$
Else
MessageRequester("Information", "The requester was canceled.", 0)
ProcedureReturn ""
EndIf
EndProcedure
Procedure.l Open_Database(DBName.s)
; Procedure to open the requested database and return a handle to it.
; User message provided in case of failure to open.
Define DBHnd.l
;Open Main Database
QueryDB = OpenDatabase(#PB_Any, DBName.s, #Empty$, #Empty$)
If QueryDB = #False
MessageRequester("Database Error","Failed to open database!")
SetGadgetText(strCurrentDB,"")
ProcedureReturn #False
Else
SetGadgetText(strCurrentDB,DBName)
ProcedureReturn QueryDB
EndIf
EndProcedure
Procedure.l ShowTables()
; Fills the Tables Listbox with all the available tables in the database.
Define ObjType.s ; is the type of each entry on the master table.
ClearGadgetItems(lstTables)
DatabaseQuery(QueryDB, "SELECT * FROM sqlite_master;")
FirstDatabaseRow(QueryDB)
ObjType = GetDatabaseString(QueryDB, DatabaseColumnIndex(QueryDB, "type"))
If ObjType = "table" Or ObjType = "view"
AddGadgetItem(lstTables, -1, GetDatabaseString(QueryDB, DatabaseColumnIndex(QueryDB, "tbl_name")))
EndIf
While NextDatabaseRow(QueryDB)
ObjType = GetDatabaseString(QueryDB, DatabaseColumnIndex(QueryDB, "type"))
If ObjType = "table" Or ObjType = "view"
AddGadgetItem(lstTables, -1, GetDatabaseString(QueryDB, DatabaseColumnIndex(QueryDB, "tbl_name")))
EndIf
Wend
FinishDatabaseQuery(QueryDB) ;free the query
ProcedureReturn #True
EndProcedure
Procedure ShowFields(TableName.s)
ClearGadgetItems(lstFields)
Define iloop.i = 0
Define txt.s = ""
DatabaseQuery(QueryDB, "SELECT * FROM " + TableName + ";")
FirstDatabaseRow(QueryDB)
For iloop = 0 To DatabaseColumns(QueryDB) -1
txt = DatabaseColumnName(QueryDB, iloop)
AddGadgetItem(lstFields, -1, txt)
Next iloop
FinishDatabaseQuery(QueryDB) ;free the query
ProcedureReturn #True
EndProcedure
Window_0 = OpenWindow(#PB_Any, 0, 0, 410, 380, "", #PB_Window_SystemMenu)
btnOpenDB = ButtonGadget(#PB_Any, 10, 10, 70, 20, "Open DB")
btnNewDB = ButtonGadget(#PB_Any, 90, 10, 70, 20, "New DB")
strCurrentDB = StringGadget(#PB_Any, 10, 60, 390, 20, "")
txtCurrentdB = TextGadget(#PB_Any, 10, 40, 120, 20, "Current DB")
txtTables = TextGadget(#PB_Any, 10, 90, 80, 20, "Tables")
lstTables = ListViewGadget(#PB_Any, 10, 110, 190, 220)
txtFields = TextGadget(#PB_Any, 210, 90, 80, 20, "Fields")
lstFields = ListViewGadget(#PB_Any, 210, 110, 190, 220)
btnDone = ButtonGadget(#PB_Any, 310, 340, 90, 30, "Done")
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_CloseWindow
End
Case #PB_Event_Menu
Select EventMenu()
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case btnOpenDB
QueryDBName = SelectDB()
If QueryDBName > ""
Open_Database(QueryDBName)
ShowTables()
ClearGadgetItems(lstFields)
Else
ClearGadgetItems(lstTables)
ClearGadgetItems(lstFields)
EndIf
Case btnDone
End
Case lstTables
ShowFields(GetGadgetItemText(lstTables, GetGadgetState(lstTables)))
EndSelect
EndSelect
ForEver