Public Type FIELD_DETAIL
fieldLen As Long
flags As Long
End Type
Public Const TOTAL_FIELDS = 2
Sub SetSkillsList()
' reads all skill descriptions and populates the skill list
On Error Resume Next
Dim iRet As Integer
Dim i As Integer
Dim sBuff As String
Dim sTemp As String
Dim iPos As Long
Dim iLovalPos As Long
Dim fldData(TOTAL_FIELDS) As FIELD_DETAIL
' remove any previous query results
iRet = LceDeleteSelect(iSession, "SKLTAB")
' Request select
' Set Select to IMMEDIATE MODE is recommended to increase speed
iRet = LceSetSelectOptions(iSession, "*RECEIVEIMMED")
iRet = LceRequestSelect(iSession, "SKILCODE,SKILDESC", "SKLTAB", _
"", False)
' Clear previous selection
sBuff = String(FIELD_DATA_SIZE, Chr(0))
lstSkills.Clear
ReDim SkillKey(0)
i = 0 ' reset counter
'Read all records selected
While LceReceiveNextX(iSession, sBuff, FIELD_DATA_SIZE, fldData(0), TOTAL_FIELDS) = LceTrue
ReDim Preserve SkillKey(i + 1) ' resize array key
iPos = 1
If (fldData(i).flags = 1) Then
' Display error as key field should not be Null
Else
sTemp = Trim(Mid(sBuff, iPos, fldData(0).fieldLen))
iLovalPos = InStr(1, sTemp, Chr(0), vbTextCompare)
If iLovalPos > 0 Then
sTemp = Trim(Left(sTemp, iLovalPos - 1))
End If
SkillKey(i) = sTemp
iPos = iPos + fldData(0).fieldLen
If (fldData(i).flags = 1) Then
' Value is SQLNULL
sTemp = "No description provided"
Else
sTemp = Trim(Mid(sBuff, iPos, fldData(1).fieldLen))
iLovalPos = InStr(1, sTemp, Chr(0), vbTextCompare)
If iLovalPos > 0 Then
sTemp = Trim(Left(sTemp, iLovalPos - 1))
End If
End If
lstSkills.AddItem sTemp
End If
i = i + 1 ' increment index
Wend
' select first record
If lstSkills.ListCount > 0 Then lstSkills.ListIndex = 0
End Sub