DUPLICIDADE NO APPEND BLANK
Moderador: Moderadores
-
Dudu_XBase
- Membro Master

- Mensagens: 1071
- Registrado em: 25 Ago 2003 16:55
Boa Tarde Senhores.
Já tive problemas com duplicidade.
Vou montar um exemplo de inclusão
Eu possuo um dbf denominado FUNC.DBF
nele contém os seguintes campos:
CODIGO - Caracter - 8
NOME - Caracter - 20
Nele tb possui dos indices.
FUN_COD - Ordenado pelo campo CODIGO
FUN_NOM - Ordenado pelo campo NOME
Quando vou cadastrar um novo funcionário.
O campo Codigo eu incremento +1 e mando ver.
tipo assim ->
// vou para o fim do dbf com o indice por CODIGO
func->(dbgobottom())
// incremento +1 no codigo
cCodigo := strzero(val(func->CODIGO)+1,8)
Mas se tiver mais de um cabra cadastrando ae dana tudo...
eu faço assim...
Existem erros de duplicidade que podem ser ocasionados causa de indices corrompidos tb.
Já tive problemas com duplicidade.
Vou montar um exemplo de inclusão
Eu possuo um dbf denominado FUNC.DBF
nele contém os seguintes campos:
CODIGO - Caracter - 8
NOME - Caracter - 20
Nele tb possui dos indices.
FUN_COD - Ordenado pelo campo CODIGO
FUN_NOM - Ordenado pelo campo NOME
Quando vou cadastrar um novo funcionário.
O campo Codigo eu incremento +1 e mando ver.
tipo assim ->
// vou para o fim do dbf com o indice por CODIGO
func->(dbgobottom())
// incremento +1 no codigo
cCodigo := strzero(val(func->CODIGO)+1,8)
Mas se tiver mais de um cabra cadastrando ae dana tudo...
eu faço assim...
Código: Selecionar todos
lOk := .t.
while lOk
// Incluo o Código
dbappend()
replace func->CODIGO with cCodigo
// Pego a posição do registro
nrecno := recno()
// Verifico se tem duplicidade
if dbseek(cCodigo) .and. func->CODIGO =cCodigo .and. recno() != nRecno
goto nRecno
while !rlock()
enddo
dbdelete()
dbcommit()
dbunlock()
func->(dbgobottom())
// Como já existe um cara cadastrado eu incremento +1
cCodigo := strzero(val(func->CODIGO)+1,8)
else
// Tudo blz
goto nRecno
lOk := .f.
endif
enddo
replace NOME with cNome
dbcommit()
dbunlock()
Existem erros de duplicidade que podem ser ocasionados causa de indices corrompidos tb.
________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle
Valeu DUDU, mas nesse caso em especial, os dados que são digitados na tela eu salvo e pronto, ou seja o usuário carrega uma seqüência de 1 a digamos 6 títulos no contas à pagar, gerando os registros físicos de 1 a 6 (por exemplo) em algum momento o Clipper (creio eu) appenda novamente na mesmo seqüência que foi digitado gerando assim a duplicidade, nesse caso gera + 6 "NOVOS REGISTROS"
-
Dudu_XBase
- Membro Master

- Mensagens: 1071
- Registrado em: 25 Ago 2003 16:55
Vc ja tentou debugar o sistema durante essa inclusão ??
________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle
