Página 1 de 1
Ajuda num filtro ADO
Enviado: 15 Jul 2020 15:13
por JoséQuintas
O ADO tem uma coisa chata no filtro: não aceita qualquer coisa
Não pode: ( a or b ) and ( a or c )
Mas aceita ( a and b ) or ( a and c )
Situação:
- O filtro pode ser em vários campos
- O filtro pode conter várias palavras
Então é criar uma expressão com N filtros para N campos, mas só pode usar AND de conjuntos OR
Esse acima não dá.
Talvez inverter a coisa nesse filtro.
Ajuda num filtro ADO
Enviado: 15 Jul 2020 15:23
por JoséQuintas
Ok, seria trocar tudo pra OR.
Só não sei se o atual vai fazer falta.... talvez tenha que deixar os dois.
E tem também a opção de "iniciando com", que eu poderia multiplicar pra todas as palavras....
Vixe.. vai virar um filtro linguição por causa da limitação, se eu conseguir fazer.... rs
Ajuda num filtro ADO
Enviado: 15 Jul 2020 16:12
por JoséQuintas
Talvez
=a =b +c +d e f
quando = procurar no início
quando + considerar ambos num mesmo campo
quando sem nada procurar qualquer
mas tudo junto... um misto... vai ser complicado....
Ajuda num filtro ADO
Enviado: 15 Jul 2020 16:37
por JoséQuintas
acho que seria isto?
( campo1 =a AND +c AND +d ) or ( campo1 =b AND +c AND +d ) or ( campo2 =a AND +c AND +d ) or ( campo2 =b AND +c AND +d ) or ( campo1 e AND +c AND +d) or ( campo2 e AND +c AND +d) or ( campo2 f AND +c AND +d )
Ajuda num filtro ADO
Enviado: 15 Jul 2020 16:40
por JoséQuintas
Ainda falta o "e" e o "f", que precisariam do OR e não pode.
Ajuda num filtro ADO
Enviado: 15 Jul 2020 16:46
por JoséQuintas
Ao utilizar os operadores AND e OR não existe precedência entrer eles e você pode agrupá-los entre parênteses. Ex:("Nome = 'Jose' AND Sobrenome='Silva'" ). O que você não pode fazer é agrupar cláusulas usando OR com grupos de cláusulas usando AND . Assim
(Nome = 'Jose' OR Nome = 'Carlos') AND Sobrenome = 'Silva'
Deverá ser substituida por
(Sobrenome = 'Silva' AND Nome = 'Jose') OR (Sobrenome = 'Silva' AND Nome = 'Silva')
Ajuda num filtro ADO
Enviado: 15 Jul 2020 17:43
por Vlademiro
O ideal nesses casos é salvar a query antes de mandar em um arquivo com hb_memowrit e depois copiar e colar no seu cliente sql.
Ajuda num filtro ADO
Enviado: 15 Jul 2020 17:44
por Vlademiro
Porque o ADO, que eu saiba, é uma ponte. Então não faz sentido dizer que o ADO não aceita. Quem não aceita é o banco
Ajuda num filtro ADO
Enviado: 15 Jul 2020 17:52
por JoséQuintas
Vlademiro escreveu:Porque o ADO, que eu saiba, é uma ponte. Então não faz sentido dizer que o ADO não aceita. Quem não aceita é o banco
Não exatamente.
Considere o ADO como um "DBF" que tem vida própria.
Uma vez trazendo do banco de dados, não precisa nova consulta pra filtrar, isso pode ser feito localmente.
E, com certeza, isso fica extremamente rápido.
Basta considerar que não precisa rede, servidor, nada pra o usuário brincar o quanto quiser com a consulta.
O usuário pode ficar horas pesquisando que não atrapalha ninguém.
Ajuda num filtro ADO
Enviado: 15 Jul 2020 18:00
por Vlademiro
Acho arriscado. Uma estação pode mudar alguma coisa importante e o gerente continua com os valores antigos simulando o orçamento do mês seguinte feliz da vida.
Ajuda num filtro ADO
Enviado: 15 Jul 2020 18:01
por JoséQuintas
Imagine ir filtrando conforme vai digitando.
Pra que ficar consultando servidor a cada tecla?
Ajuda num filtro ADO
Enviado: 15 Jul 2020 18:03
por Vlademiro
Realmente, tem casos que vale a pena. Teria algum exemplo desse código ?
Ajuda num filtro ADO
Enviado: 15 Jul 2020 18:07
por JoséQuintas
Vlademiro escreveu:Acho arriscado. Uma estação pode mudar alguma coisa importante e o gerente continua com os valores antigos simulando o orçamento do mês seguinte feliz da vida.
Geralmente o gerente se baseia no mês anterior, ou dia anterior.
No mesmo caso, como ele vai terminar um planejamento, se os valores podem se alterar durante o planejamento?
Aí sim, ele não vai ficar nada feliz.
oConsulta := Conexao:Execute( "SELECT ..." )
oConsulta:Filter = "valor > 5000 AND nome like '%globo%'"
ou conforme vai digitando
cDigitado += Chr( nkey )
oConsulta:Filter = "NOME LIKE '%" + digitado + '%'"
Nota: editado porque filter é propriedade e não método
Ajuda num filtro ADO
Enviado: 15 Jul 2020 18:17
por JoséQuintas
Detalhe interessante:
o ADO tem algo parecido com RecNo(), que é o bookmark.
Ao aplicar um filtro, fica sequencial.
E pra retirar o filtro: oConsulta:Filter = ""
A parte visível sempre fica com bookmark numerado de 1 até onde der, sem "pular" numeração.
Também pode ser usado pra criar do zero, sem servidor.
Sei lá se dá pra comparar com DBF, Array, SQL, ou tudo junto, com opção de ficar ou não vinculado ao servidor/banco de origem.
Ajuda num filtro ADO
Enviado: 17 Ago 2020 12:43
por JoséQuintas
Surgiu uma necessidade.
No bancário em DBF eu tinha filtro por valor, e agora com a mudança não tenho mais.
Ainda pensando em como acrescentar isso no "bolo".