Single stand-alone Full Code
The following is our completed Module:
XIncludeFile "../Utils/ThemedMessage.pbi"
XIncludeFile "DB.pbi"
DeclareModule FIGHTERSIZE
Structure FighterSize
ID.i ; Table Primary Key
Name.s ; FighterSize Name
UnitDescription.s ; Short description
UnitTypeID.i ; Foreign Key to Type UnitType
VisibleWithTechnologyLevelID.i ; Foreign Key to Table TechnologyLevel
IsHidden.i ; Boolean field
GameImageID.i ; Foreign Key to Table GameImage
Space.i ; the volume of space inside the ship
ProdCost.i ; Cost to Produce
ProdTime.i ; Time it takes to produce in Game turns
Attack.i ; Fighter's attack Value
Defense.i ; Fighter's Definse Value
State.i
EndStructure
Declare LoadComboName(cbData.i)
Declare LoadListIcon(liData.i)
Declare.i Init(*Class.FighterSize)
Declare.i Find(FighterSizeID.i, *Class.FighterSize)
Declare.i Save(*Class.FighterSize)
Declare.i Delete(*Class.FighterSize)
Declare.i Validate(*Class.FighterSize)
Declare.i DeleteValidate(*Class.FighterSize)
EndDeclareModule
Module FIGHTERSIZE
EnableExplicit
Declare Dispose(*Class.FighterSize)
Declare Init(*Class.FighterSize)
Procedure Init(*Class.FighterSize)
With *Class
Dispose(*Class)
\ID = 0
\Name = ""
\UnitDescription = ""
\UnitTypeID = 0
\VisibleWithTechnologyLevelID = 0
\IsHidden = #False
\GameImageID = 0
\Space = 0
\ProdCost = 0
\ProdTime = 0
\Attack = 0
\Defense = 0
\State = DB::#New
EndWith
EndProcedure
Procedure Dispose(*Class.FighterSize)
ClearStructure(*Class, FighterSize)
EndProcedure
Procedure LoadComboName(cbData.i)
Protected DBID, Sql$
ComboBoxEx::ClearItems(cbData)
DBID = DB::Open(DBTYPE::#Sqlite)
Sql$ = " Select "
Sql$ = Sql$ + " ID, "
Sql$ = Sql$ + " Name "
Sql$ = Sql$ + " FROM "
Sql$ = Sql$ + " FighterSize "
Sql$ = Sql$ + " ORDER BY "
Sql$ = Sql$ + " Name "
If DB::Query(DBID, Sql$)
While NextDatabaseRow(DBID)
ComboBoxEx::AddItem(cbData, -1, GetDatabaseString(DBID,DatabaseColumnIndex(DBID,"Name")))
ComboBoxEx::SetItemData(cbData, ComboBoxEx::CountItems(cbData)-1, GetDatabaseLong(DBID, DatabaseColumnIndex(DBID,"ID")))
Wend
EndIf
DB::Close(DBID)
EndProcedure
Procedure LoadListViewName(lvData.i)
Protected DBID, Sql$
ClearGadgeItems(lvData)
DBID = DB::Open(DBTYPE::#Sqlite)
Sql$ = " Select "
Sql$ = Sql$ + " ID, "
Sql$ = Sql$ + " Name "
Sql$ = Sql$ + " FROM "
Sql$ = Sql$ + " FighterSize "
Sql$ = Sql$ + " ORDER BY "
Sql$ = Sql$ + " Name "
If DB::Query(DBID, Sql$)
While NextDatabaseRow(DBID)
AddGadgetItem(lvData, -1, GetDatabaseString(DBID,DatabaseColumnIndex(DBID,"Name")))
SetGadgetItemData(lvData, ComboBoxEx::CountItems(lvData)-1, GetDatabaseLong(DBID, DatabaseColumnIndex(DBID,"ID")))
Wend
EndIf
DB::Close(DBID)
EndProcedure
Procedure LoadListIcon(liData.i)
Protected DBID, Sql$
Protected Result
DBID = DB::Open(DBTYPE::#Sqlite)
ListEx::DisableReDraw(liData, #True)
ListEx::ClearItems(liData)
ListEx::RemoveColumn(liData, 0) ;Name
;===== Build Column Titles =====-
ListEx::AddColumn(liData, 0, "Name", 60)
ListEx::SetColumnAttribute(liData, 0, ListEx::#Align, ListEx::#Left)
Sql$ = " Select "
Sql$ = Sql$ + "Name, "
Sql$ = Sql$ + "ID "
Sql$ = Sql$ + "FROM "
Sql$ = Sql$ + "FighterSize "
Sql$ = Sql$ + "ORDER BY "
Sql$ = Sql$ + "Name "
;===== Populate Data Into Column =====
Result = DB::Query(DBID, Sql$)
If Result > 0
While NextDatabaseRow(DBID)
ListEx::AddItem(liData, -1,GetDatabaseString(DBID, DatabaseColumnIndex(DBID,"Name")) + #LF$ )
ListEx::SetItemData(liData, ListEx::CountItems(liData) -1 , GetDatabaseLong(DBID, DatabaseColumnIndex(DBID,"ID")) )
Wend
EndIf
DB::Close(DBID)
ListEx::DisableReDraw(liData, #False)
EndProcedure
Procedure.i Find(FighterSizeID.i, *Class.FighterSize)
Protected Sql$, DBID, Result, PictureSize, *picture, BLOBSize
Protected PassFail = #False
Init(*Class)
DBID = DB::Open(DBTYPE::#Sqlite)
SetDatabaseLong(DBID, 0, FighterSizeID)
Sql$ = "SELECT "
Sql$ = Sql$ + "ID, "
Sql$ = Sql$ + "Name, "
Sql$ = Sql$ + "UnitDescription, "
Sql$ = Sql$ + "UnitTypeID, "
Sql$ = Sql$ + "VisibleWithTechnologyLevelID, "
Sql$ = Sql$ + "IsHidden, "
Sql$ = Sql$ + "GameImageID, "
Sql$ = Sql$ + "Space, "
Sql$ = Sql$ + "ProdCost, "
Sql$ = Sql$ + "ProdTime, "
Sql$ = Sql$ + "Attack, "
Sql$ = Sql$ + "Defense"
Sql$ = Sql$ + " FROM "
Sql$ = Sql$ + "FighterSize "
Sql$ = Sql$ + " WHERE "
Sql$ = Sql$ + "ID = ? "
PassFail = DB::Query(DBID, Sql$)
If PassFail
While NextDatabaseRow(DBID)
With *Class
\ID = GetDatabaseLong(DBID, DatabaseColumnIndex(DBID,"ID"))
\Name = GetDatabaseString(DBID, DatabaseColumnIndex(DBID,"Name"))
\UnitDescription = GetDatabaseString(DBID, DatabaseColumnIndex(DBID,"UnitDescription"))
\UnitTypeID = GetDatabaseLong(DBID, DatabaseColumnIndex(DBID,"UnitTypeID"))
\VisibleWithTechnologyLevelID = GetDatabaseLong(DBID, DatabaseColumnIndex(DBID,"VisibleWithTechnologyLevelID"))
\IsHidden = GetDatabaseLong(DBID, DatabaseColumnIndex(DBID,"IsHidden"))
\GameImageID = GetDatabaseLong(DBID, DatabaseColumnIndex(DBID,"GameImageID"))
\Space = GetDatabaseLong(DBID, DatabaseColumnIndex(DBID,"Space"))
\ProdCost = GetDatabaseLong(DBID, DatabaseColumnIndex(DBID,"ProdCost"))
\ProdTime = GetDatabaseLong(DBID, DatabaseColumnIndex(DBID,"ProdTime"))
\Attack = GetDatabaseLong(DBID, DatabaseColumnIndex(DBID,"Attack"))
\Defense = GetDatabaseLong(DBID, DatabaseColumnIndex(DBID,"Defense"))
\State = DB::#Clean
EndWith
Wend
EndIf
DB::Close(DBID)
ProcedureReturn PassFail
EndProcedure
Procedure.i Save(*Class.FighterSize)
Protected Sql$, Result, DBID, Length, *MemoryGraphicID
Protected PassFail = #False
If Validate(*Class) = #False
ProcedureReturn #False
Else
DBID = DB::Open()
With *Class
SetDatabaseString(DBID, 0, \Name)
SetDatabaseString(DBID, 1, \UnitDescription)
SetDatabaseLong(DBID, 2, \UnitTypeID)
SetDatabaseLong(DBID, 3, \VisibleWithTechnologyLevelID)
SetDatabaseLong(DBID, 4, \IsHidden)
SetDatabaseLong(DBID, 5, \GameImageID)
SetDatabaseLong(DBID, 6, \Space)
SetDatabaseLong(DBID, 7, \ProdCost)
SetDatabaseLong(DBID, 8, \ProdTime)
SetDatabaseLong(DBID, 9, \Attack)
SetDatabaseLong(DBID, 10, \Defense)
EndWith
If *Class\State = DB::#New
Sql$ = "INSERT "
Sql$ = Sql$ + " into "
Sql$ = Sql$ + "FighterSize"
Sql$ = Sql$ + " ("
Sql$ = Sql$ + " Name, "
Sql$ = Sql$ + " UnitDescription, "
Sql$ = Sql$ + " UnitTypeID, "
Sql$ = Sql$ + " VisibleWithTechnologyLevelID, "
Sql$ = Sql$ + " IsHidden, "
Sql$ = Sql$ + " GameImageID, "
Sql$ = Sql$ + " Space, "
Sql$ = Sql$ + " ProdCost, "
Sql$ = Sql$ + " ProdTime, "
Sql$ = Sql$ + " Attack, "
Sql$ = Sql$ + " Defense"
Sql$ = Sql$ + " )"
Sql$ = Sql$ + " VALUES "
Sql$ = Sql$ + " (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )"
PassFail = DB::Update(DBID, Sql$)
If PassFail
*Class\State = DB::#Clean
*Class\ID = DB::getLastID(DBID, "FighterSize")
EndIf
DB::Close(DBID)
Else ;>>>>>> UPDATE <<<<<<
SetDatabaseLong(DBID, 11, *Class\ID)
Sql$ = "UPDATE "
Sql$ = Sql$ + "FighterSize "
Sql$ = Sql$ + "SET "
Sql$ = Sql$ + "Name = ? , "
Sql$ = Sql$ + "UnitDescription = ? , "
Sql$ = Sql$ + "UnitTypeID = ? , "
Sql$ = Sql$ + "VisibleWithTechnologyLevelID = ? , "
Sql$ = Sql$ + "IsHidden = ? , "
Sql$ = Sql$ + "GameImageID = ? , "
Sql$ = Sql$ + "Space = ? , "
Sql$ = Sql$ + "ProdCost = ? , "
Sql$ = Sql$ + "ProdTime = ? , "
Sql$ = Sql$ + "Attack = ? , "
Sql$ = Sql$ + "Defense = ? "
Sql$ = Sql$ + " WHERE "
Sql$ = Sql$ + "ID = ? "
PassFail = DB::Update(DBID, Sql$)
If PassFail
*Class\State = DB::#Clean
EndIf
DB::Close(DBID)
EndIf
EndIf
ProcedureReturn PassFail
EndProcedure
Procedure.i Delete(*Class.FighterSize)
Protected Result, DBID
Protected Sql$
If DeleteValidate(*Class) = #False
ProcedureReturn #False
Else
DBID = DB::Open(DBTYPE::#Sqlite)
SetDatabaseLong(DBID, 0, *Class\ID)
Sql$ = " DELETE "
Sql$ = Sql$ + "FROM "
Sql$ = Sql$ + "FighterSize "
Sql$ = Sql$ + "WHERE "
Sql$ = Sql$ + "ID = ? "
Result = DB::Update(DBID, Sql$)
DB::Close(DBID)
ProcedureReturn Result
EndIf
EndProcedure
Procedure.i Validate(*Class.FighterSize)
Protected DBID, Sql$, PassFail.i = #True
Protected ErrMsg.s = ""
If Len(*Class\Name) < 1
PassFail = #False
ErrMsg = ErrMsg + "Name cannot be less than 1 characters in length!" + #LF$
EndIf
If Len(*Class\Name) > 50
PassFail = #False
ErrMsg = ErrMsg + "Name cannot exceed 50 characters!" + #LF$
EndIf
;Unique Check FIELD ==> FighterSize
If *Class\State = DB::#New
DBID = DB::Open(DBTYPE::#Sqlite)
SetDatabaseString(DBID, 0, *Class\Name)
Sql$ = " Select "
Sql$ = Sql$ + " * "
Sql$ = Sql$ + " FROM "
Sql$ = Sql$ + "FighterSize "
Sql$ = Sql$ + " WHERE "
Sql$ = Sql$ + "Name = ? "
If DatabaseQuery(DBID, Sql$)
While NextDatabaseRow(DBID)
PassFail = #False
ErrMsg = ErrMsg + "Name must be unique!" + #LF$
Wend
EndIf
DB::Close(DBID)
Else
DBID = DB::Open(DBTYPE::#Sqlite)
SetDatabaseString(DBID, 0, *Class\Name)
SetDatabaseLong(DBID, 1, *Class\ID)
Sql$ = "Select "
Sql$ = Sql$ + " * "
Sql$ = Sql$ + " FROM "
Sql$ = Sql$ + "FighterSize "
Sql$ = Sql$ + " WHERE "
Sql$ = Sql$ + "Name = ? "
Sql$ = Sql$ + " And "
Sql$ = Sql$ + "ID <> ? "
If DatabaseQuery(DBID, Sql$)
While NextDatabaseRow(DBID)
PassFail = #False
ErrMsg = ErrMsg + "Name must be unique!" + #LF$
Wend
EndIf
DB::Close(DBID)
EndIf
If PassFail = #False
THEMEDMESSAGE::MessageBox("Validation Error",ErrMsg)
EndIf
ProcedureReturn PassFail
EndProcedure
Procedure.i DeleteValidate(*Class.FighterSize)
Protected DBID, Sql$, Cnt, PassFail, ErrMsg.s
PassFail.i = #True
ErrMsg.s = ""
DBID = DB::Open(DBTYPE::#Sqlite)
SetDatabaseLong(DBID, 0, *Class\ID)
Sql$ = "SELECT
Sql$ = Sql$ + "Name"
Sql$ = Sql$ + "FROM "
Sql$ = Sql$ + "Carrier "
Sql$ = Sql$ + "WHERE "
Sql$ = Sql$ + "FighterSizeID = ? "
If DB::Query(DBID, Sql$)
While NextDatabaseRow(DBID)
Cnt.c = GetDatabaseLong(DBID, 0)
If Cnt > 0
PassFail= #False
ErrMsg= "Fighter Size in use in Carrier: "+GetDatabaseString(DBID, DatabaseColumnIndex(DBID,"Name"))
EndIf
Wend
EndIf
DB::Close(DBID)
If PassFail= #False
THEMEDMESSAGE::MessageBox("Error", ErrMsg)
EndIf
ProcedureReturn PassFail
EndProcedure
EndModule
Comments
Post a Comment