PESQUISA EM 3 TABELAS
GALERA COMO EU FAÇO PARA PESQUISAR DADOS EM 3 TABELAS (PEDIDOS,PEDIDO_CLI,PEDIDO_PROD), PRECISO CARREGAR UM LISTVIEW COM OS VALORES CONTIDOS NESSAS TABELAS.
AXO QUE DEVO FAZER USO DO INNER JOIN, MAS NAO SEI USALO.
OBS UM CAMPO COMUN ENTRE AS TABELAS é O CODSEG.
O LISTVIEW QUE PRECISO PREENCHER DEVE FICAR ASSIM:
PEDIDO | DATA | CLIENTE | VALOR | OBS |
PEDIDO, DATA E OBS ESTAO NA TABELA PEDIDOS
CLIENTE ESTA NA TABELA PEDIDO_CLI
VALOR NA TABELA PEDIDO_PROD
ALGUEM PODE ME AJUDAR COM A SINTAXE PARA ESSA PESQUISA.
AXO QUE DEVO FAZER USO DO INNER JOIN, MAS NAO SEI USALO.
OBS UM CAMPO COMUN ENTRE AS TABELAS é O CODSEG.
O LISTVIEW QUE PRECISO PREENCHER DEVE FICAR ASSIM:
PEDIDO | DATA | CLIENTE | VALOR | OBS |
PEDIDO, DATA E OBS ESTAO NA TABELA PEDIDOS
CLIENTE ESTA NA TABELA PEDIDO_CLI
VALOR NA TABELA PEDIDO_PROD
ALGUEM PODE ME AJUDAR COM A SINTAXE PARA ESSA PESQUISA.
Tá aÃ.
Conselho, estude isso, pq vai usar muuuito
SELECT PEDIDOS.PEDIDO, PEDIDOS.DATA, PEDIDO_CLI.CLIENTE, PEDIDO_PROD.VALOR, PEDIDOS.OBS
FROM (PEDIDOS LEFT JOIN PEDIDO_CLI ON PEDIDOS.CODSEG = PEDIDO_CLI)
LEFT JOIN PEDIDO_PROD ON PEDIDOS.CODSEG = PEDIDO_PROD.CODSEG
ORDER BY PEDIDOS.DATA
Conselho, estude isso, pq vai usar muuuito
porque voce esta usando o left join ao inves do inner join?
outra duvida depois vou precisar pegas todos os campos das 3 tabelas, posso usar simplesmente [Ô]*[ô] ?
outra duvida depois vou precisar pegas todos os campos das 3 tabelas, posso usar simplesmente [Ô]*[ô] ?
LEFT indica qual tabela tem prioridade (esquerda da declaração, no caso)
Vc pode usar * qdo usa todos os campos da tabela. Caso não for usar todos não é indicado pois perde performance.
Dessa forma!
SELECT PEDIDOS.*, PEDIDO_CLI.*, PEDIDO_PROD.*
O restante da declaração SQL continua igual.
Vc pode usar * qdo usa todos os campos da tabela. Caso não for usar todos não é indicado pois perde performance.
Dessa forma!
SELECT PEDIDOS.*, PEDIDO_CLI.*, PEDIDO_PROD.*
O restante da declaração SQL continua igual.
posso fazer a exclusao de dados das tres tabelas suando o inner join?
Não. Consulta SELECT é uma coisa consulta DELETE é outra. Tem q fazer individual
certo. enato o join so pode ser usando com select?
outra questao posso ter duas comparações em cada join? tipo
outra questao posso ter duas comparações em cada join? tipo
[Ô] SELECT PEDIDOS.PEDIDO, PEDIDOS.DATA, PEDIDO_CLI.CLIENTE, PEDIDO_PROD.VALOR, PEDIDOS.OBS
FROM (PEDIDOS LEFT JOIN PEDIDO_CLI ON PEDIDOS.CODSEG = PEDIDO_CLI AND PEDIDOS.REPRE = PEDIDOS_CLI.REPRE)
LEFT JOIN PEDIDO_PROD ON PEDIDOS.CODSEG = PEDIDO_PROD.CODSEG AND PEDIDOS.REPRE = PEDIDOS_CLI.REPRE
ORDER BY PEDIDOS.DATA; [Ô]
Gelera ajuda ai.
a consulta esta funcioando mais preciso da ajuda de voce para preencher uma listview com os dados
a string de consulta é a seguinte
SELECT PEDIDOS.PEDIDO, PEDIDOS.DATA, PEDIDOS.SITU , PEDIDOS_CLI.NOME,PEDIDO_CLI.REPRE, PEDIDOS_PROD.*
FROM (PEDIDOS LEFT JOIN PEDIDOS_CLI ON PEDIDOS.CODSEG = PEDIDO_CLI.CODSEG)
LEFT JOIN PEDIDOS_PROD ON PEDIDOS.CODSEG = PEDIDOS_PROD.CODSEG
ORDER BY PEDIDOS.DATA
dai eu preenche algum textbox com os dados retornados.
mas eu tenho que pegar os dados ta tabela pedidos_prod e preencher um listview
como eu faço um loop nessa pesquisa para preencher o litview
Do While Not Rst.EOF
Set lst = ListView1.ListItems.Add
With lst
.Text = Rst!CodPed
.SubItems(1) = Rst!arti
.SubItems(2) = Rst!tama
.SubItems(3) = Rst!cor
.SubItems(4) = Rst!Furo
.SubItems(5) = Rst!acab
.SubItems(6) = Rst!emba
.SubItems(7) = Rst!quan
.SubItems(8) = Rst!valuni
.SubItems(9) = Rst!valtot
End With
Rst.MoveNext
Loop
a consulta esta funcioando mais preciso da ajuda de voce para preencher uma listview com os dados
a string de consulta é a seguinte
SELECT PEDIDOS.PEDIDO, PEDIDOS.DATA, PEDIDOS.SITU , PEDIDOS_CLI.NOME,PEDIDO_CLI.REPRE, PEDIDOS_PROD.*
FROM (PEDIDOS LEFT JOIN PEDIDOS_CLI ON PEDIDOS.CODSEG = PEDIDO_CLI.CODSEG)
LEFT JOIN PEDIDOS_PROD ON PEDIDOS.CODSEG = PEDIDOS_PROD.CODSEG
ORDER BY PEDIDOS.DATA
dai eu preenche algum textbox com os dados retornados.
mas eu tenho que pegar os dados ta tabela pedidos_prod e preencher um listview
como eu faço um loop nessa pesquisa para preencher o litview
Do While Not Rst.EOF
Set lst = ListView1.ListItems.Add
With lst
.Text = Rst!CodPed
.SubItems(1) = Rst!arti
.SubItems(2) = Rst!tama
.SubItems(3) = Rst!cor
.SubItems(4) = Rst!Furo
.SubItems(5) = Rst!acab
.SubItems(6) = Rst!emba
.SubItems(7) = Rst!quan
.SubItems(8) = Rst!valuni
.SubItems(9) = Rst!valtot
End With
Rst.MoveNext
Loop
Sub PreencheGrid2()
On Error GoTo ErrorHandler
Set RS = New ADODB.Recordset
RS.Open [Ô]Select * from CadSubCategorias where idauxiliar=[ô][Ô] & txtCategoria.Text & [Ô][ô]order by descricao[Ô], Conexao, adOpenDynamic, adLockReadOnly
With Me.ListView1
.View = lvwReport
.GridLines = True
.FullRowSelect = True
.ListItems.Clear
.ColumnHeaders.Clear
End With
With Me.ListView1.ColumnHeaders
.Add , , [Ô]Código :[Ô], 1200, lvwColumnLeft
.Add , , [Ô]Categoria :[Ô], 6600, lvwColumnLeft
.Add , , [Ô]Sub-Categoria :[Ô], 6600, lvwColumnLeft
End With
RS.MoveFirst
Do Until RS.EOF
Set lstItem = Me.ListView1.ListItems.Add(, , [Ô][Ô], 3, 3)
lstItem.Text = IIf(IsNull(RS!id), [Ô][Ô], RS!id)
lstItem.SubItems(1) = IIf(IsNull(RS!idauxiliar), [Ô][Ô], RS!idauxiliar)
lstItem.SubItems(2) = IIf(IsNull(RS!descricao), [Ô][Ô], RS!descricao)
RS.MoveNext
Loop
RS.Close
ErrorHandlerExit:
Exit Sub
ErrorHandler:
If Err = 3021 Then
Resume Next
ElseIf Err = 94 Then
Resume Next
ElseIf Err = 3420 Then
Resume Next
Else
MsgBoxGT [Ô]Um erro inesperado Ocorreu![Ô] & _
Chr(13) & [Ô]Código do Erro : [Ô] & Err.Number & _
Chr(13) & [Ô]Descrição : [Ô] & Err.Description, vbCritical, [Ô]Erro do Sistema[Ô]
Resume ErrorHandlerExit
End If
End Sub
esse exemplo vai te ajudar
On Error GoTo ErrorHandler
Set RS = New ADODB.Recordset
RS.Open [Ô]Select * from CadSubCategorias where idauxiliar=[ô][Ô] & txtCategoria.Text & [Ô][ô]order by descricao[Ô], Conexao, adOpenDynamic, adLockReadOnly
With Me.ListView1
.View = lvwReport
.GridLines = True
.FullRowSelect = True
.ListItems.Clear
.ColumnHeaders.Clear
End With
With Me.ListView1.ColumnHeaders
.Add , , [Ô]Código :[Ô], 1200, lvwColumnLeft
.Add , , [Ô]Categoria :[Ô], 6600, lvwColumnLeft
.Add , , [Ô]Sub-Categoria :[Ô], 6600, lvwColumnLeft
End With
RS.MoveFirst
Do Until RS.EOF
Set lstItem = Me.ListView1.ListItems.Add(, , [Ô][Ô], 3, 3)
lstItem.Text = IIf(IsNull(RS!id), [Ô][Ô], RS!id)
lstItem.SubItems(1) = IIf(IsNull(RS!idauxiliar), [Ô][Ô], RS!idauxiliar)
lstItem.SubItems(2) = IIf(IsNull(RS!descricao), [Ô][Ô], RS!descricao)
RS.MoveNext
Loop
RS.Close
ErrorHandlerExit:
Exit Sub
ErrorHandler:
If Err = 3021 Then
Resume Next
ElseIf Err = 94 Then
Resume Next
ElseIf Err = 3420 Then
Resume Next
Else
MsgBoxGT [Ô]Um erro inesperado Ocorreu![Ô] & _
Chr(13) & [Ô]Código do Erro : [Ô] & Err.Number & _
Chr(13) & [Ô]Descrição : [Ô] & Err.Description, vbCritical, [Ô]Erro do Sistema[Ô]
Resume ErrorHandlerExit
End If
End Sub
esse exemplo vai te ajudar
XXXANGELSXXX, preencher o listview com um select so para a tabela PEDIDOS_PROD eu consegui, queria saber se tem como eu fazer isso usando o seguinte select:
estou começando a usar o JOIN para relacionar tabelas
tenho algumas duvidas sobre esse comando.
ex - tem algum problema se eu tiver campos com nomes iguais em tabelas diferente tipo
pedidos.codped, pedidos_prod.codped, pedidos.codseg, pedidos_prod.codseg, pedidos.codrepre, pedidos_prod.repre
AI EU USO A SIGUINTE SQL
rst.open [Ô]select pedidos.*, pedidos_pro.* from pedidos inner join pedido_pro on pedidos.codseg = pedidos_pro.codseg where pedido.codped = [ô][Ô] xcod [Ô][ô]; [Ô], conexao,...,...
ai quando eu vo resgatar os datos do recordset diz que o campo rst.repre nao existe
SELECT PEDIDOS.PEDIDO, PEDIDOS.DATA, PEDIDOS.SITU , PEDIDOS_CLI.NOME,PEDIDO_CLI.REPRE, PEDIDOS_PROD.*
FROM (PEDIDOS LEFT JOIN PEDIDOS_CLI ON PEDIDOS.CODSEG = PEDIDO_CLI.CODSEG)
LEFT JOIN PEDIDOS_PROD ON PEDIDOS.CODSEG = PEDIDOS_PROD.CODSEG
ORDER BY PEDIDOS.DATA
estou começando a usar o JOIN para relacionar tabelas
tenho algumas duvidas sobre esse comando.
ex - tem algum problema se eu tiver campos com nomes iguais em tabelas diferente tipo
pedidos.codped, pedidos_prod.codped, pedidos.codseg, pedidos_prod.codseg, pedidos.codrepre, pedidos_prod.repre
AI EU USO A SIGUINTE SQL
rst.open [Ô]select pedidos.*, pedidos_pro.* from pedidos inner join pedido_pro on pedidos.codseg = pedidos_pro.codseg where pedido.codped = [ô][Ô] xcod [Ô][ô]; [Ô], conexao,...,...
ai quando eu vo resgatar os datos do recordset diz que o campo rst.repre nao existe
Não tem como. Tem q fazer 2 consultas.
Qto aos campos iguais em tabelas deferentes, é por isso q vc deve usar o nome da tabela + o PONTO + o nome do campo.
Qto aos campos iguais em tabelas deferentes, é por isso q vc deve usar o nome da tabela + o PONTO + o nome do campo.
Tópico encerrado , respostas não são mais permitidas