COMO FAZER UM WHERE COM VRIOS CRITRIOS

 Tópico anterior Próximo tópico Novo tópico

COMO FAZER UM WHERE COM VRIOS CRITRIOS

VB / VBA

 Compartilhe  Compartilhe  Compartilhe
#493160 - 20/03/2020 19:22:30

ADILSOO
PRATANIA
Cadast. em:Março/2012


Ol pessoal boa noite,
Estou tentando fazer uma forma pra facilitar meu trabalho, tenho que somar os valores de uma tabela, porm, somente em determinados estoques, exemplo:

A pessoa vai adicionando os estoques que caem em um grid, esse grid, eu pego os cdigos que foram adicionados, fao um for no grid, e a cada vez que passa eu fao uma soma, e vou adicionando, isso at funciona, porm, dependendo da quantidade de estoques selecionados, est demorando. Pois eu penso que teria uma forma de eu fazer assim: WHERE codestoque = 1 and 2 and 3 and 4. Pronto, eu somaria de todos, porm, no sei como poderia fazer isso, sem passar um por um. Alguma dica?

Vou postar o cdigo para os senhores analisarem.

[]Aqui eu fao um Group By para saber quais produtos eu tenho nesse periodo informado
sSQL = []SELECT * FROM tabmovestoqueitens INNER JOIN tabcadmaterial ON tabmovestoqueitens.codprod = tabcadmaterial.codmaterial INNER JOIN tabmovestoque ON tabmovestoqueitens.codmov = tabmovestoque.codmov WHERE datamov >= [][] & Format(txtdataini.Text, []yyyy/mm/dd[]) & [][] and datamov <= [][] & Format(txtdatafim.Text, []yyyy/mm/dd[]) & [][] and apto = []NAO[] and tabmovestoqueitens.tipomov = []ENT[] GROUP BY tabmovestoqueitens.codprod[]
Set rs = Conexao.Execute(sSQL)

barra = 0
barra.Max = rs.RecordCount

Do While Not rs.EOF = True
    I = 0
    With gridestoques
        barra2 = 0
        barra2.Max = .Rows - 1
        For I = 1 To .Rows - 1
            []Sadas
            sSQL = []SELECT SUM(qtdeprod) as xQtdeSai FROM tabmovestoqueitens INNER JOIN tabmovestoque ON tabmovestoqueitens.codmov = tabmovestoque.codmov WHERE datamov >= [][] & Format(txtdataini.Text, []yyyy/mm/dd[]) & [][] and datamov <= [][] & Format(txtdatafim.Text, []yyyy/mm/dd[]) & [][] and apto = []NAO[] and tabmovestoqueitens.tipomov = []SAI[] and codprod = [][] & rs!codprod & [][] and tabmovestoqueitens.codestoque = [][] & gridestoques.TextMatrix(I, 1) & [][][]
            Set rs1 = Conexao.Execute(sSQL)
            
            []Entradas
            sSQL = []SELECT SUM(qtdeprod) as xQtdeEnt, SUM(vtotalprod) as vTotal FROM tabmovestoqueitens INNER JOIN tabmovestoque ON tabmovestoqueitens.codmov = tabmovestoque.codmov WHERE datamov >= [][] & Format(txtdataini.Text, []yyyy/mm/dd[]) & [][] and datamov <= [][] & Format(txtdatafim.Text, []yyyy/mm/dd[]) & [][] and apto = []NAO[] and tabmovestoqueitens.tipomov = []ENT[] and codprod = [][] & rs!codprod & [][] and tabmovestoqueitens.codestoque = [][] & gridestoques.TextMatrix(I, 1) & [][][]
            Set rs2 = Conexao.Execute(sSQL)            
            barra2 = barra2 + 1
        Next I
    End With
    gridmovprod.AddItem [][] & vbTab & Format(rs!codprod, []00000[]) _
    & vbTab & rs!nomematerial & vbTab & rs!unid _
    & vbTab & xTotalEnt & vbTab & (xTotalSai * -1) _
    & vbTab & [][] & vbTab & rs2!vTotal
    rs.MoveNext
    barra = barra + 1
Loop


