DICA PARA ROTINA LENTA

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

DICA PARA ROTINA LENTA

VB / VBA

 Compartilhe  Compartilhe  Compartilhe
#477343 - 23/10/2017 21:35:28

ADILSOO
PRATANIA
Cadast. em:Março/2012


Citação:
  - O que você quer ver no grid


Por exemplo, o usuário realiza os lançamentos, porém, eu só gravo os códigos, Cod_Trator, Cod_Funcionario, Cod_Implemento, Cod_Fazenda.
Existem lançamentos que não possuem trator ou implemento, alguns só trator.
Nesse caso, eu gravo "0" no campo que não tem no lançamento.

Porém, quando eu vou apresentar no grid, eu não posso apresentar códigos para o usuário, e sim, os nomes, que estão no cadastros, OK?

Então eu saio verificando, se estiver valor "0", eu apresento "0", se existir um código, eu pego este código, vou no cadastro, verifico o nome e apresento no grid, essa foi a solução eu eu encontrei, sei que está errada, mas não consegui fazer de outra forma.

Tentei fazer um InnerJoin, mas como disse acima, quando existir um campo com valor "0", ele não apresentará no grid, mas eu preciso que apresente.

Pensei em fazer consultas direto no banco, mas creio que a consulta resultará no mesmo problema, pois campos linkados com valor "0", serão ocultos da mesma.

Não sei se estou sendo claro o bastante.

O importante não é oque você sabe hoje, e sim o quanto você pode evoluir amanhã!
Meu Skype: adilson.skype1


#477344 - 23/10/2017 22:26:32

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


Membro da equipe
Acho que você não entendeu:
O que você quer mostrar?
Como está estrutura da tabela do que você quer mostrar?


_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#477347 - 24/10/2017 07:04:36

CARLINHOS_SONEG
GUARIBA
Cadast. em:Maio/2004


Cara uma vez briguei tanto com o sql e esqueci de um detalhe simples, primeiro use grid.redraw=false, depois faça seu sql usando do while......, e só após ative o grid.redraw e veja se percebe alguma melhora.

If Sei = True then
Repondo
else
nao_respondo
end if

Mas pelo menos não atrapalho!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!



#477348 - 24/10/2017 08:18:15

MARCOSLING
SAO PAULO
Cadast. em:Agosto/2008


Citação:
:
  - O que você quer ver no grid

Por exemplo, o usuário realiza os lançamentos, porém, eu só gravo os códigos, Cod_Trator, Cod_Funcionario, Cod_Implemento, Cod_Fazenda.
Existem lançamentos que não possuem trator ou implemento, alguns só trator.
Nesse caso, eu gravo "0" no campo que não tem no lançamento.

Porém, quando eu vou apresentar no grid, eu não posso apresentar códigos para o usuário, e sim, os nomes, que estão no cadastros, OK?

Então eu saio verificando, se estiver valor "0", eu apresento "0", se existir um código, eu pego este código, vou no cadastro, verifico o nome e apresento no grid, essa foi a solução eu eu encontrei, sei que está errada, mas não consegui fazer de outra forma.

Tentei fazer um InnerJoin, mas como disse acima, quando existir um campo com valor "0", ele não apresentará no grid, mas eu preciso que apresente.

Pensei em fazer consultas direto no banco, mas creio que a consulta resultará no mesmo problema, pois campos linkados com valor "0", serão ocultos da mesma.

Não sei se estou sendo claro o bastante.


Mas vc está gravando no banco o valor zero quando um campo não tem valor?

Ao invés se usar inner join, use left/right join



#477349 - 24/10/2017 09:18:15

ADILSOO
PRATANIA
Cadast. em:Março/2012


Citação:
  Mas vc está gravando no banco o valor zero quando um campo não tem valor?


Sim, estou, não tentei gravar null, não sei qual seria o resultado nesse caso.

Citação:
  use left/right join

Não conhecia esse comando, seria o mesmo princípio?
Por exemplo, eu preciso que mesmo que o campo Cod_Trator esteja zerado, ele apareça no grid.
Nesse caso mesmo assim irá funcionar?

O importante não é oque você sabe hoje, e sim o quanto você pode evoluir amanhã!
Meu Skype: adilson.skype1


#477350 - 24/10/2017 09:54:30

ADILSOO
PRATANIA
Cadast. em:Março/2012


E com uma GRANDE ajuda de todos, toda aquela rotina, lenta, se transformou em apenas no código abaixo, demorava uns 10 segundos pra preencher todo o grid, agora, é instantâneo, mesmo com a quantidade de registros.

Muito obrigado mesmo a todos que ajudaram, um ótimo dia a todos!

'Adiciona Apontamentos realizados
sSQL = "SELECT * FROM tabaptrator LEFT JOIN tabcadimplemento ON tabcadimplemento.codimplemento = tabaptrator.codimp LEFT JOIN tabcadtrator ON tabcadtrator.codtrator = tabaptrator.codtrator INNER JOIN tabcadfuncionario ON tabcadfuncionario.codfuncionario = tabaptrator.codfunc INNER JOIN tabcadfaz ON tabcadfaz.codfaz = tabaptrator.codfaz ORDER BY data DESC"
Set rs = Conexao.Execute(sSQL)

gridlancamentos.Redraw = False
Do While Not rs.EOF = True
    gridlancamentos.AddItem "" _
    & vbTab & rs!codaptrator _
    & vbTab & rs!Data _
    & vbTab & rs!nomefaz _
    & vbTab & rs!nomefuncionario _
    & vbTab & rs!codfrota _
    & vbTab & rs!codfrota
    rs.MoveNext
Loop
gridlancamentos.Redraw = True


O importante não é oque você sabe hoje, e sim o quanto você pode evoluir amanhã!
Meu Skype: adilson.skype1


#477351 - 24/10/2017 10:06:33

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


Membro da equipe
O importante aqui é entender o que você fez. Analise bem aquela query e entenda o que ela faz.

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#477354 - 24/10/2017 10:51:49

ADILSOO
PRATANIA
Cadast. em:Março/2012


Pelo que li o left pega os dados da tabela da esquerda mesmo se não corresponder a direita. Right é o contrário e inner somente se corresponder.

Seria isso?

O importante não é oque você sabe hoje, e sim o quanto você pode evoluir amanhã!
Meu Skype: adilson.skype1


#477360 - 24/10/2017 11:55:06

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


Membro da equipe
Você está falando de produto cartesiano, um assunto deveras complexo em muitos casos.

Imagine que você tem essas tabelas:
Cliente: Id, Nome
Vendas: Id, IdCliente, Valor

E os dados:
Cliente:
1 - João
2 - Pedro
3 - Maria
4 - Antonio

Vendas:
1 - 1 - 10
2 - 1 - 25
3 - 4 - 16
4 - 3 - 1
5 - 3 - 9
6 - 3 - 17
7 - 6 - 29

Como exercício mental, tente imaginar como ficariam as seguintes combinações:
Clientes que possuem vendas
Clientes que não possuem vendas
Clientes com vendas mais alta que 10
Vendas cujo cliente não existe(tecnicamente uma inconsistência de chave estrangeira, que é o seu caso)
Enfim, tente imaginar todas as possibilidades de combinações.

O que estou tentando fazer com você é "abstrair" seu pensamento voltado à código. Fazer você entender o que está fazendo ao invés de ficar tão focado em código, que é contraproducente.

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


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


Para responder este tópico o login é requerido
Se você já possui uma conta de usuário por favor faça seu login
Se você não possui uma conta de usuário use a opção Criar usuário