quinta-feira, 31 de janeiro de 2013

FastRepost - exportando para Excel,XML,CSV e muito mais

Continuando o ultimo post sobre o fast, vamos aprender a habilitar as exportações para diversos formatos que o Fast nos oferece.
vou continuar do nosso ultimo projeto, se vc não viu, basta acessar o post anterior e ver como foi criado.
veja que temos uma paleta no Delphi chamada 'FastReport 4 exports':
cada um desses componentes é responsável por um tipo de exportação, vou colocar no nosso projeto só alguns, os que mais utilizo, mas você pode brincar a vontade:
usei aqui PDF,HTML,XLS,Mail,JPEG,CSV, apenas coloquei os componentes no form, não fiz mais nada, claro que o ideal não seria colocar assim solto no forme, mas sim em um DataModulo, mas não é nosso foco.
feito isso rode o projeto e veja que agora no seu relatório apareceram as exportações para esses formatos que escolhemos:

essa foi fácil ...rsrsrs

espero ter ajudado alguém, e se gostou, clica em um anuncio ai que já me ajuda...rsrs

até a próxima


quarta-feira, 30 de janeiro de 2013

Delphi conectando com SQL Server + Montando relatório com FastReport passo a passo


Nesse post, mostrarei duas coisas simples mas importantes para quem está começando, como conectar seu projeto delphi em um banco de dados SQL Server, e como montar um relatório simples usando FastReport.
estarei usando no exemplo o Delphi 2010, SQL server 2008 express e fastreport 4.0.
inicie um projeto novo no delphi, do tipo VCL Forms, e vamos começar, não usarei data modulo nem entrarei em detalhes sobre melhores tipos de conexões e maneiras de se conectar pois não é o foco de hoje.
vamos adicionar no nosso form 4 componentes e um botão, são eles:
TADOConnection,TADOQuery da palheta ADO
TfrxDBDataSet, TfrxReport da palheta do Fast
seu form ficará mais ou menos assim

Nomeie os componentes conforme seu gosto e vamos ao que interessa, primeiro de 2 cliques no ADOConnection, na primeira tela que vai abrir clique em Build...

na próxima tela no campo 1 coloque o nome da instancia do SQL Server, no campo 2 coloque o nome do usuário e senha e no campo 3 coloque o nome do seu banco de dados

se você fez tudo certinho até aqui, já estamos conectados ao SQL server, agora vamos na propriedade SQL do componente ADOQuery, nela digite o comando sql para trazer as informações do relatório, no meu caso selecionei todos os registros da tabela Cliente "select * from cliente".
Agora na propriedade DataSet do TfrxDBDataSet, selecione o ADOQuery, de dois cliques no TfrxDBDataSet, se aparecerem os campos do seu select é pq deu tudo certo , então vamos em frente.(não esqueça de deixar o ADOConnection conectado, e o ADOQuery ativado )
Agora de dois cliques no TfrxReport  para montarmos nosso relatório e você verá a seguinte tela:
note que na palheta de dados do lado direito não vemos nossos campos, isso pq não selecionamos qual vai ser o dataSet que utilizaremos, para isso vá no menu Relatório - Dados, a janela a seguir será aberta:
a janela vai mostrar todos os TfrxDBDataSet do form, como só temos um, selecionaremos ele, agora na palheta de dados iram aparecer os campos do select.
nosso relatório terá um cabeçalho, o corpo e um rodapé, para isso vamos no menu do lado esquerdo na opção inserir banda

 nela selecionaremos um Titulo de relatório, um Dados Mestre e um rodapé, ao inserir o Dados Mestre, ele vai pedir o DataSet Desejado, selecione nosso único Dataset.
No cabeçalho coloque 3 objetos de texto, onde colocaremos o titulo de cada campo, agora arraste os campos da palheta de dados para dentro do Dados Mestre, e formate do jeito que achar melhor, até ai tranquilo, o fast tem algumas variáveis prontas como Data,Line,Page, vamos usar a page no rodapé para marcar as paginas do relatório.
Olhe a palheta do lado direito onde estão os dados, você verá que tem outras abas nela, selecione a aba variáveis, e arraste a variável Page para dentro do rodapé, se você fez tudo certinho seu relatório ficou mais ou menos assim:
pode salvar e fechar, voltamos ao form, de dois cliques no botão e coloque o seguinte código:
rel1 é o nome que dei para o meu TfrxReport.
pronto, agora é só compilar o projeto, clicar no botão e ver o seu relatório:
em um próximo post mostrarei como habilitar as opções do fast para exportar o relatório para Excel,PDF,HTML, mandar e-mail, e muito mais.