Abraos!

Faa parte do grupo de VB6 no WhatsApp: CLIQUE AQUI PARA ACESSAR O GRUPO

#493168 - 21/03/2020 08:25:27

SINCLAIR
CRICIUMA
Cadast. em:Janeiro/2001


Última edição em 21/03/2020 08:26:47 por SINCLAIR

Bom dia, Colega!

No sei qual o banco de dados que voc utiliza, mas no PostGreSQL (meu preferido) usou assim:

SELECT (campos que desejo) from (nome da tabela) where (codigo_produto in (1,5,7,19,25,27))


Ou mesmo uma soma, como por exemplo:

SELECT sum(saldo) as total_no_estoque from (nome da tabela) where (codigo_produto in (1,5,7,19,25,27))




Euzbio Cruz
Cricima - SC


#493290 - 31/03/2020 11:22:12

ADILSOO
PRATANIA
Cadast. em:Março/2012


Sim, eu entendo, porm eu no tenho isso fixo, eu preciso fazer um loop nos estoques selecionados, depois aplicar a string.
Se eu soubesse que os 1, 2, 3, 4 e 5, eu j colocaria, a dvida como fazer isso em modo de execuo.

Pois ele pode selecionar 1, 2 ou 3 ou 10. Como ficaria o WHERE nesse caso?

Faa parte do grupo de VB6 no WhatsApp: CLIQUE AQUI PARA ACESSAR O GRUPO

Resposta escolhida #493291 - 31/03/2020 14:44:34

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Voc tem uma lista de id[]s que voc quer somar, selecionadas pelo usurio, certo? Pois bem, a clusula IN vai atender perfeitamente.

select bla bla
where id in (sua_lista_de_id)



_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#493292 - 31/03/2020 14:59:25

SINCLAIR
CRICIUMA
Cadast. em:Janeiro/2001


Última edição em 31/03/2020 14:59:51 por SINCLAIR

Colega,

Pelo que entendi, sua necessidade formar a lista de IDs dos produtos selecionados no Grid.

Bem, percorra o Grid da primeira at a ltima linha e, caso a linha esteja marcada, adicione o ID em uma varivel acumuladora, o que formar uma lista de IDs a colocar na clusula Where.


Euzbio Cruz
Cricima - SC


#493310 - 02/04/2020 06:47:21

ADILSOO
PRATANIA
Cadast. em:Março/2012


Citação:
  Voc tem uma lista de id[]s que voc quer somar, selecionadas pelo usurio, certo?

Isso mesmo

Citação:
  Pois bem, a clusula IN vai atender perfeitamente

Certo, no entendi como eu capturo essa lista, no caso agora eu percorro o grid com o for, e cada vez que passa em um cdigo eu fao a SQL, que no caso o que est ficando lento, eu no entendi como aplicar isso na SQL, vou postar uma parte dela, no ponto da dvida.

  tabmovestoqueitens.codestoque = [][] & gridestoques.TextMatrix(I, 1) & [][][]

Nesse ponto, caso eu referencio o []I[] que a linha, porm, como fao pra passar? Tem que ser um por um? Ou tenho que somar em uma varivel, se sim, que tipo de varivel devo usar?

Faa parte do grupo de VB6 no WhatsApp: CLIQUE AQUI PARA ACESSAR O GRUPO

#493311 - 02/04/2020 09:00:11

FABRICIOWEB
BELO HORIZONTE
Cadast. em:Novembro/2011


Citação:
:
  Voc tem uma lista de id[]s que voc quer somar, selecionadas pelo usurio, certo?
Isso mesmo

  Pois bem, a clusula IN vai atender perfeitamente
Certo, no entendi como eu capturo essa lista, no caso agora eu percorro o grid com o for, e cada vez que passa em um cdigo eu fao a SQL, que no caso o que est ficando lento, eu no entendi como aplicar isso na SQL, vou postar uma parte dela, no ponto da dvida.

  tabmovestoqueitens.codestoque = [][] & gridestoques.TextMatrix(I, 1) & [][][]

Nesse ponto, caso eu referencio o []I[] que a linha, porm, como fao pra passar? Tem que ser um por um? Ou tenho que somar em uma varivel, se sim, que tipo de varivel devo usar?


