i need a function, which get´s a list of all connecting users (SQLBase 11.5.3 6932).
i found any samples, but every source get the same results. (look screenshot) my main problem is, that i don't know,
- how i should use CStructGetxxx and
- how to split the buffer-result (maybe the length are changed?).
My be its a unicode-problem?
There the soucre from Thomas Althammer, i found in the web:
Code: Select all
Function: SQLGetCursorList
Description:
Returns
Number:
Parameters
Number: p_hServer
Receive Number: r_naCursor[*]
Receive Number: r_naProcess[*]
Receive String: r_saDatabase[*]
Receive String: r_saUser[*]
Receive String: r_saClient[*]
Static Variables
Local variables
Boolean: bOk
Number: nCounter
Number: hBuffer
String: sBuffer
Number: nBufferOffset
Number: nBufferLength
String: sEntry
Number: nCursor
Number: nProcess
String: sDatabase
String: sUser
String: sClient
Actions
If p_hServer = 0
Set bOk = FALSE
Else
Set hBuffer = CStructAllocFarMem( 8192 )
If sqlgsi( p_hServer, SQLGCUR | SQLXGSI, hBuffer, 8192, nBufferLength ) = 0
Call SalStrSetBufferLength( sBuffer, nBufferLength )
Call CStructCopyFromFarMem( hBuffer, sBuffer, nBufferLength )
! ignore header size
Set nBufferOffset = nBufferOffset + 4 + 8
! read records one by one
While nBufferOffset < nBufferLength
Call SalStrSetBufferLength( sDatabase, 9 )
Call SalStrSetBufferLength( sUser, 19 )
Call SalStrSetBufferLength( sClient, 13 )
! extract record information
Set nCursor = CStructGetByte( sBuffer, nBufferOffset + 68 )
Set nProcess = CStructGetByte( sBuffer, nBufferOffset + 17 )
Call CStructGetString( sBuffer, nBufferOffset + 40, 9, sDatabase )
Call CStructGetString( sBuffer, nBufferOffset + 21, 19, sUser )
Call CStructGetString( sBuffer, nBufferOffset + 70, 13, sClient )
! add to list
If sDatabase != ''
Set r_naCursor[nCounter] = nCursor
Set r_naProcess[nCounter] = nProcess
Set r_saDatabase[nCounter] = sDatabase
Set r_saUser[nCounter] = sUser
Set r_saClient[nCounter] = sClient
!
Set nCounter = nCounter + 1
!
Set nBufferOffset = nBufferOffset + 104
!
Set bOk = TRUE
Else
Set bOk = FALSE
Call CStructFreeFarMem( hBuffer )
!
If bOk
Return nCounter
Else
Return -1
regards
Thomas