Mostrando postagens com marcador Delphi/SqlServer. Mostrar todas as postagens
Mostrando postagens com marcador Delphi/SqlServer. Mostrar todas as postagens

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



quinta-feira, 13 de dezembro de 2012

Pedido de confirmação de e-mail Delphi + Synapse ( TMimemess)

Boa tarde pessoal,
depois de muitos anos sem postar nada, aqui estou eu de volta, estive ocupado mas agora pretendo voltar com novos assuntos.
essa semana penei para resolver um problema de um código que peguei para dar manutenção em Delphi, o código era para enviar e-mail usando a classe TMimemess do Synapse, a função estava pronta e funcionando certinho, mas  tive que incluir um pedido de confirmação de leitura do e-mail, como tive dificuldade de encontrar a solução no google, já que a maioria dos exemplos não usava essa classe, juntei as informações que achei na net com uma função de um componente chamado ACBR, que usamos aqui para geração de NFe e funcionou.
então vamos lá, espero que ajude alguém..rs

depois de criada a instancia da classe TMimemess

m := TMimemess.create;

 podemos adicionar algumas características nele como, arquivos anexos no e-mail,cabeçalhos,o email de quem esta enviando, assunto, etc:

m.AddPartBinary(TStream,String,TMimePart) // Adicionando anexos
 
m.header.tolist.add(String) // Adicionando Cabeçalhos

m.header.From // email de quem está enviando

m.header.subject // Assunto

e muitas outras conforme sua necessidade, no nosso caso queremos pedir confirmação de leitura, vamos usar um cabeçalho personalizado, com esses cabeçalhos podemos agregar varias funcionalidades pré definidas, a nossa é uma chamada Disposition-Notification-To, que fica da seguinte maneira.



m.Header.CustomHeaders.Add('Disposition-Notification-To: '+email);

onde está a variável email coloque o e-mail que vai receber a confirmação.
depois de preencher todas as informações para sua necessidade, basta usar a  procedure EncodeMessage

m.EncodeMessage;

depois disso, pode continuar o envio do e-mail e vc recebera sua confirmação de leitura.

por hoje é só...caso alguém tenha mais alguma duvida referente esse assunto basta pedir nos comentários que eu explico melhor.

um abraço a todos que lerem, e até mais  


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;