acho que vc poderia criar uma lista fazendo for e mandando a list para uma variavel e so depois chamar sua consulta com a variavel id acho que nao ficaria lento nao



#493320 - 02/04/2020 13:55:04

ADILSOO
PRATANIA
Cadast. em:Março/2012


Citação:
  mandando a list para uma variavel

Qual tipo de varivel que armazena lista?

Faa parte do grupo de VB6 no WhatsApp: CLIQUE AQUI PARA ACESSAR O GRUPO

#493322 - 02/04/2020 14:21:39

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Citação:
:
  mandando a list para uma variavel
Qual tipo de varivel que armazena lista?

Uma simples string, com cada parmetro separado por vrgula.

Dica: perca esse raciocnio de []percorrer o grid[]. Entenda que o grid simplesmente uma representao de dados, uma simples exibio. Os dados que esto visveis devem estar em alguma varivel.

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#493324 - 02/04/2020 14:56:08

ADILSOO
PRATANIA
Cadast. em:Março/2012


Perfeito, eu fiz uma varivel que eu preencho e eu formatei de forma a colocar no WHERE e ficou assim: 2, 1, 3, 4, 5, 6

Ficou uma SQL bem grande, mas funcionou perfeitamente...
  sSQL = []SELECT SUM(qtdeprod) as xQtdeSai, SUM(vtotalprod) as vTotalSai, SUM(qtdeprod) as xQtdeEnt, SUM(vtotalprod) as vTotalEnt, codprod, unid, nomematerial FROM tabmovestoqueitens INNER JOIN tabcadmaterial ON tabmovestoqueitens.codprod = tabcadmaterial.codmaterial INNER JOIN tabmovestoque ON tabmovestoqueitens.codmov = tabmovestoque.codmov WHERE datamov >= [][] & Format(txtdataini.Text, []yyyy/mm/dd[]) & [][] and datamov <= [][] & Format(txtdatafim.Text, []yyyy/mm/dd[]) & [][] and apto = []NAO[] and tabmovestoqueitens.codestoque = [][] & xEstoques & [][] GROUP BY tabmovestoqueitens.codprod[]


Agora, KERPLUNK, voc disse   perca esse raciocnio de []percorrer o grid[] , porm, nesse meu caso pra preencher a varivel eu tenho que percorrer n? J que preciso saber quais itens eu adicionei.

Faa parte do grupo de VB6 no WhatsApp: CLIQUE AQUI PARA ACESSAR O GRUPO

#493325 - 02/04/2020 15:21:28

FABRICIOWEB
BELO HORIZONTE
Cadast. em:Novembro/2011


Citação:
:
Perfeito, eu fiz uma varivel que eu preencho e eu formatei de forma a colocar no WHERE e ficou assim: 2, 1, 3, 4, 5, 6

Ficou uma SQL bem grande, mas funcionou perfeitamente...
  sSQL = []SELECT SUM(qtdeprod) as xQtdeSai, SUM(vtotalprod) as vTotalSai, SUM(qtdeprod) as xQtdeEnt, SUM(vtotalprod) as vTotalEnt, codprod, unid, nomematerial FROM tabmovestoqueitens INNER JOIN tabcadmaterial ON tabmovestoqueitens.codprod = tabcadmaterial.codmaterial INNER JOIN tabmovestoque ON tabmovestoqueitens.codmov = tabmovestoque.codmov WHERE datamov >= [][] & Format(txtdataini.Text, []yyyy/mm/dd[]) & [][] and datamov <= [][] & Format(txtdatafim.Text, []yyyy/mm/dd[]) & [][] and apto = []NAO[] and tabmovestoqueitens.codestoque = [][] & xEstoques & [][] GROUP BY tabmovestoqueitens.codprod[]


Agora, KERPLUNK, voc disse   perca esse raciocnio de []percorrer o grid[] , porm, nesse meu caso pra preencher a varivel eu tenho que percorrer n? J que preciso saber quais itens eu adicionei.

sim



 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por ADILSOO em 05/04/2020 17:29:58