estou testando, para ver qual cursor uso para atualizar, e ao pegar o próximo código com o select max, percebi que ao abrir o rs desta forma:
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
sql = "SELECT Max(codigo) AS codigo FROM usuarios"
rs.Open sql, Cnn, adOpenForwardOnly, adLockReadOnly
txtcodigo = (rs!codigo + 1)
simulando um ambiente em rede, clicando enter ao mesmo tempo em duas maquinas, dava erro, pois o numero do código vinha repetido, mas ao abir desta outra forma:
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
sql = "SELECT Max(codigo) AS codigo FROM usuarios"
rs.Open sql, Cnn, adOpenKeyset, adLockOptimistic
txtcodigo = (rs!codigo + 1)
não deu mais problemas, então gostaria de saber se esta diferença se deve, ao tipo do cursor, ou ao bloqueio ? , e ainda, abaixo a rotina toda da atualização, que verifica, se é novo registro, ou alteração, gostaria de opinião dos colegas a respeito.
If Trim(txtcodigo.Text) = Empty Then
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
sql = "SELECT Max(codigo) AS codigo FROM usuarios"
rs.Open sql, Cnn, adOpenKeyset, adLockOptimistic
txtcodigo = (rs!codigo + 1)
sql = "insert into usuarios (codigo,nome,nomecompleto,senha,cor,tipo) values (" & txtcodigo.Text & ",'" & txtuser.Text & "','" & txtnome.Text & "','" & txtsenha.Text & "','" & cor & "','" & wstipo & "')"
rs.Close
Set rs = Nothing
Else
sqlcmd = " update usuarios set codigo =" & txtcodigo.Text & ",nome = '" & txtuser.Text & "',nomecompleto = '" & txtnome.Text & "',senha = '" & txtsenha.Text & "',cor = '" & cor & "'"
sqlcmd = sqlcmd & " where [codigo] =" & txtcodigo.Text & ""
End If
Cnn.Execute (sqlcmd)