Clipper On Line • Ver Tópico - Ajuda num filtro ADO

Ajuda num filtro ADO

Discussão sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

 

Ajuda num filtro ADO

Mensagempor JoséQuintas » 15 Jul 2020 15:13

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

filtroado.png


Esse acima não dá.
Talvez inverter a coisa nesse filtro.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Ajuda num filtro ADO

Mensagempor JoséQuintas » 15 Jul 2020 15:23

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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Ajuda num filtro ADO

Mensagempor JoséQuintas » 15 Jul 2020 16:12

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....
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Ajuda num filtro ADO

Mensagempor JoséQuintas » 15 Jul 2020 16:37

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 )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Ajuda num filtro ADO

Mensagempor JoséQuintas » 15 Jul 2020 16:40

Ainda falta o "e" e o "f", que precisariam do OR e não pode.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Ajuda num filtro ADO

Mensagempor JoséQuintas » 15 Jul 2020 16:46

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')
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Ajuda num filtro ADO

Mensagempor Vlademiro » 15 Jul 2020 17:43

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.
Avatar de usuário

Vlademiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 749
Data de registro: 11 Jul 2005 02:46
Curtiu: 22 vezes
Mens.Curtidas: 62 vezes

Ajuda num filtro ADO

Mensagempor Vlademiro » 15 Jul 2020 17:44

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
Avatar de usuário

Vlademiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 749
Data de registro: 11 Jul 2005 02:46
Curtiu: 22 vezes
Mens.Curtidas: 62 vezes

Ajuda num filtro ADO

Mensagempor JoséQuintas » 15 Jul 2020 17:52

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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Ajuda num filtro ADO

Mensagempor Vlademiro » 15 Jul 2020 18:00

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.
Avatar de usuário

Vlademiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 749
Data de registro: 11 Jul 2005 02:46
Curtiu: 22 vezes
Mens.Curtidas: 62 vezes

Ajuda num filtro ADO

Mensagempor JoséQuintas » 15 Jul 2020 18:01

Imagine ir filtrando conforme vai digitando.
Pra que ficar consultando servidor a cada tecla?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Ajuda num filtro ADO

Mensagempor Vlademiro » 15 Jul 2020 18:03

Realmente, tem casos que vale a pena. Teria algum exemplo desse código ?
Avatar de usuário

Vlademiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 749
Data de registro: 11 Jul 2005 02:46
Curtiu: 22 vezes
Mens.Curtidas: 62 vezes

Ajuda num filtro ADO

Mensagempor JoséQuintas » 15 Jul 2020 18:07

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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Ajuda num filtro ADO

Mensagempor JoséQuintas » 15 Jul 2020 18:17

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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Ajuda num filtro ADO

Mensagempor JoséQuintas » 17 Ago 2020 12:43

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".
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para Banco de Dados

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 7 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro