Mel:
The native createobject() will scope its resultant object to the datasession from which the call was made. Codemine's CreateGlobalObject() is scoped to the default datasession (1). Hence the difference in the behaviour.
For some thoughts on a resolve, you could add a aSQLComboResult array property, a cSQLWhere property and a SQLExecute method to your CDE. Your lookup data is nicely encapsulated in the AppStartArrays CDE. When you want an array of values for your combo, set the AppStartArrays.cSQLWhere value with the where string to match your query requirement, execute the AppStartArrays.SQLExecute method which will use the AppStartArrays.cSQLWhere property is its query argument and its result array can be contained in AppStartArrays.aSQLComboResult .
From your form (or wherever) :-
local oArry
m.oArry = CreateGlobalObject("AppStartArrays")
m.oArry.cSQLWhere = 'some value string'
m.oArry.SQLExecute()
Acopy(m.oArry.aSQLComboResult, aLocalComboArray)
Another thought is that you could also store your SQL string(s) in another table in your AppStartArrays CDE. Then you would have data driven queries, and all you would need to do when your call m.oArry.SQLExecute() is pass is an index/key of the query to run.
HTH
-=Gary