Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marcinhovaladao

Varias consultas no mesmo campo ao mesmo tempo

Recommended Posts

Bom dia amigos,

estou com o seguinte problema, estou gerando um relatório com report builder,

e para isso estou fazendo a seguinte consulta:

ClientDataSet1.Filter := 'REG = ' + QuotedStr(memo1.Lines.Strings[0]);

faço a consulta a partir da primeira linha de um mesmo, estou usando mesmo por que preciso de vários REGISTROS ao mesmo tempo, como por exemplo se eu tivesse várias cláusulas "or" no sql, tipo:

"select * from 'tabela' where REG = variavel1 or REG = variavel2 or REG = variavel3 ...." e assim por diante quantos o usuários quizer.

Mas ao inves do sql estou usando o filter do clientdataset.... Alguem ja passou por algo parecido?

 

Tudo de bom a todos ae....



pessoal achei um topico parecido aqui, mas o problema nao foi solucionado



http://forum.imasters.com.br/topic/395422-consulta-de-vrios-dados-em-um-unico-campo/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Roberto Fagundes, consegui resolver aqui.... coloquei a clausula in do SQL, foi mais facilo meu mesmo.... tava pensando em tanta coisa completa e uma clusula acabou com meu problema.... Vlw mesmo...
o código ficou assim:

 

SQLDataSet1.Close;
ClientDataSet1.Close;
SQLDataSet1.CommandText := 'select REG, NOME_ACP, NOME_MED, PRONT, DATA_HORA_INCLUSAO from RECADATE WHERE REG in ('+edtConsulta.TEXT+')';
ClientDataSet1.Open;
ai digito em um edit que coloquei no form:
numeroDoRegistroDesejado,numeroDoRegistroDesejado,numeroDoRegistroDesejado,numeroDoRegistroDesejado


[RESOLVIDO]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal estou reabrindo meu post pelo seguinte...
Fiz a consulta com a clausula IN do sql e deu certinho o que eu precisava...

mas os dados no dbgrid sempre sai de ordem crescente, como eu faria para orem sair conforme minha consulta... exemplo:

100,1,5 e assim por diante conforme eu for consultando... tentei o seguinte mais nao deu certo...

 

SQLDataSet1.Close;
ClientDataSet1.Close;
SQLDataSet1.CommandText := 'select * from recadate where reg in ('+edtConsulta.TEXT+') order by '+edtConsulta.TEXT+' ';
ClientDataSet1.Open;
mas caso eu fazer assim ja pre determinado da certo:
//SQLDataSet1.CommandText := 'select * from recadate where reg in (87,3,100) order by 87,3,100';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não há como ordenar a não ser que seja crescente ou decrescente.... o order by apenas indica por quais campos ordenar, não pra por o registro A em primeiro, o C em segundo e o B por terceiro.... só não entendi o porque a ordem de retorno no grid é um problema, visto que as informações estão sendo trazidas para a interface.

 

Se o que quer é apenas trazer ordenando crescente ou decrescente, no order by coloque order by coluna asc ou order by coluna desc, sendo que deve por o asc ou desc na coluna que deseja usar para ordenar o retorno.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pois é Chrnos, vlw pela resposta.

se tivesse um jeito de de ir pesquisando e ir aparecendo no dbgrid na ordem de pesquisa seria otimo.

O cliente recebe uns papeis que ja estao cadastrados no sistema, e ele precisa imprimir conforme a ordem que ele recebe os papeis fisicos entendeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode tentar montar algo assim usando o TStringGrid, mas ai teria que montar o grid de consulta na mão... ou criar um procedimento no banco usando um campo autoincremento e ir inserindo nele os dados, para depois listar ordenando baseado neste índice autoincremental, alimentando a tabela a partir das pesquisas realizadas... modos até tem, mas não será nenhum a partir de um único select com o in, porque ele não trás os dados ordenados pelo in, mas sempre ordenando do maior pro menor ou menor pro maior.... de todo modo, o que impede o cliente de imprimir todos os papéis e depois os ordena-los manualmente, já que eles ao que parecem não seguem uma ordem crescente ou decrescente? Ou ir pesquisando e imprimindo registro a registro?

 

Talvez você possa criar um esquema pra imprimir a partir de uma seleção no dbgrid, mas não tenho nenhum código pronto pra ajudar nisso agora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Chrnos vlw pela resposta mais uma vez, gostei da opção de fazer a consulta e dar um insert em outra tabela, vou seguir esta opção.

A questão do cliente colocar em ordem os papéis ele questionou que vai dar muito trabalho ... não achei tanto trabalho assim, mas fazer o que neh... Vou fazer a opção da inserção no banco amanha no serviço e posto aqui blza.

 

vlw mesmo amigo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você nem precisa criar uma tabela nova no banco de dados pra isso, pode usar o próprio clientdataset e criar uma tabela virtual, que depois você alimenta a partir do seu select no banco.... dê uma lida neste link: http://www.subrotina.com.br/delphi-tabela-temporaria-com-clientdataset-final/ e neste link http://www.clubedainformatica.com.br/site/2003/11/08/tabelas-temporarias-no-delphi-atraves-do-clientdataset/, que podem lhe ajudar neste ponto.

 

 

Qualquer coisa retorne ai!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.