ERRO NO EDIT USANDO MYSQL

WEBMASTER 20/01/2010 12:41:43
#332394
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.
GFASSIO 20/01/2010 13:16:14
#332397
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!
FOXMAN 20/01/2010 13:29:41
#332400
é 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.



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.
GFASSIO 20/01/2010 13:33:42
#332401
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]
SINKERTEC 20/01/2010 14:40:39
#332407


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
GFASSIO 20/01/2010 14:54:53
#332411
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!
SINKERTEC 20/01/2010 17:05:26
#332429

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!!

GFASSIO 20/01/2010 17:50:23
#332435
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
GFASSIO 20/01/2010 18:07:32
#332438
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...
SINKERTEC 21/01/2010 15:16:48
#332509


o problema é q n tenho MySQL aki pra testar...e sei q muda tudo
Página 2 de 3 [21 registro(s)]
Tópico encerrado , respostas não são mais permitidas