QUERY FUNCIONA NO ACCESS MAS NÃO NO VB6. PORQUE?

POCE1DON 09/01/2016 18:16:34
#455924

SELECT
PR.DataCadastro, PR.QtdeCadastro, PR.Negativo, PR.Bloqueado, PR.valCusto,
PR.valVenda, PR.TipoMoeda, PR.Desconto, PR.CodigoBarras,
PR.codLote, IIF(ISNULL(LOT.Data) = TRUE, NULL, FORMAT(LOT.Data,[ô]DD/MM/YYYY[ô])),
SWITCH(ISNULL(LOT.ID_Lote) = TRUE, [ô]LOTE EXCLUIDO[ô], ISNULL(LOT.ID_Lote) = FALSE, LOT.Origem),
LOT.Descricao,
PR.codFornecedor,
SWITCH(ISNULL(FOR.ID_Fornecedor) = TRUE, [ô]FORNECEDOR EXCLUIDO[ô], ISNULL(FOR.ID_Fornecedor) = FALSE, FOR.Nome),
SWITCH(ISNULL(FOR.Tipo) = TRUE, NULL, FOR.Tipo = [ô]F[ô], [ô]FISICO[ô], FOR.Tipo = [ô]J[ô], [ô]JURIDICO[ô]),
(SELECT FORMAT(LAST(VE.Data),[ô]DD/MM/YYYY[ô]) FROM tblVendidos VI INNER JOIN tblVendas VE ON VI.codVenda = VE.codCadastro WHERE VI.codProduto = PR.codCadastro)
FROM (
SELECT
PR.*, FOR.*, LOT.*
FROM ((tblProdutos PR
LEFT JOIN (SELECT codCadastro AS ID_Fornecedor, Tipo, Nome
FROM tblFornecedor) AS FOR
ON FOR.ID_Fornecedor = PR.codFornecedor)
LEFT JOIN (SELECT codCadastro AS ID_Lote, Data, Origem, Descricao
FROM tblLotes) AS LOT
ON LOT.ID_Lote = PR.codLote)
) AS PRO
WHERE PR.codCadastro = 7199


Faço essa consulta no Access e funciona normalmente, mas quando passo para o VB6
é retornado erro no FROM.
Também tenho a ferramenta [ô]RazorSQL[ô] para gerenciar minhas consultas SQL, e lá também
funciona normalmente.

Não deveria funcionar no VB também?

Obrigado!
JABA 09/01/2016 18:30:51
#455925
Você não está fazendo as quebras de linhas, talvez seja isso. Geralmente o pessoal faz assim:

Dim sql as String

Sql = [Ô]SELECT PR.DataCadastro, PR.QtdeCadastro, PR.Negativo, PR.Bloqueado, PR.valCusto, [Ô]
Sql = Sql & [Ô]PR.valVenda, PR.TipoMoeda, PR.Desconto, PR.CodigoBarras, [Ô]
Sql = Sql & [Ô]PR.codLote, IIF(ISNULL(LOT.Data) = TRUE, NULL, FORMAT(LOT.Data,[ô]DD/MM/YYYY[ô])), [Ô]
etc


Poderia fazer assim também:

sql = [Ô]SELECT PR.DataCadastro, PR.QtdeCadastro, PR.Negativo, PR.Bloqueado, PR.valCusto, [Ô] [txt-color=#e80000]& _[/txt-color]
[Ô]PR.valVenda, PR.TipoMoeda, PR.Desconto, PR.CodigoBarras, [Ô] [txt-color=#e80000]& _[/txt-color]
[Ô]PR.codLote, IIF(ISNULL(LOT.Data) = TRUE, NULL, FORMAT(LOT.Data,[ô]DD/MM/YYYY[ô])), [Ô] [txt-color=#e80000]& _[/txt-color]
etc

POCE1DON 09/01/2016 18:43:19
#455926
Apenas aqui não coloquei as quebras Jaba, mas lá na IDE eu estou usando desse jeito que falou.
A única coisa que não tentei foi formar apenas 1 linha e ver o que dá. Vou tentar agora!
POCE1DON 09/01/2016 18:48:08
#455927
Mesma coisa cara, coloquei tudo em 3 linhas porque a IDE não aceitou 1 apenas, e mesmo assim retornou o mesmo erro!
JABA 09/01/2016 18:52:53
#455928
Põe aqui exatamente como está fazendo. E se possível, envia uma imagem com o erro gerado.
POCE1DON 09/01/2016 19:06:55
#455929
 
[Ô]SELECT [Ô] & _
[Ô]PR.DataCadastro, PR.QtdeCadastro, PR.Negativo, PR.Bloqueado, PR.valCusto, [Ô] & _
[Ô]PR.valVenda, PR.TipoMoeda, PR.Desconto, PR.CodigoBarras, [Ô] & _
[Ô]PR.codLote, IIF(ISNULL(LOT.Data) = TRUE, NULL, FORMAT(LOT.Data,[ô]DD/MM/YYYY[ô])), [Ô] & _
[Ô]SWITCH(ISNULL(LOT.ID_Lote) = TRUE, [ô]LOTE EXCLUIDO[ô], ISNULL(LOT.ID_Lote) = FALSE, LOT.Origem), [Ô] & _
[Ô]LOT.Descricao, [Ô] & _
[Ô]PR.codFornecedor, [Ô] & _
[Ô]SWITCH(ISNULL(FOR.ID_Fornecedor) = TRUE, [ô]FORNECEDOR EXCLUIDO[ô], ISNULL(FOR.ID_Fornecedor) = FALSE, FOR.Nome), [Ô] & _
[Ô]SWITCH(ISNULL(FOR.Tipo) = TRUE, NULL, FOR.Tipo = [ô]F[ô], [ô]FISICO[ô], FOR.Tipo = [ô]J[ô], [ô]JURIDICO[ô]), [Ô] & _
[Ô](SELECT FORMAT(LAST(VE.Data),[ô]DD/MM/YYYY[ô]) FROM tblVendidos VI INNER JOIN tblVendas VE ON VI.codVenda = VE.codCadastro WHERE VI.codProduto = PR.codCadastro) [Ô] & _
[Ô]FROM ( [Ô] & _
[Ô]SELECT [Ô] & _
[Ô]PR.*, FOR.*, LOT.* [Ô] & _
[Ô]FROM ((tblProdutos PR [Ô] & _
[Ô]LEFT JOIN (SELECT codCadastro AS ID_Fornecedor, Tipo, Nome [Ô] & _
[Ô]FROM tblFornecedor) AS FOR [Ô] & _
[Ô]ON FOR.ID_Fornecedor = PR.codFornecedor) [Ô] & _
[Ô]LEFT JOIN (SELECT codCadastro AS ID_Lote, Data, Origem, Descricao [Ô] & _
[Ô]FROM tblLotes) AS LOT [Ô] & _
[Ô]ON LOT.ID_Lote = PR.codLote)[Ô] & _
[Ô]) AS PRO [Ô] & _
[Ô]WHERE PR.codCadastro = 7199[Ô]


Acredito que o problema está no JOIN feito para acessar o SELECT de tblFornecedor e tblLotes, o VB não suporta.
POCE1DON 09/01/2016 21:43:06
#455932
Jaba,

O problema está resolvido. O nosso amigo FFCOUTO resolveu e ficou dessa forma:

  [Ô]SELECT codCadastro, ID_Fornecedor, ID_Lote [Ô] & _
[Ô]FROM (SELECT PR.*, FORN.*, LOT.* FROM (tblProdutos AS PR [Ô] & _
[Ô]LEFT JOIN (SELECT codCadastro AS ID_Fornecedor FROM tblFornecedor) AS FORN [Ô] & _
[Ô]ON FORN.ID_Fornecedor = PR.codFornecedor) [Ô] & _
[Ô]LEFT JOIN (SELECT codCadastro AS ID_Lote FROM tblLotes) AS LOT [Ô] & _
[Ô]ON LOT.ID_Lote = PR.codLote) AS PRO [Ô] & _
[Ô]WHERE codCadastro = 7199[Ô]


Eu estava utilizando 1 parenteses à mais em tblProdutos, e também apresentou conflito por conta do ALIAS ser FOR

Obrigado pela força aí.
Tópico encerrado , respostas não são mais permitidas