Ir para conteúdo

POWERED BY:

Arquivado

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

brunoguitarman

ReportBuilder

Recommended Posts

Galera, estou usando o ReportBuilder pra gerar um relatório no Delphi e preciso de ajuda.

 

O esquema é mais ou menos assim: faço algumas consultas SQL e vou passando os campos de meu interesse para um array que é de um tipo de registro que eu montei. Depois de montado, faço algumas manipulações nesse array. Por fim, devo mostrar, no relatório, todos os registros do array, por exemplo:

 

Cod Descrição Valor

1 adfads 50.00

2 rtretfd 20.00

3 pikoirt 30.00

 

Tem como passar para o ReportBuilder dados diretamente de um array? É que estou acostumado a pegar os resultados diretamente das query, pois aí é só colocar lá o campo que quero e pronto. As idéias que eu tive seria de criar uma tabela SQL temporária e passar os dados do array para ela e, depois para o ReportBuilder, ou então passar os dados para um arquivo texto e dele passar para o ReportBuilder, mas antes queria saber se não há maneira de pegar direto, sem precisar fazer toda essa volta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala aew Bruno, beleza???

 

O Que você poderia fazer seria criar esse array dentro de um ClientDataSet de maneira virtual... e então linkar ele com seu Relatório do report Builder.... ai fica fácil....

 

Eu ja fiz isso.... segue abaixo um pequeno exemplo:

 

Inicial coloque o ClientDataSet no Form...

 

Dê dois cliques sobre ele para abrir o Fields Editor... Clique com o Botão Direito e selecione New Field...

 

Crie os campos do seu array com o Tipo de Dados Adequado...

 

Após feito isso com todos os campos.... você precisa criar o DataSet Virtual nesse clientdataset...

 

Segue exemplo que utilizo...

 

CdsLog - ClientDataSet...

cdsLog.Active := False;
	cdsLog.CreateDataSet;
	cdsLog.Active := True;

   cdsLog.FieldByName('Data').AsDateTime := StrToDate(Trim(Aux));
   cdsLog.FieldByName('Hora').AsString := (Trim(copy(linha,12,8)));
   cdsLog.FieldByName('IP').Value := Trim(aux);
   cdsLog.FieldByName('Url').Value := Copy(aux,1,Pos(' ',aux) - 1);

 

Após feito isso, basta ligá-lo ao seu relatório....

 

Flw aew!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deixa eu ver se eu entendi:

 

Coloco o ClientDataSet no meu form e crio os campos Cod(String[20]), Descricao(String[200]) e Valor(Currency).

 

Depois vou precisar de um DataSource para ligá-lo a um DBPipeline do ReportBuilder, certo?

 

Essa parte do teu código:

cdsLog.Active := False;
cdsLog.CreateDataSet;
cdsLog.Active := True;

é para a criação do DataSet virtual, não é?

 

E a outra parte é para passar os dados de variáveis para dentro dele?

 

Agora, se fosse fazer com o que preciso, já que tenho um array de registros, e, por exemplo, tivesse aqueles 3 registros ali que coloquei no primeiro post:

 

Cod Descrição Valor

1 adfads 50.00

2 rtretfd 20.00

3 pikoirt 30.00

 

Como faria para passá-los para o DataSet? Imagino que seja um loop, um for, ou algo do tipo, mas como fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, como diria Jack...

VAMOS POR PARTES....

 

Coloco o ClientDataSet no meu form e crio os campos Cod(String[20]), Descricao(String[200]) e Valor(Currency).

 

Depois vou precisar de um DataSource para ligá-lo a um DBPipeline do ReportBuilder, certo?

R: Certo.. é isso mesmo....

 

Essa parte do teu código:

 

cdsLog.Active := False;

cdsLog.CreateDataSet;

cdsLog.Active := True;

é para a criação do DataSet virtual, não é?

 

 

R: É sim... é para a Criação do DataSet Virtual....

 

E a outra parte é para passar os dados de variáveis para dentro dele?

R: Correto....

 

 

Uai...

 

Você não jogou os valores pro Array???

 

Faz um FOR de 0 a Lenght do Array.....

 

E vai jogando no ClientDataSet...

ClientDataSet.Append;
//Insere Dados...
ClientDataSet.Post;

Compartilhar este post


Link para o post
Compartilhar em outros sites

E não é que funciona mesmo? heheheh

 

Valeu aí!

 

Só mais uma coisa agora:

 

Se toda vez que eu for gerar um relatório eu executar o código

 

ClientDataSet1.Active := False;
		ClientDataSet1.CreateDataSet;
		ClientDataSet1.Active := True;

eu não vou começar a comer muita memória? Tem como eu apagar o dataset a cada vez que eu for fazer uma nova pesquisa? Por que aí eu crio uma vez só e depois eu simplesmente limpo ele e insiro os dados que quero.

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.