PROBLEMA COM O UNION
então uso a SQL assim:
Call Abrir_BancodeDados
SQL = [Ô]SELECT PARCELAS.Hora AS HORA_PARC, PARCELAS.CODIGO AS CAMPOcp, PEDIDOS.COD_PEDIDO AS CAMPO00, Cliente.NOME AS CAMPO01, PARCELAS.FORMA_PGTO AS CAMPO0x, PARCELAS.VALOR_FINAL AS CAMPO02, [ô]0[ô] AS CAMPO03, (CCUR(CAMPO02)-CCUR(CAMPO03)) AS CAMPO04, PEDIDOS.TIPO_CARTAO AS CAMPOTP, PEDIDOS.TIPO_CARTAO as CAMPOTC, PARCELAS.PAGAMENTO, PEDIDOS.Cod_Pedido, PEDIDOS.COD_CLIENTE, Cliente.CODIGO FROM CLIENTE INNER JOIN (PARCELAS INNER JOIN PEDIDOS ON PARCELAS.COD_PEDIDO = PEDIDOS.COD_PEDIDO) ON CLIENTE.CODIGO = PEDIDOS.COD_CLIENTE WHERE PARCELAS.STATUS = true and PARCELAS.PAGAMENTO = #[Ô] & Format(mskData, [Ô]mm/dd/yyyy[Ô]) & [Ô]# [Ô] & ORIGEM_CAIXA & [Ô] ORDER BY HORA [Ô] & _
[Ô] UNION [Ô] & _
[Ô]SELECT HORA AS HORA_PARC, [ô][ô] AS CAMPOcp, [ô][ô] AS CAMPO00, DESCRICAO AS CAMPO01, [ô]SUPRIMENTO[ô] AS CAMPO0x, VALOR AS CAMPO02, [ô]0[ô] AS CAMPO03, (CCUR(CAMPO02)-CCUR(CAMPO03)) AS CAMPO04, [ô]0[ô] AS CAMPOTP, [ô]0[ô] as CAMPOTC, COD_HAVER, SETOR, DATA, CODIGO FROM CAIXA_ENTRADA WHERE DATA = #[Ô] & Format(mskData, [Ô]mm/dd/yyyy[Ô]) & [Ô]# [Ô] & _
[Ô] UNION [Ô] & _
[Ô]SELECT CAIXA_SAIDA.HORA AS HORA_PARC, [ô][ô] AS CAMPOcp, [ô][ô] AS CAMPO00, CAIXA_SAIDA.DESCRICAO AS CAMPO01, [ô]SAÃDA[ô] AS CAMPO0x, [ô]0[ô] AS CAMPO02, CAIXA_SAIDA.VALOR AS CAMPO03, (CCUR(CAMPO02)-CCUR(CAMPO03)) AS CAMPO04, [ô]0[ô] AS CAMPOTP, COD_HAVER, SETOR, DATA, CODIGO, [ô]0[ô] as CAMPOTC FROM CAIXA_SAIDA WHERE DATA = #[Ô] & Format(mskData, [Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô]
Set RS = BD.OpenRecordset(SQL)
meu problema é que antes está funcionando normal... devo ter modificado alguma coisa ao qual nao me lembro que a consulta tá me mostrando somente 1 registro de cada cliente.
ou seja, seu um cliente tiver 5 parcelas com as condições do where ai... ele só me mostra a ultima... ou seja... de 5 ele me mostra só 1.
se eu tirar o UNIION e deixar somente a primeira SQL ele me mostra normal... ou seja os 5 registros
SQL = [Ô]SELECT PARCELAS.Hora AS HORA_PARC, PARCELAS.CODIGO AS CAMPOcp, PEDIDOS.COD_PEDIDO AS CAMPO00, Cliente.NOME AS CAMPO01, PARCELAS.FORMA_PGTO AS CAMPO0x, PARCELAS.VALOR_FINAL AS CAMPO02, [ô]0[ô] AS CAMPO03, (CCUR(CAMPO02)-CCUR(CAMPO03)) AS CAMPO04, PEDIDOS.TIPO_CARTAO AS CAMPOTP, PEDIDOS.TIPO_CARTAO as CAMPOTC, PARCELAS.PAGAMENTO, PEDIDOS.Cod_Pedido, PEDIDOS.COD_CLIENTE, Cliente.CODIGO FROM CLIENTE INNER JOIN (PARCELAS INNER JOIN PEDIDOS ON PARCELAS.COD_PEDIDO = PEDIDOS.COD_PEDIDO) ON CLIENTE.CODIGO = PEDIDOS.COD_CLIENTE WHERE PARCELAS.STATUS = true and PARCELAS.PAGAMENTO = #[Ô] & Format(mskData, [Ô]mm/dd/yyyy[Ô]) & [Ô]# [Ô] & ORIGEM_CAIXA & [Ô] ORDER BY HORA
a quantidade de campos nas 3 SQL são iguais
já olhei no banco de dados e vi que os registros estão com as mesmas condições
o q poderá ser?
olha o codigo na integra
Public Sub cmdMostrar_Click()
If Not IsDate(mskData) Then Exit Sub
Dim ORIGEM_CAIXA As String
If StatusBar1.Panels(2).Text <> [Ô]TODOS[Ô] Then
ORIGEM_CAIXA = [Ô]AND PEDIDOS.MAQUINA = [ô][Ô] & StatusBar1.Panels(2).Text & [Ô][ô][Ô]
ElseIf StatusBar1.Panels(2).Text = [Ô]TODOS[Ô] Then
ORIGEM_CAIXA = [Ô]AND PEDIDOS.MAQUINA <> [ô]CAIXA[ô][Ô]
End If
[ô]MOSTRAR As ENTRADAS
<aqui vem essa parte de coloquei ai a cima>
FormatarGridEntrada
End Sub
em algum lugar deve estar assim
sql = [Ô]select ......[Ô]
set rs = con.open(sql)
Do while Not rs.Eof
grid que usa
rs.Movenext
Loop
da forma acima vai inserindo os registros
agora se for assim
sql = [Ô]select ......[Ô]
set rs = con.open(sql)
if not rs.eof and rs.bof then
grid que usa
End if
só vai mostrar o uçltimo registro
A = {1,2,3}
B = {2,4,6}
A U B = {1,2,3,4,6}
Se A e B fossem tabelas e cada elemento um registro, os selects nelas com Union trouxessem somente o elemento 2 uma vez. No inÃcio dos selects, coloque um diferenciador como campo injetado assim:
SELECT [ô]1[ô] as Identificador, PARCELAS.Hora ...
SELECT [ô]2[ô] , PARCELAS.Hora ...
SELECT [ô]3[ô] , PARCELAS.Hora ...
Veja se isso resolve
Colocando os parenteses.
Citação::
Wieber é assim
em algum lugar deve estar assim
sql = [Ô]select ......[Ô]
set rs = con.open(sql)
Do while Not rs.Eof
grid que usa
rs.Movenext
Loop
da forma acima vai inserindo os registros
agora se for assim
sql = [Ô]select ......[Ô]
set rs = con.open(sql)
if not rs.eof and rs.bof then
grid que usa
End if
só vai mostrar o uçltimo registro
Marcelo... entendi...
Entao esse loop fica na rotina FormatarGridParcelas
ele é assim
Do Until RS.EOF
If Not IsNull(RS!HORA_PARC) Then .TextMatrix(.Rows - 1, 1) = Format(RS!HORA_PARC, [Ô]hh:mm[Ô])
If Not IsNull(RS!CAMPO00) Then .TextMatrix(.Rows - 1, 2) = Format(RS!CAMPO00, [Ô]000000[Ô])
If Not IsNull(RS!CAMPO01) Then .TextMatrix(.Rows - 1, 3) = RS!CAMPO01
RS.MoveNext
.Rows = .Rows + 1
Loop
Citação::
Como o LLAIA disse na união de tabelas é mostrada os registros apenas uma vez os dados duplicados são removidos. Para unir todos sem remover os duplicados você dever usar UNION ALL.
substituir o UNION por UNION ALL e continuou da mesma forma
Citação::
o que deve está acontecendo é que os registros são totalmente iguais mesmo vindo de tabelas diferentes, e em união de conjuntos apenas mostramos um único elemento, mesmo ele existindo em A e B. Por exemplo:
A = {1,2,3}
B = {2,4,6}
A U B = {1,2,3,4,6}
Se A e B fossem tabelas e cada elemento um registro, os selects nelas com Union trouxessem somente o elemento 2 uma vez. No inÃcio dos selects, coloque um diferenciador como campo injetado assim:SELECT [ô]1[ô] as Identificador, PARCELAS.Hora ...
SELECT [ô]2[ô] , PARCELAS.Hora ...
SELECT [ô]3[ô] , PARCELAS.Hora ...
Veja se isso resolve
mas se eu identificar o primeiro campo da primeira select... na hora de prencher o grid... como farei para reconhecer ele e os outros campos de devem ficar na mesma coluna?