como usar and e or
fico perdido ao usar and e or em query exemplo.
query1.close;
query1.sql.add(´select * from clientes´);
query1.sql.add(´where data = 20070101´);
query1.sql.add(´and cliente = 1´);
query1.sql.add(´or cliente = 1´);
query1.sql.add(´or cliente = 1´);
query1.sql.add(´or cliente = 1´);
query1.open;
assim ela não funciona o resultado fica errado como faço para aninhar os comandos os junto com o and dentro da query seria select * from clientes where data = 20070101 and ((cliente = 1) or (cliente = 2) or (cliente = 3))
query1.close;
query1.sql.add(´select * from clientes´);
query1.sql.add(´where data = 20070101´);
query1.sql.add(´and cliente = 1´);
query1.sql.add(´or cliente = 1´);
query1.sql.add(´or cliente = 1´);
query1.sql.add(´or cliente = 1´);
query1.open;
assim ela não funciona o resultado fica errado como faço para aninhar os comandos os junto com o and dentro da query seria select * from clientes where data = 20070101 and ((cliente = 1) or (cliente = 2) or (cliente = 3))
Cpd_arim
Curtidas 0
Respostas
Ferreia2
14/03/2008
Coloca tudo que for And dentro de um parenteses só e tudo que for or dentro de outro parenteses
GOSTEI 0
Jakefrog
14/03/2008
query1.sql.add(´select * from clientes´);
query1.sql.add(´where data = 20070101´);
query1.sql.add(´and cliente = 1´);
query1.sql.add(´or cliente = 1´);
query1.sql.add(´or cliente = 1´);
query1.sql.add(´or cliente = 1´);
tem que ficar assim
And (()or()or())
Sacou? And () e cada condição separada por ()
Mas nesse caso vc poderia fazer assim:
query1.sql.add(´select * from clientes´);
query1.sql.add(´where data = 20070101´);
query1.sql.add(´and cliente [b]in (1,2,3,4,5,6)´);
Já é? Falou!
query1.sql.add(´where data = 20070101´);
query1.sql.add(´and cliente = 1´);
query1.sql.add(´or cliente = 1´);
query1.sql.add(´or cliente = 1´);
query1.sql.add(´or cliente = 1´);
tem que ficar assim
And (()or()or())
Sacou? And () e cada condição separada por ()
Mas nesse caso vc poderia fazer assim:
query1.sql.add(´select * from clientes´);
query1.sql.add(´where data = 20070101´);
query1.sql.add(´and cliente [b]in (1,2,3,4,5,6)´);
Já é? Falou!
GOSTEI 0
Cpd_arim
14/03/2008
esqueci eh com strings, me atrapalho com as strings
query1.sql.add(´select * from clientes´);
query1.sql.add(´where data = 20070101´);
query1.sql.add(´and cliente = 1´);
query1.sql.add(´or cliente =´ +#39+´01´+39);
query1.sql.add(´or cliente =´ +39+´02´+39);
query1.sql.add(´or cliente =´ +39+´03´+39);
query1.open;
não sei como agrupar o or e assim não funciona.
query1.sql.add(´select * from clientes´);
query1.sql.add(´where data = 20070101´);
query1.sql.add(´and cliente = 1´);
query1.sql.add(´or cliente =´ +#39+´01´+39);
query1.sql.add(´or cliente =´ +39+´02´+39);
query1.sql.add(´or cliente =´ +39+´03´+39);
query1.open;
não sei como agrupar o or e assim não funciona.
GOSTEI 0
Powerlog Tecnologia
14/03/2008
Imagino que vc tenha um while para pegar os clientes, ou apenas uns 4 edits na tela. Então a string de clientes ficaria assim:
A query ficaria assim, substituindo os OR por IN
Espero que ajude
xClientes := edit1.text; if (edit2.text <> ´´) and (xClientes <> ´´) then xClientes := xClientes + ´, ´; xClientes := xClientes + edit2.text; if (edit3.text <> ´´) and (xClientes <> ´´) then xClientes := xClientes + ´, ´ xClientes := xClientes + edit3.text; if (edit4.text <> ´´) and (xClientes <> ´´) then xClientes := xClientes + ´, ´ xClientes := xClientes + edit4.text;
A query ficaria assim, substituindo os OR por IN
query1.sql.text := ´ select * from clientes ´ + ´ where data = :pdata ´ + ´ and cliente in (:pclientes ) ´ ; query1.parambyname(´pdata´).value := date; query1.parambyname(´pclientes´).value := xClientes; query1.open;
Espero que ajude
GOSTEI 0