Carlos,
Eu uso a primeira opção, e tive problemas em situações isoladas, quando ocorre queda de energia e/ou travamento das maquinas.
Para garantir um código único, eu passei a fazer o seguinte:
Begin Transaction
Do While .T.
m.Codigo = GerarCodigo("clientes")
Select Codigo From Clientes Where Codigo = m.Codigo Into Array Repetido
If _Tally=0
Exit
EndIf
EndDo
m.Nome = ThisForm.Nome.Value
Insert Into Clientes (Codigo, Nome) Values (m.Codigo, m.NOme)
End Transaction
A idéia é mais ou menos essa aí... Sempre teste antes de gravar e se estiver repetido, chame novamente a rotina para gerar o código.
[]s
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Rodolfo Duarte