ERRO AO PASSAR INSTRUCAO SQL

PRESTO 24/05/2010 17:19:15
#342647
Olá pessoal. Estou com um probleminha aqui. é o seguinte:
Ao abrir um banco, estou utilizando uma sintaxe em sql para filtrar um campo de acordo com um dado.
Assim:

Banco.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & App.path & [Ô]\XX09082000010001.mdb[Ô] & [Ô];Jet OLEDB:database Password=[Ô] & vgSenhaDb(vgDbAtual)

comandoSQL = ([Ô]SELECT [xx00970005] FROM [XX09080097] WHERE [xx00970001] = [ô][Ô] & ctrtabir_nrdec.Value & [Ô][ô][Ô])

Tabela.Open comandoSQL, Banco, [adOpenKeyset], [adLockReadOnly], [adCmdTable]

Acontece que dá um erro: [Ô]Run-time error [ô]-2144217900(80040e14[ô]. Erro na cláusula FROM. Mas acontece que a sintaxe do sql está correta. Alterei a sintaxe, deixando-a mais simples mais também deu o mesmo erro. Aí, mudei a ordem dos comandos de propósito, deixando o comando sql depois de abrir a tabela. Bom eu achei que ia dar o maior pau, porque a instrução estava vazia, mas sabem o que aconteceu? O mesmo erro. Então, peço a ajuda de vocês para resolver isso. No debug, a linha apontada é esta:

Tabela.Open comandoSQL, Banco, [adOpenKeyset], [adLockReadOnly], [adCmdTable]

e não aonde se encontra a instrução SQL, como era de se esperar.
ASHKATCHUP 24/05/2010 17:35:20
#342651
Tenta tirar os colchetes
JEAN.JEDSON 25/05/2010 11:01:01
#342713
Resposta escolhida
Banco.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & App.path & [Ô]\XX09082000010001.mdb[Ô] & [Ô];Jet OLEDB:database Password=[Ô] & vgSenhaDb(vgDbAtual)
comandoSQL = ([Ô]SELECT [xx00970005] FROM [XX09080097] WHERE [xx00970001] = [ô][Ô] & ctrtabir_nrdec.Value & [Ô][ô][Ô])

[ô] veja no immediate window o comando impresso e veja se o comando está certo...
[ô] confira tbm se o campo é realmente caracter ou se por acaso não é numero :)
debug.print comandoSQL

on error resume next
Tabela.Open comandoSQL, Banco, [adOpenKeyset], [adLockReadOnly], [adCmdTable]

[ô] verifique o erro completo aqui
debug.print err.number
debug.print err.description


passe o resultado destes 3 [Ô]debug.print[Ô] para que possamos avaliar melhor o erro
PRESTO 25/05/2010 12:57:21
#342721
Olá. Fiz os testes sugeridos no código, utilizando campo numérico e depois um campo texto. As mensagens no imediate foram:

[ô]campo numérico
SELECT [xx00970005] FROM [XX09080097] WHERE [xx00970001] = 1
-2147217900
Erro de sintaxe na cláusula FROM.

[ô]campo string
SELECT [xx00970005] FROM [XX09080097] WHERE [xx00970001] = [ô]1[ô]
-2147217900
Erro de sintaxe na cláusula FROM.

No começo da execução, aparece uma caixa de mensagem vazia, onde eu acho que deveria aparecer o código sql. Talvez o erro esteja que não está pasando a instrução sql. vou verificar, mas se alguém puder dar uma olhada nisso... Até!!!
MARCELO.TREZE 25/05/2010 13:25:26
#342724
tente assim

SELECT * FROM XX09080097 WHERE xx00970001 = [ô]1[ô]

ah, tenha certeza que o nome da tabela é XX09080097


PRESTO 25/05/2010 13:48:14
#342727
Marcelo, segui a sua sugestão mas ainda não deu. Retirei os colchetes, usei a sintaxe que você sugeriu, e sim ,a tabela é essa mesma. Mas o erro ainda é o mesmo. Estou sem idéias.
ASHKATCHUP 25/05/2010 14:14:45
#342729
Talvez você não tenha permissão para acessar essa tabela... ou o client do banco está bugado.
PRESTO 25/05/2010 14:39:25
#342735
Pessoal, achei a solução!!! Hahááá! é o seguinte: O erro estava na sintaxe da intrução sql. Na verdade, a sintaxe estava correta, mas não para o contexto em que estava sendo utilizada. O erro que dava [ô]Erro de sintaxe na cláusula FROM[ô] era justamente porque não existe a cláusula FROM. Como o computador não é muito didático, fica difícil de entender de primeira. Mas ficou assim:

Tabela.Open [Ô]XX09080097 WHERE xx00970019 = [Ô] & ctrtabir_nrdec.Value & [Ô][Ô], Banco, adOpenKeyset, adLockReadOnly, adCmdTable

Observem algumas coisas: A instrução SELECT não existe, nem a instrução FROM. Como o início da instrução do vb é Tabela.open, não é necessário abrir novamente com a instrução FROM. Legal, né? Esmiuçando mais:

Tabela.Open [Ô]TABELA WHERE CAMPO = [Ô] & CAIXA_TEXTO & [Ô][Ô], Banco, adOpenKeyset, adLockReadOnly, adCmdTable

Observem que depois da CAIXA_TEXTO vem o [ô]&[ô] e DUAS aspas. Para quem não sabe, o valor passado aqui é numérico. Se fosse texto, ficaria [ô] [Ô] & CAIXA_TEXTO & [Ô] [ô] [Ô] , com apóstrofe.

Até a próxima!!!
Tópico encerrado , respostas não são mais permitidas