[firebase-br] RES: RES: RES: where com lista de valores
Carlos Wilson
cwfsa1 em gmail.com
Sáb Jun 5 17:03:51 -03 2010
Zottis, na verdade o que voce tá falando pra eu fazer, já to fazendo só
não tá dando certo devido a quantidade de registros. Mas Obrigado assim
mesmo.
José Aparecido, valeu pela dica da tabela temporária, vou me aprofundar
mais sobre isso.
[ ]'s
Carlos Wilson.
Jose Aparecido da Silva escreveu:
> O problema é que a string a ser passada para o comando sql tem um limite que
> não me recordo qual é.
> Dá uma olhada em CREATE GLOBAL TEMPORARY TABLE.
> Eu já fiz isso e usei uma tabela temporária no FB para isso.
> A tabela tem um único campo que é o identificador da outra tabela
> Eu fiz assim: Populei a tabela temporária com os registros que eu havia
> separado e depois eu fiz o select ou com in ou com left join.
> Ex:
> 1. Select t.ID, c.NOME, c.ENDERECO, etc from TABELATMP t
> Left join CLIENTES c on t.ID = c.ID
>
> 2. select c.ID, c.NOME, c.ENDERECO, etc from CLIENTES c
> Where c.ID in (select t.ID from TABELATMP t where t.ID = c.ID)
>
> Fica aí a dica.
>
> [ ]'s
> Jose Aparecido da Silva
> Fasystem
>
>
> -----Mensagem original-----
> De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
> nome de Zottis
> Enviada em: sábado, 5 de junho de 2010 12:39
> Para: 'FireBase'
> Assunto: [firebase-br] RES: RES: where com lista de valores
>
> Então, você pode Fazer de Duas Formas, como falei anteriormente:
> A primeira, vc Faz um While not......
> No primeiro dataset para varrer o resultado e joga os códigos dos clientes
> em uma varialvel,
> Exemplo:
> Var Codigos; Integer;
>
> Codigos := códigos + QryClienteCodCliente.value + ', ';
> Isso retornará 1,2,3 que você pode passar no segundo dataset dentro da
> cláusula "IN"
>
> Ou fazer um outro dataset para pegar a lista de valores do primeiro
>
> Monta o SQL na parte do where da mesma forma que o primeiro
> Mas na parte do select faz assim:
>
> Select LIST(Clientes.CodCliente, ',') AS CodCliente
>
> Isso te retornará assim:
>
> 1,2,3
>
> Daí vc consegue passar para o próximo Dataset na cláusula "IN"
>
> Espero que ajude, qualquer coisa, segunda feira me Fala.
>
> Até mais, e bom Final de Semana.
>
>
> -----Mensagem original-----
> De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
> nome de Carlos Wilson
> Enviada em: sábado, 5 de junho de 2010 12:07
> Para: FireBase
> Assunto: Re: [firebase-br] RES: where com lista de valores
>
> Obrigado pelo seu comentário mas eu realmente não entendi o que voce
> quis dizer, ou acho que voce não entendeu o que quero.
> exemplo:
> em um dataset depois do usuário ter feitos todas as opções de filtragem
> possivel, resultou em:
> QryCliente
> Codcliente Nome
> ===============================
> 1 Carlos
> 2 Manoel
> 3 Júlia
>
> Aí eu completo a sql do segundo dataset com um laço que vai pegando os
> codigos do 1º dataset:
> o que me resulta em ...where codcliente IN (1,2,3);
>
> Funciona que é uma beleza mas para poucos registros se o primeiro
> dataset me retornar 3000 clientes dá pau.
>
> Pergunto: O firebird possui outro comando para comparação de valores que
> aceite MUITOS valores???
>
> Obrigado.
>
> Carlos Wilson
>
> Zottis escreveu:
>
>> Faz um list com os parametros da primeira tela, ele te retornará o que vc
>> quer,
>> Ou ainda faz um while not na primeira tela e joga em uma variável, antes
>>
> de
>
>> chamar a segunda tela
>> E passa o parâmetro da variavel
>>
>> -----Mensagem original-----
>> De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br]
>>
> Em
>
>> nome de Carlos Wilson
>> Enviada em: sábado, 5 de junho de 2010 09:25
>> Para: FireBase
>> Assunto: Re: [firebase-br] where com lista de valores
>>
>> É tipo assim quero fazer um relatório de venda dos clientes que foram
>> selecionados numa outra tela.
>> QryRelatorio.Close;
>> QryRelatorio.Sql.Clear;
>> QryRelatorio.Sql.Add(SQL);
>> QryRelatorio.SQL.ADD( 'where codcliente in (' );
>> Qryclientes.first;
>> while not QryClientes.EOF do
>> begin
>> QryRelatorio.SQL.ADD( QryClientesCODCLIENTE.AsString + ',' );
>> QryClientes.Next;
>> end;
>> QryRelatorio.Open;
>>
>> para poucos clientes funciona muito bem, mas quando é muitos clientes,
>> aparece uma mensagem "Dinamic SQL Error" devido a limitação do comando IN
>> existe uma alternativa pra isso?
>>
>> Garto.
>>
>> Carlos Wilson.
>>
>> Alysson Azevedo escreveu:
>>
>>
>>> exite o comando "exists"
>>> mas posta aew mais ou menos oque vc precisa...
>>> alguem vai saber te ajudar...
>>> --
>>>
>>> Alysson Gonçalves de Azevedo
>>> (11) 8491-7730
>>>
>>> (\(''^_^ )/)
>>>
>>> "Pobre vive dizendo que não tem nada, mas quando vem a enchente, ele sai
>>> gritando: -Perdi tudo!!!"
>>>
>>>
>>>
>>>
>>> Em 4 de junho de 2010 22:15, Carlos Wilson <cwfsa1 em gmail.com> escreveu:
>>>
>>>
>>>
>>>
>>>> Boa noite,
>>>>
>>>> Estou fazendo um select com base nos valores de outro Dataset. Fiz um
>>>>
>>>>
>> while
>>
>>
>>>> para buscar os valores do dataset e acrescentar uma lista de valores
>>>>
> para
>
>>>> ser usada em conjunto com "where in". porém o comando "in" possui um
>>>>
>>>>
>> limite
>>
>>
>>>> de valores que pode ser passado. existe uma alternativa ao comando in?
>>>>
>>>> Obrigado,
>>>>
>>>> Carlos Wilson
>>>> Delphi+MDO+Firebird 2.1
>>>>
>>>> ______________________________________________
>>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>>
>>>>
>>>>
>>>>
>>> ______________________________________________
>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>>
>>>
>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>
>>
>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>
>>>
>>>
>>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>> http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>> Nenhum vírus encontrado nessa mensagem recebida.
>> Verificado por AVG - www.avgbrasil.com.br
>> Versão: 9.0.829 / Banco de dados de vírus: 271.1.1/2919 - Data de
>> Lançamento: 06/05/10 03:25:00
>>
>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>
> http://www.firebase.com.br/fb/artigo.php?id=1107
>
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>
>>
>>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> Nenhum vírus encontrado nessa mensagem recebida.
> Verificado por AVG - www.avgbrasil.com.br
> Versão: 9.0.829 / Banco de dados de vírus: 271.1.1/2919 - Data de
> Lançamento: 06/05/10 03:25:00
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
Mais detalhes sobre a lista de discussão lista