I must delete the User and all permission of this user
The user is deleted as you can see here
USERS
![Image](https://i.postimg.cc/rwLk4ZSP/u.png)
The permissions are not deleted ( sometimes two or three records are deleted)
![Image](https://i.postimg.cc/ry1XkN6G/p.png)
I not understood why
the function to delete is this
- Code: Select all Expand view
Static Function UtBorra(oUtenti,oPermessi,oGrid2,oGrid3,oBtnCambia)
local cClave:= alltrim(oUtenti:Clave)
IF lABC .AND. !oUtenti:EoF()
IF MsgYesNo("Cancellare i permessi dell'utente "+Alltrim(oUtenti:Nombre)+"?","Confermare!")
oPermessi:Seek(cClave)
DO WHILE !oPermessi:EoF()
IF alltrim(oPermessi:Usuario)==cClave
oPermessi:Delete()
ENDIF
oPermessi:Skip()
ENDDO
oUtenti:Delete()
oGrid2:GoUp()
oGrid2:Refresh()
oGrid2:SetFocus()
Rinfresca(nMod,oUtenti,oPermessi,oGrid2,oGrid3,oBtnCambia)
ENDIF
ELSE
ENDIF
oGrid2:SetFocus()
RETURN (NIL)
the key and the name of the user is always 8 characters but I put an alltrim () because it can be even less than 8 characters like for example "TEST"
on the oPermessi there is a SetScope
static cKey
cKey:=oUtenti:Clave
oPermessi:setscope(cKey)
I did not understand why sometimes some records are cacenalled and other times none and other times only one,
Another test made this morning
![Image](https://i.postimg.cc/Y9DQhys4/jh.png)
yet putting an xbrowser after the seek makes me see all the modules of that user but then does not delete them all
Any solution ?
a test sample to try the problem
- Code: Select all Expand view
#include "FiveWin.ch"
static cKey,lABC
request dbfcdx
request dbffpt
Function test()
local ctest:="Test"
RddSetDefault( "DBFCDX" )
oUtenti:= TUtenti():New()
oModuli:= TModuli():New()
oPermessi:=TPermessi():New()
lABC :=.t.
xbrowser oUtenti
xbrowser oPermessi
oPermessi:SetOrder(2)
cKey:=oUtenti:Clave
oPermessi:setscope(cKey)
xbrowser oPermessi
UtBorra(oUtenti,oPermessi)
xbrowser oPermessi
return nil
Static Function UtBorra(oUtenti,oPermessi)
local cClave:= alltrim(oUtenti:Clave) // può essere meno di 8 caratteri data errore
IF lABC .AND. !oUtenti:EoF()
IF MsgYesNo("Cancellare i permessi dell'utente "+Alltrim(oUtenti:Nombre)+"?","Confermare!")
oPermessi:Seek(cClave)
xbrowser oPermessi
DO WHILE !oPermessi:EoF()
IF alltrim(oPermessi:Usuario)==cClave
oPermessi:Delete()
ENDIF
oPermessi:Skip()
ENDDO
oUtenti:Delete()
*oGrid2:GoUp()
*oGrid2:Refresh()
*oGrid2:SetFocus()
*Rinfresca(nMod,oUtenti,oPermessi,oGrid2,oGrid3,oBtnCambia)
ENDIF
ELSE
ENDIF
* oGrid2:SetFocus()
RETURN (NIL)
CLASS TXData from TDataBase
DATA cExePath init cFilePath(GetModuleFileName( GetInstance() ))
ENDCLASS
CLASS TUtenti from TXData
METHOD New()
ENDCLASS
METHOD New( lShared ) CLASS TUtenti
Default lShared := .t.
::super:Open(,::cExePath + "Utenti" ,, lShared)
if ::use()
::setOrder(1)
::gotop()
endif
RETURN Self
//----------------------------------------------------------------------moduli
CLASS TModuli from TXData
METHOD New()
ENDCLASS
METHOD New( lShared ) CLASS TModuli
Default lShared := .t.
::super:Open(,::cExePath + "Moduli" ,, lShared)
if ::use()
::setOrder(1)
::gotop()
endif
RETURN Self
//----------------------------------------------------------------------Permessi
CLASS TPermessi from TXData
METHOD New()
ENDCLASS
METHOD New( lShared ) CLASS TPermessi
Default lShared := .t.
::super:Open(,::cExePath + "Permessi" ,, lShared)
if ::use()
::setOrder(1)
::gotop()
endif
RETURN Self
write to me at silvio[dot]falconi[at]gmail[dot]com if you need the dbfs to test it