segunda-feira, 22 de junho de 2009

Rave Report - Problema com Filtro de Relatório

Hoje postarei aqui a solução de um pequeno problema que estava me tirando do sério, e pelo que percebi nas minhas buscas pela intenet muitas pessoas tem esse problema.
Fiz um relatório com o rave report com filtro de data, e também de código de produto, fiz o seguinte esquema, coloquei no comando SQL da minha Query, os parâmetros de data inicial e final e o codigo do produto, e no evento click do botão para gerar o relatório eu passo os parâmetros e executo o relatório, a primeira vez que usei esse esquema funcionou certinho, estava feliz da vida, mas quando fui fazer a mesma coisa em outro projeto, mandava gerar o relatório e ele não mostrava nada, depois de muito me descabelar, encontrei outra solução, trazer todas as informações do banco na Query e filtrar no client Data Set, e quando mandava gerar o relatório, nadaaaa, ele mostrava toda a informação do banco, como se o filtro não estive-se funcionando, foi então que enxerguei a luz, era algo tão simples que nem passava pela minha cabeça....o form que eu chamava o relatório estava como AUTO-CREATE....foi só tirar ele dessa opção que as duas maneiras que eu tinha feito funcionaram....=)
então fica ai a dica para quem estiver com o mesmo problema que eu :
VÁ EM - PROJECT -OPTIONS - e tire o form da opção AUTO-CREATE....e pronto, seja feliz

e para quem não sabe fazer o filtro nem passar parâmetros para a query aqui vai:

PASSANDO PARÂMETRO:

qry_relatorio.Close;
cds_relatorio.Close;
qry_relatorio.ParamByName('data_ini').AsDate := StrToDate(MaskEdit1.Text);
qry_relatorio.ParamByName('data_final').AsDate := StrToDate(MaskEdit2.Text);
qry_relatorio.ParamByName('codigo').AsInteger := StrToInt(edit11.Text);
qry_relatorio.ExecSQL();
qry_relatorio.Open;
qry_relatorio.Refresh;
cds_relatorio.Open;

FILTRANDO O CLIENT DATA SET: (AQUI ESTOU FILTRANDO APENAS POR DATA)

cds_fluxo.Close;
cds_fluxo.Filtered := false;
cds_fluxo.Filter := 'data >='+ QuotedStr(Edit1.Text)+'and data <='+ QuotedStr(Edit2.Text);
cds_fluxo.Filtered := true;
cds_fluxo.Open;
cds_fluxo.Refresh;

Espero ter ajudado, um abraço a todos e até a próxima

sexta-feira, 12 de junho de 2009

Usando Opendialog

Usar o Opendialog é uma coisa bem simples, mas se você está começando a programar em Delphi, como eu, certamente terá duvidas, então vou explicar uma utilidade muito boa dele, copiar o caminho de um arquivo para o texto de uma Edit, tendo o caminho do arquivo nessa edit poderemos trabalhar com ele facilmente, no meu caso usei para poder trabalhar com a importação de um arquivo TXT, mãos a obra:

Primeiro crie um projeto novo e monte a tela com os seguintes componente: 1 label, 1 edit, 1 botão e um TOpenDialog, mais ou menos como a figura abaixo:

Depois no evento click do botão coloque o seguinte código:

if OpenDialog1.Execute then begin
edit1.Text := OpenDialog1.FileName;
end
else begin
ShowMessage('Favor selecionar o arquivo !!!')
end;

pronto, o caminho do arquivo irá aparecer na edit, com isso você consegue trabalhar de varias maneiras com o arquivo.
Espero ter ajudado, um abraço a todos e até a próxima.

quarta-feira, 3 de junho de 2009

SQL Server - "não é possivel criar uma nova transação porque a capacidade foi excedida"

Como expliquei anteriormente, quando usamos componentes para conectar o Delphi com algum banco de dados, devemos deixar todos os componentes desconectados e só conecta-los quando for executar alguma transação, isso sempre funcionou comigo usando firebird, mas quando fui usar o delphi com SQL Server, mesmo deixando todos eles desconectados, me deparei com o seguinte erro:

não é possível criar uma nova transação porque a capacidade foi excedida

Fiz de tudo para funcionar e nada, já estava ficando louco quando descobri o seguinte evento do ClientDataSet

BeforeApplyUpdates

Foi o que salvou minha vida (pelo menos até o presente momento), selecionei todos os meus ClientDataSet e nesse evento coloquei o comando:

SQLConnection1.CloseDataSets;

Ou seja, depois que ele efetua qualquer transação com o banco, ele fecha o dataSet, eu tinha feito isso manualmente no fechamento de cada form, mas não foi suficiente, agora com esse evento tudo está funcionando.
Então fica ai a dica pra quem estiver com o mesmo problema.
Até mais;

segunda-feira, 1 de junho de 2009

Relatórios - Rave Report - "como receber uma variável do Delphi"

Se você pretende gerar um relatório com as informações do seu sistema com o Rave Report e está começando a usar agora, certamente vai se deparar com essa dificuldade, "como receber uma variável do Delphi ?" .
Não é nenhum bicho de 7 cabeças, mas se você não ler o que vou postar, dificilmente vai conseguir fazer, se você tem os campos prontos no seu banco de dados, ótimo, é só coloca-los no Rave e usar normalmente, assim como em outros geradores de Relatório (esse passo a passo eu mostro depois), agora se você precisa de um valor que está sendo
calculado na sua aplicação e não está sendo salvo em nenhuma tabela do seu banco, vai ter que usar passagem por parâmetro, olhe o exemplo abaixo e tudo ficará claro pra você:
Imagine que temos uma variável global em nosso sistema, onde é gravada a versão do sistema e nos relatérios voê tem que imprimir o número da versão ou seja temos que imprimir o conteúdo dessa variável que foi declarada lá dentro do projeto Delphi.

O conteúdo dessa variável deve ser passado como parâmetro na hora de imprimir o relatório e o Rave “enxerga” essa variável como se fosse uma variável interna dele.
No Delphi
Crie uma nova aplicação e deixe-a conforme a figura abaixo.


Agora dê um duplo clique no RvProject e o Rave Visual Design será aberto, na guia Report, selecione o componente Region, dimensione ele de forma que ocupe toda a área que será impressa.
No Tree Panel em Report Library e escolha o relatório Report1, após isso clique em Parameters no Object Inspector digite o nome de nosso parâmetro que será Versao
Adicione um Band Component e marque a opção Body Header que esta localizada na opção Band Style.
Adicione um DataText e clique na opção DataField, no Project Parameters selecione o parâmetro que acabamos de criar que foi o versão, após selecionar clique em Insert Parameter
O Resultado final será conforme a figura abaixo.


Salve seu projeto, como Project1 mesmo, agora volte lá no Delphi e no RvProject associe a propriedade ProjectFile ao projeto que acabamos de criar

Adicione o seguinte código no Button.
procedure TForm1.Button1Click(Sender: TObject);
begin

//Seta o Parametro versão com o conteúdo do Label1
RvProject1.SetParam('Versao',Label1.Caption);

//Executa o relatorio
RvProject1.ExecuteReport('Report1');
end;
Agora é só compilar, e testar e nosso resultado final será semelhante a imagem abaixo.
Preview do Rave com o Valor do parâmetro que foi recebido
Pronto, agora pode por a caixola pra funcionar e gerar o relatório que quizer !!!! boa sorte !!!