RECORDSET, PEGAR CAMPO DO ERRO
Olá!
Estou usando o codigo abaixo para modificar um registro:
1 - selecionar uma linha do recordset
sql = sql & "SELECT * FROM [Products] WHERE [ProductID] = " & ProductID
Set rs = New ADODB.Recordset
With rs
.CursorLocation = adUseServer
.CursorType = adOpenStatic
.LockType = adLockPessimistic
Set .ActiveConnection = pConnection
.Open sql
End With
2 - proceder com a modificaçao.
With rsEditor
![ProductName] = txtProductName
![UnitPrice] = txtUnitPrice
![Modificado] = txtModificado
.Update
.Close
End With
Até aà tudo bem. O problema é quando acontece um erro: na linha da atualizaçao (.Update) recebo uma mensagem padrão. So que eu quero detectar o erro na linha onde ele ocorreu de fato, ou seja, na linha em que passo o valor para o campo; assim eu poderia tratar o erro antes de chegar em .Update.
Alguém pode me ajudar?
Obrigado.
Estou usando o codigo abaixo para modificar um registro:
1 - selecionar uma linha do recordset
sql = sql & "SELECT * FROM [Products] WHERE [ProductID] = " & ProductID
Set rs = New ADODB.Recordset
With rs
.CursorLocation = adUseServer
.CursorType = adOpenStatic
.LockType = adLockPessimistic
Set .ActiveConnection = pConnection
.Open sql
End With
2 - proceder com a modificaçao.
With rsEditor
![ProductName] = txtProductName
![UnitPrice] = txtUnitPrice
![Modificado] = txtModificado
.Update
.Close
End With
Até aà tudo bem. O problema é quando acontece um erro: na linha da atualizaçao (.Update) recebo uma mensagem padrão. So que eu quero detectar o erro na linha onde ele ocorreu de fato, ou seja, na linha em que passo o valor para o campo; assim eu poderia tratar o erro antes de chegar em .Update.
Alguém pode me ajudar?
Obrigado.
bem...
o erro está exatamente no update
tente usar cursortype e locktype diferentes...
AdLockOptimistic
AdLockDynamic
o erro está exatamente no update
tente usar cursortype e locktype diferentes...
AdLockOptimistic
AdLockDynamic
Não, o problema está no primeiro campo (!ProductName = txtProductName). O campo está configurado para não aceitar valor nullo (não pode ficar vazio). Porem, eu quero pegar o erro justamente na linha onde passo o valor para esse campo.
não da para colocar uma rotina antes de salvar?
if trim(txtProductName.text) = "" then
msgbox "campo produto é de preenchimento obrigatorio"
exit sub
end if
if trim(txtProductName.text) = "" then
msgbox "campo produto é de preenchimento obrigatorio"
exit sub
end if
bem... posso estar falando besteira... mas tente:
rsEditor("ProductName") = txtProductName
rsEditor("UnitPrice") = txtUnitPrice
rsEditor("Modificado") = txtModificado
rsEditor.Update
rsEditor.Close
faça sem o with para ver se pega o erro na linha certa
rsEditor("ProductName") = txtProductName
rsEditor("UnitPrice") = txtUnitPrice
rsEditor("Modificado") = txtModificado
rsEditor.Update
rsEditor.Close
faça sem o with para ver se pega o erro na linha certa
O With não influencia em nada, pois a função dele no código em questão é fazer com que eu não tenha que repeting a palavra rsEditor. Ele é muito util quando tempos que repetir um nome de um controle por varias vezes em um trecho de código.
não necessariamente, ERIVH JOHMIC
o erro irá acontecer na linha correta - já fiz o teste.
o erro irá acontecer na linha correta - já fiz o teste.
Vou testar, então.
Fiz o teste, e tudo continua como antes, i.e, o erro só foi captado na linha da atualização (rsEditor.Update).
putz...
vc tentou a dica do WILLIAN? ou então, coloque ![ProductName] = " " & txtProductName
apesar de vc estar apenas burlando a regra - estaria gravando um campo em branco
vc tentou a dica do WILLIAN? ou então, coloque ![ProductName] = " " & txtProductName
apesar de vc estar apenas burlando a regra - estaria gravando um campo em branco
Ah, sim. Esse é o código que tenho usado para validar os campos do form.
Porém, estou tentando padronizar a validação de tal maneira que não precise escrever um código para cada campo do form. E para isso, preciso resolver este tópico.
Porém, estou tentando padronizar a validação de tal maneira que não precise escrever um código para cada campo do form. E para isso, preciso resolver este tópico.
Tópico encerrado , respostas não são mais permitidas