Código: Selecionar todos
IF lAdicionar
cCodigo:=StrZero(PsqControle( DBF() ),2)
DbAppend()
C0001->Cod := cCodigo
ELSE
C0001->(DbRLock())
ENDIF
fNatureza.oEdit2.Save
C0001->(DbCommit())
C0001->(DbUnlock())
ENDIF
FUNCTION PsqControle( cDataBase )
// Inicializa controle com um numero diferente do total de registros
//Exemplo:
//CLIENTES->IDCLIENTE := PsqControle( DBF() )
//APPEND BLANK
//...
//COMMIT
//...
DEFAULT cDirSys TO ""
nControle := IIF( RecCount()=0, 1, RecCount()+(RecCount()/2) )
cDirSys:=""
// Guarda a área atual do .DBf a ser controlado
OldArea := Select()
IF !File(cDirSys+"CONTROLE")
// Cria a estrutura do controlador caso ainda não exista
aStru_Table := { ;
{ "DATABASE" , "C",12, 0 } , ; // Guarda o nome do DBF/ALIAS
{ "CONTADOR" , "N", 9, 0 } } // Armazena o contador
DBCREATE( cDirSys+"CONTROLE", aStru_Table,"DBFCDX" ) //SQLRDD
ENDIF
IF Select("CONTROLE") == 0 // Se ainda não estiver aberto, abre...
USE &cDirSys.CONTROLE NEW VIA "DBFCDX"
ELSE
DbSelectar("CONTROLE") // Se ja estiver aberto SELECIONA
ENDIF
// Verifica a existencia da chave( que pode ser também uma palavra )
LOCATE FOR UPPER(CONTROLE->DataBase) = UPPER(cDataBase)
IF Found()
// Encontrando incrementa o contador
nControle := CONTROLE->Contador + 1
RLOCK() // Usado no caso de rede
CONTROLE->Contador := nControle
CONTROLE->(DbCommit())
CONTROLE->(DbUnlock())
ELSE
// Caso a chave ainda não exista será criada
DbAppend()
CONTROLE->DataBase := cDataBase
CONTROLE->Contador := nControle
CONTROLE->(DbCommit())
ENDIF
// Volta a área antiga
SELECT (OldArea)
// Retorna o numero de controle
RETURN nControle