espero ter ajudado alguém, se gostou da uma clicadinha em um anuncio para me dar uma ajudinha..rsrsrs 

terça-feira, 29 de janeiro de 2013

Carregando GRID em tempo de execução X Delphi

Hoje, vamos ver como carregar uma grid em tempo de execução.

No exemplo a seguir eu usei o grid da DevExpress, mas creio que outras grids tem as mesmas propriedades, então basta encontra-las e usar que vai dar certo.
Supondo que temos uma tabela CLIENTE,  com os campos CLI_ID,CLI_ NOME,CLI_ ENDERECO, primeiro passo é montar o SQL dando apelidos aos campos, pois esses apelidos irão aparecer como título da coluna no grid, exemplo:

select CLI_ID as Codigo,CLI_NOME as Nome, CLI_ENDERECO as Endereco from CLIENTE

Até ai tranquilo, nada de novidade, esse comando vai estar em uma query, que podemos criar em tempo de execução , e não podemos esquecer do dataSource, vamos ao código.

//dentro da procedure ou evento, na seção var, criamos as variável que vamos usar.
//aqui estou usando a query do IBO, mas se for usar outra, basta substituir o tipo.
var
qryGrid : TIBOQuery;
dsGrid : TDataSource;

//agora no momento que achar necessário vamos instanciar os objetos , passar o sql, fazer as ligações e //pronto.
//instanciando os objetos

qryGrid := TIBOQuery.Create(Application);
qryGrid. IB_Connection :=  //aqui você passa a sua conexão com o banco de dados
dsGrid := TDataSource.Create(Application);

//agora vamos passar o SQL

qryGrid.close;
qryGrid.sql.clear;
qryGrid.sql.add(' select CLI_ID as Codigo,CLI_NOME as Nome, CLI_ENDERECO as Endereco from CLIENTE');
qryGrid.open;

//agora vamos passar a qry para o dataSource

dsGrid.dataSet := qryGrid;

//agora vamos limpar a grid e passar o dataSource com as informações para ela.

gridDBTableView1.DataController.DataSource         := nil;
gridDBTableView1.ClearItens;
gridDBTableView1.DataController.DataSource := dsGrid;
gridDBTableView1.DataController.CreateAllItens(True);

//com isso já vai dar certo, não esquencendo que a grid que usei no exemplo é a da  DevExpress, mas não //tem segredo, passando o dsGrid para o dataSource da grid já  funciona
//agora se você quiser configurar a largura das colunas, basta acessa-las pelo índice.

gridDBTableView1.Columns[0]. Width := 65;
gridDBTableView1.Columns[1]. Width := 65;
gridDBTableView1.Columns[2]. Width := 65;

pronto, fizemos toda a configuração e os componentes query e dataSource em tempo de execução, assim temos mais controle sobre o código.
espero ter ajudado alguém, e não esqueçam de dar uma clicadinha nos anúncios da página.rsrs

segunda-feira, 28 de janeiro de 2013

Gravar data zerada Delphi X SQL Server (componente dateEdit)


boa tarde a todos,
tive um problema com campo data ( pra variar ) usando um dateEdit, que no meu caso é da DevExpress, no delphi e SQL Server, tive que fazer um pequeno ajuste de emergência , do qual não me orgulho muito, mas até o momento tem me servido, e como não achei nada melhor pra substituir, vou mostrar aqui e espero que ajude alguém.
em uma determinada situação estava precisando gravar um campo do tipo data zerado no banco de dados, mas o valor que vem do dateEdit não preenchido não é aceito no delphi e nem no SQL, ou da algum erro de data invalida ou grava a primeira data valida existente 30/12/1899, então fiz o seguinte procedimento.

o componente sem preencher grava no meu objeto o valor  00/00/0000, então pensei em verificar :

if obj.data = 00/00/0000 then qry.data := null else qry.data := obj.data;

ou seja, se o campo data do meu objeto for 00/00/0000, passo para a qry o valor null, assim não gravo na data daquele registro, se não, eu gravo o valor preenchido.
mas para a minha surpresa o delphi da um erro de ponto flutuante e não funciona, então fiz a seguinte alteração

if datetostr(obj.data) = '00/00/0000' then qry.data := null else qry.data := obj.data;

e assim funcionou certinho, pois se faço a comparação sem a conversão de data para texto, o delphi tb da um erro falando que não posso comparar um objeto data com uma string, então essa foi a maneira que encontrei.
se vc usa algum componente que retorna essa mesma informação, esse metodo pode te ajudar, se sua duvida for só como gravar a data zerada no banco, passe no sql do insert o valor null.
espero ter ajudado alguem
até a proxima, e não esqueçam de dar uma clicadinha em algum anuncio..rsrs