ERRO NO EDIT USANDO MYSQL
Vamos ver....entao temos que pensar no tratamento do erro.
Se realmente ele so acontece quando nada se altera, boa noticia, basta entao tratar o erro para a nao alteracao.
Agora, se voce disser que por exemplo um campo de data da pau, ai lascou.
Se realmente ele so acontece quando nada se altera, boa noticia, basta entao tratar o erro para a nao alteracao.
Agora, se voce disser que por exemplo um campo de data da pau, ai lascou.
Marcelo, não funcionou tbm, deu erro [Ô]Invalid Operation[Ô], deve ser pq esse código é para ADO né.
SINKERTEC, o BD que estou usando é Mysql, e ele não importa os Ãndices do Access.
Nossa como que faço hein, até porque se eu mudar o código ou para o exemplo do Marcelo ou para o exemplo do SINKERTEC eu terei que alterar TODO o sistema, e são mais de 90 formulários...
E o problema é só quando não altero nada no cadastro...o resto tudo funciona perfeitamente!
Obrigado por estarem tentando ajudar gente!
SINKERTEC, o BD que estou usando é Mysql, e ele não importa os Ãndices do Access.
Nossa como que faço hein, até porque se eu mudar o código ou para o exemplo do Marcelo ou para o exemplo do SINKERTEC eu terei que alterar TODO o sistema, e são mais de 90 formulários...
E o problema é só quando não altero nada no cadastro...o resto tudo funciona perfeitamente!
Obrigado por estarem tentando ajudar gente!
é amigo, sem grandes mudanças no seu código não será muito fácil não.
Se analisarmos que o erro só ocorre qdo não há alterações o que poderia ser feito é um condição analisando os campos anteriores e os atuais.
Mas o Mauricio(webmaster) deixou uma boa dica.
Fazer o tratamento do erro qdo não ocorrer alteração.
Exemplo.
Após o .update vc faz a verificação se o erro ocorreu.
Caso tenha ocorrido vc trata-o e pronto.
é algom parecido com isso.
Se analisarmos que o erro só ocorre qdo não há alterações o que poderia ser feito é um condição analisando os campos anteriores e os atuais.
Mas o Mauricio(webmaster) deixou uma boa dica.
Fazer o tratamento do erro qdo não ocorrer alteração.
Exemplo.
Após o .update vc faz a verificação se o erro ocorreu.
Caso tenha ocorrido vc trata-o e pronto.
ON ERROR GOTO TRATA_ERRO
Set Tabela = BD.OpenRecordset([Ô]SELECT * FROM ctr_ven WHERE CODIGO=[ô][Ô] + txtFields(0).Text + [Ô][ô][Ô], dbOpenDynaset)
Tabela.Edit
Tabela!nome = txtFields(1).Text
Tabela!endereco = txtFields(2).Text
Tabela!bairro = txtFields(3).Text
Tabela!cidade = txtFields(4).Text
Tabela!CEP = txtFields(5).Text
Tabela!rg = txtFields(6).Text
Tabela!CPF = txtFields(7).Text
Tabela!comissao = IIf(txtFields(8).Text = [Ô][Ô], 0, txtFields(8).Text)
Tabela!Senha = Text5.Text
Tabela([Ô]tipo[Ô]) = IIf(OptUsuario.Value = True, [Ô]U[Ô], [Ô]A[Ô]) [ô][Ô]U[Ô] de Usuáro, [Ô]A[Ô] de Administrador
Tabela([Ô]estado[Ô]) = ComboEstado.Text
Tabela.Update Se algum dos campos acima tiver o valor alterado não dá erro, mas se não alterar nenhum dá erro
TRATA_ERRO :
IF ERR.NUMBER = XXXXXX THEN
MSGBOX([Ô]NENHUM DADO FOI ALTERADO[Ô])
ELSE
MSGBOX([Ô]DADOS ALTERADOS COM SUCESSO[Ô])
END IF
é algom parecido com isso.
Pois é, acho que vai ter que ser na marra mesmo...mas o problema de ser na marra é quando estiver usando loop ou qq coisa que não mude valor...ou seja inviável...
Mas será que o problela num é na conexão ou algum parâmetro da conexão:
Public Conexao As dao.Workspace
Public BD As dao.Database
Set Conexao = DBEngine.Workspaces(0) [ô]Conexão
Set BD = Conexao.OpenDatabase([Ô][Ô], dbDriverComplete, False, [Ô]DSN=TESTEODBC[Ô])
tenho conexão tbm por OpenConnection em vez de opendatabase
Dim wrkMain As DAO.Workspace
Dim conMain As DAO.Connection
Dim rstTemp As DAO.Recordset
Set wrkMain = CreateWorkspace([Ô][Ô], [Ô][Ô], [Ô][Ô], dbUseODBC)
Set conMain = wrkMain.OpenConnection([Ô][Ô], dbDriverNoPrompt, False, [Ô]ODBC;DATABASE=terminal;UID=root;PWD=123;DSN=TESTEODBC[Ô])
Set rstTemp = conMain.OpenRecordset([Ô]select * from ctr_ven where codigo=[ô]1[ô][Ô], dbOpenDynamic)
rstTemp.Edit
rstTemp!nome = [Ô]GERAL[Ô]
rstTemp.Update
[txt-color=#007100]só que nesse caso nem o edit ele deixa dar porque fala que o objeto é somente leitura....[/txt-color]
Mas será que o problela num é na conexão ou algum parâmetro da conexão:
Public Conexao As dao.Workspace
Public BD As dao.Database
Set Conexao = DBEngine.Workspaces(0) [ô]Conexão
Set BD = Conexao.OpenDatabase([Ô][Ô], dbDriverComplete, False, [Ô]DSN=TESTEODBC[Ô])
tenho conexão tbm por OpenConnection em vez de opendatabase
Dim wrkMain As DAO.Workspace
Dim conMain As DAO.Connection
Dim rstTemp As DAO.Recordset
Set wrkMain = CreateWorkspace([Ô][Ô], [Ô][Ô], [Ô][Ô], dbUseODBC)
Set conMain = wrkMain.OpenConnection([Ô][Ô], dbDriverNoPrompt, False, [Ô]ODBC;DATABASE=terminal;UID=root;PWD=123;DSN=TESTEODBC[Ô])
Set rstTemp = conMain.OpenRecordset([Ô]select * from ctr_ven where codigo=[ô]1[ô][Ô], dbOpenDynamic)
rstTemp.Edit
rstTemp!nome = [Ô]GERAL[Ô]
rstTemp.Update
[txt-color=#007100]só que nesse caso nem o edit ele deixa dar porque fala que o objeto é somente leitura....[/txt-color]
Caraca...to ficando injuriado com esse código
Tente assim então
BD.Execute [Ô]UPDATE ctr_ven SET nome=[ô][Ô] & txtFields(1).Text & [Ô][ô],endereco=[ô][Ô] & txtFields(2).Text & [Ô][ô],bairro=[ô][Ô] & txtFields(3).Text & [Ô][ô],cidade=[ô][Ô] & txtFields(4).Text & [Ô][ô],cep=[ô][Ô] & txtFields(5).Text & [Ô][ô],rg=[ô][Ô] & txtFields(6).Text & [Ô][ô],cpf=[ô][Ô] & txtFields(7).Text & [Ô][ô],comissao=[ô][Ô] & txtFields(8).Text & [Ô][ô],senha=[ô][Ô] & Text5.Text & [Ô][ô],tipo=[ô][Ô] & IIf(OptUsuario.Value = True, [Ô]U[Ô], [Ô]A[Ô]) & [Ô][ô],estado=[ô][Ô] & ComboEstado.Text & [Ô][ô] WHERE codigo =[ô][Ô] & txtFields(0).Text & [Ô][ô][Ô][Ô]
lembrando que..para campos númericos ficará [Ô] & Text.Text & [Ô] e campos de texto [ô] [Ô] & Text. Text & [Ô] [ô]
testa aà e manda a resposta
SINKERTEC funcionou sim perfeitamente !!!
Obrigado pela ajuda, MAS eu no caso vou ter que mudar o código de TODO o sistema e usando .edit e .update eu num mexeria em absolutamente nada...
O ideal é fazer idêntico o que vc me passou, alias, o ideal seria passar para ADO, mas o sistema é muito grande, eu levaria muuuuito tempo apra adaptar todo o sistema e infelizmente não tenho esse tempo, ou seja vou ter fazer ele funcionar com .edit e .update mesmo, agora como eu num sei .
Se num for pedir muito, num tem como vc ciar um banco com apenas uma tabela e um campo e tentar fazer como eu estou fazendo para ver se conseguer arrumar ?
Estou usando assim:
dim Conexao As dao.Workspace
dim BD As dao.Database
dim Tabela as dao.recordset
Set Conexao = DBEngine.Workspaces(0)
Set BD = Conexao.OpenDatabase([Ô][Ô], dbDriverComplete, False, [Ô]DSN=TESTEODBC[Ô])
Set tabela=bd.OpenRecordset([Ô]select * from suatabela where seucampo=[ô]1[ô],dbOpenDynaset)
Tabela.edit
Tabela!seucampo = (receber uma valor igual ele já tem la dentro)
Tabela.update
Abração e mais uma vez muito obrigado pela ajuda!
Obrigado pela ajuda, MAS eu no caso vou ter que mudar o código de TODO o sistema e usando .edit e .update eu num mexeria em absolutamente nada...
O ideal é fazer idêntico o que vc me passou, alias, o ideal seria passar para ADO, mas o sistema é muito grande, eu levaria muuuuito tempo apra adaptar todo o sistema e infelizmente não tenho esse tempo, ou seja vou ter fazer ele funcionar com .edit e .update mesmo, agora como eu num sei .
Se num for pedir muito, num tem como vc ciar um banco com apenas uma tabela e um campo e tentar fazer como eu estou fazendo para ver se conseguer arrumar ?
Estou usando assim:
dim Conexao As dao.Workspace
dim BD As dao.Database
dim Tabela as dao.recordset
Set Conexao = DBEngine.Workspaces(0)
Set BD = Conexao.OpenDatabase([Ô][Ô], dbDriverComplete, False, [Ô]DSN=TESTEODBC[Ô])
Set tabela=bd.OpenRecordset([Ô]select * from suatabela where seucampo=[ô]1[ô],dbOpenDynaset)
Tabela.edit
Tabela!seucampo = (receber uma valor igual ele já tem la dentro)
Tabela.update
Abração e mais uma vez muito obrigado pela ajuda!
Meu filho
vamos fazer uma puta gambiarra e tudo sera resolvido
em cima do seu Tabela.Edit escreva
tira akele trata erro e coloca
On error resume next
Testa ae!!
Tudo bem mas vou ter que colocar no sistema inteiro em todas as rotinas de gravação inclusive nos loops e etc e se em algum lugar der um erro diferente desse erro eu num vou ficar sabendo por causa da [ô]on error resume next[ô]
Vou continuar tentando resolver o problema mesmo, o [ô]on error resume next[ô] é muito perigoso.
Obrigado pela ajuda
Vou continuar tentando resolver o problema mesmo, o [ô]on error resume next[ô] é muito perigoso.
Obrigado pela ajuda
nossa gente to chateado, qq tipo de conexão que eu faça da o mesmo problema na edição, que não tem alteração, fiz uma conexão super simples agora e mesmo assim deu errado, mas as vezes por a conexão estar simples que etsá dando o problema tbm né, por estar talvez faltando algum parâmetro.
Dim db As dao.Database
Dim rs As dao.Recordset
Set db = OpenDatabase([Ô][Ô], dbDriverComplete, False, [Ô]ODBC;DSN=TESTEODBC[Ô])
Set rs = db.OpenRecordset([Ô]select * from ctr_ven where codigo=[ô]1[ô][Ô], dbOpenDynaset)
rs.Edit
rs!nome = [Ô]GERAL1[Ô]
rs.Update
[txt-color=#e80000]to chateado, tava tudo tão certo[/txt-color]
Se puderem ficarei muito agradecido...
Dim db As dao.Database
Dim rs As dao.Recordset
Set db = OpenDatabase([Ô][Ô], dbDriverComplete, False, [Ô]ODBC;DSN=TESTEODBC[Ô])
Set rs = db.OpenRecordset([Ô]select * from ctr_ven where codigo=[ô]1[ô][Ô], dbOpenDynaset)
rs.Edit
rs!nome = [Ô]GERAL1[Ô]
rs.Update
[txt-color=#e80000]to chateado, tava tudo tão certo[/txt-color]
Se puderem ficarei muito agradecido...
o problema é q n tenho MySQL aki pra testar...e sei q muda tudo
Tópico encerrado , respostas não são mais permitidas