SELECT MAX COM VARIAS TABELAS
Olá.
Estou tentando extrair de 4 tabelas as informações referentes a um código (CodDekafix) mas aparece o erro: Erro de sintaxe (operador faltando) na expressão de consulta.
Segue código:
Private Sub cmdLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLast.Click
Dim Con As New OleDbConnection([Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\DEKAFIX\Consulta Dekafix\dekafix.mdb[Ô])
Dim cmd As New OleDbCommand()
Con.Open()
sql = [Ô]SELECT * FROM Indice [Ô] _
& [Ô] WHERE CodDekafix=(Select max(CodDekafix) From Indice) [Ô] _
& [Ô]INNER JOIN (((dekafix1 INNER JOIN dekafix2 ON dekafix1.CodDekafix = dekafix2.CodDekafix) [Ô] _
& [Ô]INNER JOIN dekafix3 ON dekafix2.CodDekafix = dekafix3.CodDekafix) [Ô] _
& [Ô]INNER JOIN dekafix1_2L ON dekafix3.CodDekafix = dekafix1_2L.CodDekafix) [Ô] _
& [Ô]ON Indice.CodDekafix = dekafix1.CodDekafix ORDER BY Indice.CodDekafix[Ô]
cmd = New OleDbCommand(sql, Con)
dr = cmd.ExecuteReader
Alguém tem alguma sugestão?
Obrigado
Edson
Estou tentando extrair de 4 tabelas as informações referentes a um código (CodDekafix) mas aparece o erro: Erro de sintaxe (operador faltando) na expressão de consulta.
Segue código:
Private Sub cmdLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLast.Click
Dim Con As New OleDbConnection([Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\DEKAFIX\Consulta Dekafix\dekafix.mdb[Ô])
Dim cmd As New OleDbCommand()
Con.Open()
sql = [Ô]SELECT * FROM Indice [Ô] _
& [Ô] WHERE CodDekafix=(Select max(CodDekafix) From Indice) [Ô] _
& [Ô]INNER JOIN (((dekafix1 INNER JOIN dekafix2 ON dekafix1.CodDekafix = dekafix2.CodDekafix) [Ô] _
& [Ô]INNER JOIN dekafix3 ON dekafix2.CodDekafix = dekafix3.CodDekafix) [Ô] _
& [Ô]INNER JOIN dekafix1_2L ON dekafix3.CodDekafix = dekafix1_2L.CodDekafix) [Ô] _
& [Ô]ON Indice.CodDekafix = dekafix1.CodDekafix ORDER BY Indice.CodDekafix[Ô]
cmd = New OleDbCommand(sql, Con)
dr = cmd.ExecuteReader
Alguém tem alguma sugestão?
Obrigado
Edson
A cláusula WHERE tem que vir depois dos JOINS e o ORDER BY por último. Acho que sua query tá bem zoada, só dei uma ajeitada mas nem sei se funciona e nem sei o que vc quer fazer de fato com esses dados. Espero que tenha ajudado.
sql = [Ô]SELECT * FROM Indice [Ô] _
& [Ô]INNER JOIN (((dekafix1 INNER JOIN dekafix2 ON dekafix1.CodDekafix = dekafix2.CodDekafix) [Ô] _
& [Ô]INNER JOIN dekafix3 ON dekafix2.CodDekafix = dekafix3.CodDekafix) [Ô] _
& [Ô]INNER JOIN dekafix1_2L ON dekafix3.CodDekafix = dekafix1_2L.CodDekafix) [Ô] _
& [Ô]ON Indice.CodDekafix = dekafix1.CodDekafix [Ô] _
& [Ô]WHERE CodDekafix=(Select max(CodDekafix) From Indice) [Ô] _
& [Ô]ORDER BY Indice.CodDekafix[Ô]
Obrigado Leandro,
Eu coloquei o codigo sugerido e o retorno foi: [Ô]O campo especificado [ô]CodDekafix[ô] pode se referir a mais de uma tabela relacionada na cláusula FROM da instrução SQL[Ô]
O banco de dados (Access) tem o campo CodDekafix está presente nas 4 tabelas em questão (Indice, dekafix1, dekafix2 e dekafix3) e com o mesmo valor numérico.
Quando eu seleciono o valor contido no campo CodDekafix da tabela Indice, eu pretendo buscar todos os outros valores das outras tabelas com o mesmo valor do CodDekafix. Nessa pesquisa eu quero encontrar o maior valor para esse registro e os valores correspondentes.
Alguma outra sugestão?
Obrigado,
Eu coloquei o codigo sugerido e o retorno foi: [Ô]O campo especificado [ô]CodDekafix[ô] pode se referir a mais de uma tabela relacionada na cláusula FROM da instrução SQL[Ô]
O banco de dados (Access) tem o campo CodDekafix está presente nas 4 tabelas em questão (Indice, dekafix1, dekafix2 e dekafix3) e com o mesmo valor numérico.
Quando eu seleciono o valor contido no campo CodDekafix da tabela Indice, eu pretendo buscar todos os outros valores das outras tabelas com o mesmo valor do CodDekafix. Nessa pesquisa eu quero encontrar o maior valor para esse registro e os valores correspondentes.
Alguma outra sugestão?
Obrigado,
se vc está usando access ou sqlserver executa sempre sua query no administrador do banco de dados para ver o erro melhor
e o MAX tem que vim antes do FROM
EX:
SELECT
MAX(P.codprod),
MAX(F.codforn),
FROM produto AS P
INNER JOIN fornecedor AS F
ON P.codforn = F.codforn
WHERE P.codprod = 1
ORDER BY P.codprod
e o MAX tem que vim antes do FROM
EX:
SELECT
MAX(P.codprod),
MAX(F.codforn),
FROM produto AS P
INNER JOIN fornecedor AS F
ON P.codforn = F.codforn
WHERE P.codprod = 1
ORDER BY P.codprod
Com a query abaixo eu consigo selecionar todos os dados referentes ao máximo CodDekafix da tabela Indice. Gostaria que com o mesmo CodDekaix, pudesse ler os dados das outras tabela (Dekafix1, Dekafix2 e Dekafix3).
sql = [Ô]Select * From Indice Where CodDekafix=(Select max(CodDekafix) From Indice)[Ô]
Alguma sugestão?
sql = [Ô]Select * From Indice Where CodDekafix=(Select max(CodDekafix) From Indice)[Ô]
Alguma sugestão?
Citação::
Obrigado Leandro,
Eu coloquei o codigo sugerido e o retorno foi: [Ô]O campo especificado [ô]CodDekafix[ô] pode se referir a mais de uma tabela relacionada na cláusula FROM da instrução SQL[Ô]
O banco de dados (Access) tem o campo CodDekafix está presente nas 4 tabelas em questão (Indice, dekafix1, dekafix2 e dekafix3) e com o mesmo valor numérico.
Quando eu seleciono o valor contido no campo CodDekafix da tabela Indice, eu pretendo buscar todos os outros valores das outras tabelas com o mesmo valor do CodDekafix. Nessa pesquisa eu quero encontrar o maior valor para esse registro e os valores correspondentes.
Alguma outra sugestão?
Obrigado,
Poxa, é só vc na cláusula WHERE indicar o alias de uma tabela, como ocorre na cláusula ORDER BY.
sql = [Ô]SELECT * FROM Indice [Ô] _
& [Ô]INNER JOIN (((dekafix1 INNER JOIN dekafix2 ON dekafix1.CodDekafix = dekafix2.CodDekafix) [Ô] _
& [Ô]INNER JOIN dekafix3 ON dekafix2.CodDekafix = dekafix3.CodDekafix) [Ô] _
& [Ô]INNER JOIN dekafix1_2L ON dekafix3.CodDekafix = dekafix1_2L.CodDekafix) [Ô] _
& [Ô]ON Indice.CodDekafix = dekafix1.CodDekafix [Ô] _
& [Ô]WHERE Indice.CodDekafix=(Select max(CodDekafix) From Indice) [Ô] _
& [Ô]ORDER BY Indice.CodDekafix[Ô]
Eu utilizei o código sugerido pelo LLAIA :
sql = [Ô]SELECT * FROM Indice [Ô] _
& [Ô]INNER JOIN (((dekafix1 INNER JOIN dekafix2 ON dekafix1.CodDekafix = dekafix2.CodDekafix) [Ô] _
& [Ô]INNER JOIN dekafix3 ON dekafix2.CodDekafix = dekafix3.CodDekafix) [Ô] _
& [Ô]INNER JOIN dekafix1_2L ON dekafix3.CodDekafix = dekafix1_2L.CodDekafix) [Ô] _
& [Ô]ON Indice.CodDekafix = dekafix1.CodDekafix [Ô] _
& [Ô]WHERE Indice.CodDekafix=(Select max(CodDekafix) From Indice) [Ô] _
& [Ô]ORDER BY Indice.CodDekafix[Ô]
Mas no final da pesquisa o Visual Studio alerta para verificar se o resultado obtido é realmente o último da lista. E não é. O valor correto seria 561 e o programa me retornou 15.
cmd = New OleDbCommand(sql, Con)
dr = cmd.ExecuteReader
If dr.Read() Then
Label11.Text = dr([Ô]CodDekafix[Ô])
Erro : Make sure that the maximum index on a list is less than the list size
Valor da caixa de texto Label11 = 15 ao invés de 591.
sql = [Ô]SELECT * FROM Indice [Ô] _
& [Ô]INNER JOIN (((dekafix1 INNER JOIN dekafix2 ON dekafix1.CodDekafix = dekafix2.CodDekafix) [Ô] _
& [Ô]INNER JOIN dekafix3 ON dekafix2.CodDekafix = dekafix3.CodDekafix) [Ô] _
& [Ô]INNER JOIN dekafix1_2L ON dekafix3.CodDekafix = dekafix1_2L.CodDekafix) [Ô] _
& [Ô]ON Indice.CodDekafix = dekafix1.CodDekafix [Ô] _
& [Ô]WHERE Indice.CodDekafix=(Select max(CodDekafix) From Indice) [Ô] _
& [Ô]ORDER BY Indice.CodDekafix[Ô]
Mas no final da pesquisa o Visual Studio alerta para verificar se o resultado obtido é realmente o último da lista. E não é. O valor correto seria 561 e o programa me retornou 15.
cmd = New OleDbCommand(sql, Con)
dr = cmd.ExecuteReader
If dr.Read() Then
Label11.Text = dr([Ô]CodDekafix[Ô])
Erro : Make sure that the maximum index on a list is less than the list size
Valor da caixa de texto Label11 = 15 ao invés de 591.
Opa!
Alterei a atribuição da caixa de texto como abaixo e funcionou.
Label11.Text = dr([Ô]Indice.CodDekafix[Ô])
Obrigado.
Alterei a atribuição da caixa de texto como abaixo e funcionou.
Label11.Text = dr([Ô]Indice.CodDekafix[Ô])
Obrigado.
Faça seu login para responder