ERRO AO ATUALIZAR TABELA - MYSQL, ADO E ODBC

ELTON.CALADO 22/09/2010 11:58:05
#353583
Tenho um BD MySQL 5.1 com Driver ODBC 3.00 no qual estou fazendo Loop em uma tabela e ao atualizar [Ô]Update[Ô] dá o seguinte erro: [Ô]a linha não pode ser localizada para atualização[Ô]...

Segue abaixo meu código:

Public BD_EXTERNO As New ADODB.Connection

BD_EXTERNO = [Ô]Driver={MySQL ODBC 5.1 Driver};Server=[Ô] & SISTEMA_Bd!diretorio_servidor & [Ô];Database=[Ô] & SISTEMA_Bd!NOME_BD & [Ô];User=[Ô] & SISTEMA_Bd!USUARIO & [Ô];Password=[Ô] & SISTEMA_Bd!Senha & [Ô];Option=16834;[Ô]
BD_EXTERNO.CursorLocation = adUseClient
BD_EXTERNO.Open [ô]

Dim BD_Produtos_TEMP As New ADODB.Recordset

SQLtemp = [Ô]SELECT............[Ô]

BD_Vendas_Itens_TEMP.CursorLocation = adUseClient
BD_Vendas_Itens_TEMP.Open SQLtemp, BD_EXTERNO, adOpenKeyset, adLockPessimistic

BD_Vendas_Itens_TEMP.MoveFirst
Do While Not BD_Vendas_Itens_TEMP.EOF
If BD_Vendas_Itens_TEMP!CANCELADO = [Ô]N[Ô] Then

BD_Vendas_Itens_TEMP!CANCELADO = [Ô]S[Ô]
BD_Vendas_Itens_TEMP!BAIXA = [Ô]N[Ô]
BD_Vendas_Itens_TEMP.Update

End If

BD_Vendas_Itens_TEMP.MoveNext
Loop


Já fiz de tudo e até agora nada... Já troquei para todos os tipos de bloqueio e mesmo assim não resolve....

Se alguem puder me adudar desde já fico muito grato.

Atenciosamente,

Elton Calado

msn :elton-calado@hotmail.com
skype : elton-calado
NETMANIA 22/09/2010 12:05:17
#353584
Resposta escolhida
Se você está usando o MySQL versão 5.x e o driver de MyODBC para banco versão 3.x, aconselho alterar este o mais rápido 'possivel pois o seu problema pode ser devido a versão errada do driver.
ELTON.CALADO 22/09/2010 12:19:36
#353587
Caro Colega,

A versão do ODBC que estou utilizando é a mais recente, ou seja é a 5.1.7

segue abaixo o link para baixar:

http://www.mysql.com/downloads/connector/odbc/

No post digitei a versão errada...

Se vc tiver alguma outra dica, fico muito grato.
MARCELO.TREZE 22/09/2010 14:35:02
#353598
colega posso estar errado mas veja esta linha

SQLtemp = [Ô]SELECT............[Ô]

acredito que o certo seria

SQLtemp = [Ô]SELECT * FROM tabela[Ô]


ELTON.CALADO 22/09/2010 15:03:11
#353601
Caro Colega,

A linha : SQLtemp = [Ô]SELECT............[Ô] é apenas um exemplo... é que o SELECT é grande e para não digitar tudo coloquei assim...

Toda via, consegui resolver meu problema criando um Indice Primario e Exlusivo formado por vários campos... Depois coloquei os Campos do Indice na SQL... Ai resolveu meu problema...
Fica aqui meus agradecimentos aos colegas que responderam minha dúvida.

Atenciosamente,

Elton Calado
MARCELO.TREZE 22/09/2010 15:04:57
#353602
bom outra forma seria esta, sem precisar de Loop



Public BD_EXTERNO As New ADODB.Connection

BD_EXTERNO = [Ô]Driver={MySQL ODBC 5.1 Driver};Server=[Ô] & SISTEMA_Bd!diretorio_servidor & [Ô];Database=[Ô] & SISTEMA_Bd!NOME_BD & [Ô];User=[Ô] & SISTEMA_Bd!USUARIO & [Ô];Password=[Ô] & SISTEMA_Bd!Senha & [Ô];Option=16834;[Ô]
BD_EXTERNO.CursorLocation = adUseClient
BD_EXTERNO.Open [ô]

Dim BD_Produtos_TEMP As New ADODB.Recordset

SQLtemp = [Ô]UPDATE tabela SET cancelado=[ô]S[ô],baixa=[ô]N[ô] WHERE cancelado =[ô]N[ô][Ô]

BD_Vendas_Itens_TEMP.CursorLocation = adUseClient
BD_Vendas_Itens_TEMP.Open SQLtemp, BD_EXTERNO, adOpenKeyset, adLockPessimistic

apenas troque tabela pelo nome da sua tabela

Tópico encerrado , respostas não são mais permitidas