Creo que tu problema esta por aqui:
Código Delphi
[-] iClave := FieldByName('clave').AsInteger;
lstUsuarios.Items.Add(edLogin.Text)
end
else
begin
Edit;
FieldByName('Codigo').Value := iClave;
En el insert no asignas nigun valor a 'Codigo', yo para las claves primarias casi siempre uso un trigger de autoincremento
de lo contrario La línea:
Código Delphi
[-]FieldByName('Codigo').Value := iClave;
Debe estar tambien en el insert e iClave debe tener un valor unico