Mostrando postagens com marcador DELPHI. Mostrar todas as postagens
Mostrando postagens com marcador DELPHI. Mostrar todas as postagens

Aulas de Computação Grátis

Essa semana o Ilvo me passou uma dica muito interessante:

Para quem não compreendeu 100% algum conteúdo ou quem queira estudar novamente o conteúdo da faculdade, segue um link muito interessante.

Obs: Envio esse pois achei a estrutura de ensino muito bem elaborada.

http://www.compcederj.com.br/aulas/

É isso ai, todo o conteúdo da faculdade em vídeo e de graça, bom proveito.

Criação de um Sistema para Controle de Viagens no Delphi com Firebird Parte II

Olá pessoal, este tutorial é bem antigo e estava perdido aqui nos meus Rascunhos, acho que não tinha terminado ele, era pra ser a continuação deste que na verdade acabou sendo continuado por este. Era pra ser um passo a passo de como montar os cadastros da nossa aplicação para controle de Viagens no Delphi, mas foi feito apenas o início da parte dos menus... #FAIL mas algo sempre se aproveita, então, boa leitura.

Abra o Delphi e crie uma nova aplicação pelo menu File → New → VCL Forms Application – Delphi for Win32, o Delphi vai abrir um Form vazio pra começarmos a trabalhar, no Object Inspector vamos alterar as seguintes propriedades deste form:

Name: FrmPrincipal
Caption: Controle de Viagens
WindowState: wsMaximized

Clique dentro do form e pressione CTRL+ALT+P, digite TMainMenu e pressione ENTER. O atalho serve para começar a filtrar os componentes da Tool Palette do lado esquerdo, note que enquanto você digitava os componentes vão sendo filtrados até sobrar apenas um, com o ENTER ele foi automaticamente inserido no formulário principal.

Este componente serve para montarmos o nosso menu, de um duplo clique nele, será aberto um novo form em branco com um menu vazio selecionado, no Object Inspector vamos procurar a propriedade Caption e digitar "Arquivo", note que vai aparecer um menu "Arquivo" no formulário, clicando em Arquivo ele abre um menu suspenso para baixo onde podem ser cadastrados mais menus, selecione um espaço em branco logo abaixo de "Arquivo" no menu e preencha a propriedade Caption como "Sair", depois vá na aba Events do Object Inspector, então dê um duplo clique no evento OnClick, o Delphi vai sair do modo Design e vai para o Code, ou código, digite a seguinte instrução para fechar a aplicação quando clicado neste menu (Sair):

procedure TFRMPRINCIPAL.Sair1Click(Sender: TObject);
begin
  Close;
end;

Agora pressione F12 para voltar para o modo Design, esta é a tecla de atalho pra alterar entre Design e Code. Bom, agora você já sabe como criar mais menus e adicionar eventos para eles, crie um menu ao lado de "Arquivo" chamado de "Manutenções" e dentro dele (menu suspenso para baixo) crie os seguintes subMenus: Cidades, Pontos Turísticos, Passageiros, Guias, Veículos e Viagens. Se quiser ainda pode criar mais um menu ao lado deste para "Ajuda" sobre o sistema mas isso vai de cada um, documentar sempre é importante, se for distribuir o sistema também é importante colocar um "Sobre" com dados para contato em caso de dúvida ou coisa assim.

Bom, temos a estrutura do nosso menu pronta, agora precisamos criar os formulários de manutenção dos dados e adicionar uma instrução no evento OnClick dos menus que vai exibir este formulários, veremos isto mais adiante.

Com o início da aplicação ok vamos salvar nossa aplicação, como é a primeira vez temos que ir no menu File → Save Project As... para que seja salvo um projeto com executável e tudo o mais, caso contrário o Delphi salvará apenas o formulário o que nos trará alguns problemas mais adiante, este procedimento deve ser feito na primeira vez que vamos salvar, depois um CTRL+S serve pra nós, continuando, ao clicar em Save Project As... o Delphi abriu uma janela pedindo local e nome do arquivo da Unit1, utilize a mesma pasta que já tem o diagrama e tudo mais, renomeie para UntPrincipal e clique em Salvar, agora ele vai abrir uma nova janela para salvar o Projeto, de o nome de CONTROLEDEVIAGENS ou algo assim e clique em Salvar.

Instalando componentes Rave Reports no Delphi

Primeiramente vá em Component->Install Packages.

Click ADD e vá até o diretório da figura abaixo, selecione o arquivo dclRave.bpl e clique abrir.

Vai importar o pacote e já vai aparecer marcado o pacote do Rave.

Os componetes vão aparecer no final da Tool Palete.

Para criar um relatório com Rave vai precisar de três componentes:

- RvProject: Responsável pela ligação entre o projeto Delphi e o projeto de relatórios Rave.
- RvDataSetConnection: Exporta um DataSet do projeto Delphi para o projeto Rave.
- RvSystem:Responsável pelo envio do relatório para a impressora ou para a tela de Preview.

Mas isto fica pra uma próxima. Até.

Baskara Delphi

Programinha pra calcular Baskara no Delphi, tarefa de aula, vale compartilhar :D.

procedure TForm1.Button1Click(Sender: TObject);
var
  A,B,C,D,R1,R2:double;
begin
  try
    A := strtofloat(edta.Text);
    B := strtofloat(edtB.Text);
    C := strtofloat(edtC.Text);
    if A <> 0 then
    begin
      D := (B*B)-(4*A*C);
      if D >= 0 then
      begin
        R1 := ((-1*B)+SQRT(D))/(2*A);
        R2 := ((-1*B)-SQRT(D))/(2*A);
        EDTR.Text := FloatToStr(R1);
        EDTR2.Text := FloatToStr(R2);
    {    // exibir resultado em outro form
        final.Edit1.Text := FloatToStr(R1);
        final.Show;
     } end else
      begin
        ShowMessage('Erro na operação!! Delta menor que zero.');
      end;
    end else
    begin
      ShowMessage('Valor de A deve ser diferente de zero (0).');
    end;
  except on e:exception do
    ShowMessage(e.message);
  end;
end;

Criação de um Sistema no Delphi com Firebird

Olá, após um bom período de férias, as aulas da faculdade estão de volta e me lembrei que ficou tarefa do semestre passado pra fazer aqui no blog, mostrar como fazer um sistema utilizando Firebird no Delphi, rapidamente vou explicar como fazer uma tela de manutenção de uma tabela de Cidades, não é o mesmo BD do sistema de viagens mas o processo é o mesmo para todas as tabelas.

- Primeiramente abra o Delphi e crie um File -> New -> VCL Forms Application.


- Depois em File -> Save Project As ..., salve como "untPrincipal" e de um nome para o projeto, pode ser "Cidades", salve.
- Altere o Caption do Form para "Manutenção de Cidades" e o name para frmCidades. CTRL + S para salvar.
- Crie um Data Module em File -> New -> Other ..., selecione Data Module, OK.
 
 
- Neste Data Module, adicione o componente SQLConnection da paleta dbExpress para conectarmos ao nosso banco Firebird (como criar foi ensinado no outro post).
 
 
- Dê um duplo clique sobre o componente para abrir as opções.
- No driver name selecione Interbase.
- Na Key DataBase você coloca o caminho até o seu arquivo *.fdb, o banco de dados, se você salvar a aplicação no mesmo diretório que está o banco de dados pode colocar apenas o nome do arquivo.fdb, isto vai evitar problemas quando você for tentar usar o sistema em outro computador (terá que ter o banco no mesmo caminho).
- Na key ServerCharSet coloque "WIN1252" para que o sistema aceite acentos do português.
- Verifique se o User_Name, Password e SQLDialect estão corretos.
 
 
- Se quiser pode testar a conexão clicando no quarto botão bem em cima, vai pedir a senha (masterkey), se tudo der certo vai receber a mensagem "Successfully Connected".
 
- Clique em OK, altere a propriedade LoginPrompt do SQLConnection para false, isso faz com que ele deixe de perguntar a senha toda vez que você for abrir uma conexão com o banco.
- Altere a propriedade Name do DataModule para "DM".
- CTRL+ S para salvar, chame a Unit de "untDM".

Até aqui criamos um novo projeto, um formulário para a manutenção de cidades, um data module para separar a parte de conexão com o banco das telas de manutenção e criamos a conexão. Agora vamos fazer o processo que será igual para todos as "tabelas básicas" do banco que precisam apenas uma tela para inserir, alterar, excluir e consultar os dados (que eu chamo de manutenção).

- Adicione três componentes no DM (Data Module), um SQLDataSet, um DataSetProvider e um ClientDataSet, para cada tabela terá que ter estes 3 componentes.
- Selecione o SQLDataSet e altere a propriedade SQLConnection, selecione nosso componente de conexão SQLConnection1.
- Na propriedade CommandText vai aparecer "..." quando colocar o cursor do mouse dentro, clique nos pontinhos (...) para abrir o CommandText Editor, nele vão aparecer as tabelas do banco de dados e os campos de cada tabela, selecione a tabela que você está fazendo a manutenção, aqui é "CIDADE" e clique no botão "Add Table to SQL", depois em "Add Field do SQL", isso vai montar uma SQL de consulta dos dados, ex.: "select * from CIDADE", depois clique em OK.


- Selecione o DataSetProvider1 e altere a propriedade DataSet, selecione o SQLDataSet1.
- Selcione o ClientDataSet1 e altere a propriedade ProviderName, selecione o DataSetProvider1.
- Ative o ClientDataSet1 (propriedade Active = true).
- Duplo clique no ClientDataSet1 para abrir o Fields Editor, clique com o botão direito dentro do field Editor e depois em "Add all fields" ou "CTRL + F" para adicionar todos os campos da tabela.


- É interessante renomear os componentes para ficar fácil a identificação quando tiver que fazer pra todas as tabelas, de preferência antes de começar alterar as propriedades dos componentes, neste caso só vou fazer de uma então pulei esta parte.
- Deixe o Fields Editor do ClientDataSet1 aberto e volte para o frmCidades (untPrincipal).
- Selecione todos os fields e arraste eles para dentro do frmCidades, vai pedir uma confirmação para usar o form DM ou algo semelhante, clique em "Yes". Vão ser criados os Edits e Labels conforme os fields da tabela e um DataSource.


- Adicione no formulário o componente DBNavigator e altere a propriedade DataSource, selecione DataSource1.
- Adicione também o componente DBGrid e também altere sua propriedade DataSource para DataSource1. Neste momento já deve trazer os dados do banco (se tiver algo cadastrado), caso não traga nada e estes componentes fiquem "desativados", sem as funções, verifique no DM se o ClientDataSet está com a propriedade Active = true.
- Adicione também um Button, pode ser ao lado do DBNavigator, altere a propriedade Caption para "Salvar" ou "Gravar", de um duplo clique sobre o Button e então vamos digitar o código responsável por fazer com que os dados alterados ou inseridos realmente sejam salvos no banco, antes adicione nas uses o DM, para isso pressione "Alt + F11", selecione a unitDM e OK, agora sim o código para salvar:


procedure TfrmCidades.Button1Click(Sender: TObject);

begin
   DM.ClientDataSet1.ApplyUpdates(0);
end;


- Pressione "F12" para voltar ao modo Design.

Pronto, a tela deve ter ficado parecida com a imagem abaixo.

  
- CTRL + Shift + S para salvar tudo.
- CTRL + F9 para compilar.
- F9 para compilar e executar a aplicação com Debbuger, ou
- CTRL + Shift + F9 para compilar e executar sem Debug (mais rápido)

A aplicação funcionando.


Bom pessoal, minha aula está acabando e vou ficando por aqui, no futuro escreverei um post mostrando como fazer um menu na aplicação e também telas de manutenção em tabelas que tem chaves estrangeiras (usar lookup).

Até.

Criando/Baixando/Listando/Apagando Arquivos no Delphi ASP.NET

Olá pessoal!

Hoje vou mostrar como criar arquivos .txt ou .sql com Delphi ASP.NET em tempo de execução a partir de uma string qualquer, gravar estes arquivos no servidor e descer para o usuário, também vou mostrar como listar os arquivos gerados, apagar e ler os dados de cada arquivo, recomendo a leitura do artigo Trabalhando com Diretórios e Arquivos do Blog Geeks .NET, lá o meu colega Mateus Chies já demonstrou algumas dessas funções da classe System.IO.

Bom, neste exemplo temos uma página que executa SQL diretamente no banco e exibe os resultados em uma gridView, após isso temos uma função que pega estes dados e gera um arquivo SQL com comandos para inserir (INSERT INTO ...) e disponibiliza o arquivo .SQL pra download, vamos primeiramente fazer a procedure que gera a SQL a partir de um dataset e grava o arquivo no servidor.


procedure TExemplo.GerarSQLInsert(ds:dataset);
var
  C,R: Integer;
  sql: StringBuilder;
  caminho, arquivo:string;
  arq: System.IO.FileInfo;
  dir: System.IO.Directory;
  stream: System.IO.StreamWriter;
begin
    {$REGION 'Cria SQL Insert'}
    sql := StringBuilder.Create;
    // Inicia transação na banco
    sql.appendLine('BEGIN TRANSACTION');
    sql.appendLine('GO');
    sql.AppendLine('');
    // Registros Encontrados
    for R := 0 to ds.Tables[0].Rows.Count - 1 do
    begin
      // Inicia comando Insert com Nome da Tabela
      sql.AppendLine('INSERT INTO '+txbNomeTabela.Text+' (');
      // Recupera Campos/Atributos
      for C := 0 to ds.Tables[0].Columns.Count - 1 do
      begin
        // Se não for última coluna precisa vírgula
        if C <> ds.Tables[0].Columns.Count -1 then
          sql.AppendLine(ds.Tables[0].Columns.Item[C].ColumnName+', ')
        else
          sql.AppendLine(ds.Tables[0].Columns.Item[C].ColumnName);
      end;
      // Fecha Atributos
      sql.AppendLine(') ');
      // Dado de cada Atributo
      sql.AppendLine('VALUES (');
      for C := 0 to ds.Tables[0].Columns.Count - 1 do
      begin
        // Se não for última coluna precisa vírgula
        if C <> ds.Tables[0].Columns.Count -1 then
        begin
          if ds.Tables[0].Rows.Item[r].Item[c].ToString().TRIM <> '' then
          begin
            // Verifica se o tipo é double
            if NumeroValido(ds.Tables[0].Rows.Item[r].Item[c].ToString().TRIM) then
              sql.AppendLine(ds.Tables[0].Rows.Item[r].Item[c].ToString().TRIM+', ')
            else  // Se não deve ser string e precisa aspas
              sql.AppendLine(' '''+ds.Tables[0].Rows.Item[r].Item[c].ToString().TRIM+''', ');
          end
          else
            sql.AppendLine('NULL, ');
        end
        else
        begin
          // Verifica se tem valor
          if ds.Tables[0].Rows.Item[r].Item[c].ToString().TRIM <> '' then
          begin
            // Verifica se o tipo é double
            if NumeroValido(ds.Tables[0].Rows.Item[r].Item[c].ToString().TRIM) then
              sql.AppendLine(ds.Tables[0].Rows.Item[r].Item[c].ToString().TRIM)
            else  // Se não deve ser string e precisa aspas
              sql.AppendLine(' '''+ds.Tables[0].Rows.Item[r].Item[c].ToString().TRIM+''' ');
          end
          else
            sql.AppendLine('NULL');
        end;
      end;
      // Fecha Dados
      sql.AppendLine(')');
      sql.AppendLine('GO');
      sql.AppendLine('');
    end;
    sql.AppendLine('');
    // Encerra transação e grava registros
    sql.appendLine('COMMIT');
    sql.appendLine('GO');
    {$ENDREGION}
    // Exibe
//    lblScript.Text := sql.ToString;
    {$REGION 'Cria Arquivo SQL Insert e Desce para o Usuário'}
    try
      caminho := Server.MapPath('.')+'\SQL\';
      arquivo := 'SQL_INSERT_'+txbNomeTabela.Text+'.sql';
      // verifica / cria diretório se não existe
      if dir.Exists(caminho) = False then
        dir.CreateDirectory(caminho);
      // cria arquivo
      arq := System.IO.FileInfo.Create(caminho+arquivo);
      // Insere SQL no arquivo
      stream := System.IO.StreamWriter.Create(caminho+arquivo);
      stream.WriteLine(sql.ToString);
      stream.Close();
      // download do arquivo
      ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(),'window.open("/SQL/'+arquivo+'","downsql","menubar=no,scrollbars=no,WIDTH=15,HEIGHT=15");', true);
    except on ex:exception do
      response.write('Erro durante criação do arquivo.
Detalhes: '+ex.message);
    end;
    {$ENDREGION}
end;

// Função que verifica se o número é válido (é um número ou não)

function TExemplo.NumeroValido(Numero: String): Boolean;
Var
  N: Double;
begin
  Result := False;
  try                
    N := Convert.ToDouble(Numero);
    Result := True;
  Except
    Result := False;
  end;
end;


Bom, no código acima ficou bem comentado o que cada parte faz, então vamos para o próximo passo, exibir os arquivos gerados em uma grid e também ter a opção de exibir o conteúdo dos arquivos em um textBox, excluir os arquivos ou fazer o download novamente.

Exibir os arquivos de um diretório é fácil como você já viu no post od Geeks .NET, mas aquele exemplo temos um problema, ele exibe o caminho completo do arquivo no servidor mas nós queremos ver apenas os nomes dos arquivos, então veja como ficou a procedure abaixo:


procedure TExemplo.ListarArquivos;
var
  caminho, na:string;
  lista: ArrayList;
  i: integer;
begin
  caminho := Server.MapPath('.');
  lista := ArrayList.Create;
  gvSQL.DataSource := System.IO.Directory.Getfiles(caminho+'\sql');
  gvSQL.databind();
  for I := 0 to gvSQL.rows.Count - 1 do
  begin
    na := gvSQL.Rows.item[i].cells[3].Text;
    // Substitui o caminho até o diretório dos arquivos por '' -> nada
    na := na.replace(caminho+'\sql\','');
    lista.add(na);
  end;
  gvSQL.DataSource := lista;
  gvSQL.databind();
end;


Ok, você pode notar que jogamos os nomes dos arquivos dos diretórios na coluna (Cells) 3 da grid, isto porque já temos as funções de ler, excluir e baixar nas três primeiras colunas da grid, veja o código da grid, tire os espaços nas tags.


< asp:gridview backcolor="White" bordercolor="#999999" borderstyle="Solid" borderwidth="1px" cellpadding="3" font-size="Small" forecolor="Black" gridlines="Vertical" id="gvSQL" runat="server">
    < columns>
   < asp:buttonfield commandname="LER" text="Carregar">< /asp:buttonfield>
            < asp:buttonfield commandname="DOWNLOAD" text="Download">< /asp:buttonfield>
            < asp:buttonfield commandname="EXCLUIR" imageurl="~/imagens/exc.gif" text="Excluir">< /asp:buttonfield>
          < /columns>
          < footerstyle backcolor="#CCCCCC">< /footerstyle>
          < pagerstyle backcolor="#999999" forecolor="Black" horizontalalign="Center">< /pagerstyle>
          < selectedrowstyle backcolor="#000099" font-bold="True" forecolor="White">< /selectedrowstyle>
          < headerstyle backcolor="Black" font-bold="True" forecolor="White">< /headerstyle>
          < alternatingrowstyle backcolor="#CCCCCC">< /alternatingrowstyle>
        < /asp:gridview>


Agora já sabemos criar os arquivos, exibir eles em uma grid, vamos a parte de ler e e excluir os arquvos existentes, para isso vamos implementar as funções para cada botão da grid, fazemos isto no evento RowCommand, veja código abaixo:


procedure TExemplo.gvSQL_RowCommand(sender: TObject; e: System.Web.UI.WebControls.GridViewCommandEventArgs);
var
  caminho,arquivo:string;
  arq: System.IO.FileInfo;
  reader: System.IO.StreamReader;
begin
  // Se o comando é EXCLUIR
  if e.commandname = 'EXCLUIR' then
  begin
    // Pega o caminho até o diretório
    caminho := Server.MapPath('.')+'\SQL\';
    // o Nome do arquivo SQL
    arquivo := GVSQL.Rows.Item[convert.ToInt32(e.commandargument)].Cells[3].Text;
    // Cria arquivo
    arq := System.IO.FileInfo.Create(caminho+arquivo);
    // Se arquivo existe -> com certeza existe
    if arq.Exists then
      arq.Delete;  // Deleta
    // Atualiza Lista dos Arquivos
    ListarArquivos;
  end;
  // Se o comando é para baixar o arquivo -> DOWNLOAD
  if e.commandname = 'DOWNLOAD' then
  begin
    // Pega nome arquivo
    arquivo := GVSQL.Rows.Item[convert.ToInt32(e.commandargument)].Cells[3].Text;
    // Redireciona usuário para endereço do arquivo, vai pedir pra baixar...
    Response.redirect('/SQL/'+arquivo);
  end;
  // Se for pra ler -> exibir na textbox conteúdo do arquivo
  if e.commandname = 'LER' then
  begin
    caminho := Server.MapPath('.')+'\SQL\';
    arquivo := GVSQL.Rows.Item[convert.ToInt32(e.commandargument)].Cells[3].Text;
    reader := StreamReader.Create(caminho+arquivo);
    // Lê arquivo até o fim e joga string para textbox
    txbSQL.text := reader.ReadToEnd;
    reader.Close();
  end;
end;


Bom pessoal, basicamente é isto ai, não mostrei como faz .txt né, é só trocar o final do nome do arquivo (Extensão) de .sql para .txt e pronto. Espero que seja útil, hoje também fiz um post no Geeks mostrando como exportar dados de uma grid para o Excel, pode ser muito útil em alguns casos, normalmente o usuário pede também...

Agradecimentos ao Tiago Pasieka que começou a página que me motivou fazer estas funções, valeuu!!

Até!

Criação de um Sistema para Controle de Viagens no Delphi com Firebird

Olá pessoal, este é um resumo/tutorial da criação de um sistema para controle de Viagens feito durante as aulas de Programação Comercial do prof. Fauzi Shubeita, durante o desenvolvimento serão usados as ferramentas Case Studio 2.25, IB Expert, Delphi 2007 e o Banco de Dados Firebird 1.5, ele está dividido em duas partes, nesta primeira vamos modelar e criar o banco de dados, na segunda parte será o desenvolvimento no Delphi, talvez não tudo, mas o principal.

Sobre as ferramentas utilizadas:

Case Studio: utilizado principalmente para modelagem de banco de dados, permite a criação de Diagramas de Fluxo de Dados e Diagramas de Entidades e Relacionamentos, tem suporte aos principais banco de dados relacionais. Mais Informações.

IB Expert: segundo Wikipedia, "O IB Expert é um poderoso gerenciador de banco de dados que permite realizar todas as tarefas necessárias para o suporte e manutenção do banco tanto local como remotamente. Com ele é possível administrar o banco criando tabelas, modificando campos, índices, executando scripts SQL e outras funções. O IB Expert realiza a geração do modelo de entidade relacionamento para bancos de dados Interbase e Firebird.". Mais informações e link para download da versão Costumer.

Delphi: segundo próprio site do desenvolvedor, Embarcadero: "Delphi é um dos mais respeitados e amplamente utilizado ambiente Rapid Application Development (RAD). Mais de 1,7 milhões de desenvolvedores em todo o mundo escolheram o Delphi sobre outras ferramentas porque Delphi muda radicalmente as velocidades de trabalho em desktop, workstation, touch, kiosk, e desenvolvimento de aplicações Web sem sacrificar muito tempo de programação ou controle. Os aplicativos criados com o Delphi são rápidos, compacto, fornecem interfaces (UIs) ricas e podem conectar-se a praticamente qualquer fonte de dados ou dados "out-of-the-box". Atualmente já temos a versão 2010, mas neste tutorial estaremos utilizando a 2007.

Firebird: é um banco de dados relacional muito utilizado por ser leve, rápido e de fácil utilização, também roda no Linux, Windows e plataformas Unix. Mais Informações, download Baixaki.

Obs.: Neste resumo não mostrarei passos de como instalar os softwares, apenas utilizar.

Criando Cadastro Rapidamente no Delphi

Aula de Programação Comercial hoje, primeiro exemplo, cadastro de pessoas... segue os passos para criar um cadastro básico no DELPHI, usando Client Data Set e DBNavigator, é muito simples basta seguir os passos:

1 – Criar novo projeto
2 – Adicionar um data Module
3 – Adicionar um Client Data Set da paleta DataAccess no Data Module.
4 – Renomear Data Module para DM
5 – Renomear Client Data Set para CDSPessoas
6 – Clicar com botão direito no CDSPessoas e abrir Field Editor
7 – Criar New Fields -> Campos
8 – Após criar todos os campos, configurar a propriedade "File Name" do CDSPessoas, colocar o nome do arquivo XML para armazenar os dados, pode ser PESSOAS.XML
9 – Clicar botão direito sobre o CDSPessoas e selecionar "Create DataSet"
10 – Manter o Field Editor Aberto e voltar para o Forulário Principal
11 – Selecionar todos os campos do field editor e arrastar sobre formulário.
12 – Adicionar o componente DBNavigator da paleta Data Controls e configurar a propriedade "Data Source" do mesmo, selecione o DataSource1 que foi criado automaticamente quando foram arrastados os campos sobre o formulário.
13 – Salve o Projeto e execute.

Até.

Delphi Grátis

Olá pessoal, lendo meus feed/RSS hoje vi um artigo interessante sobre licenças e alguns links interessantes, como programo atualmente com Delphi for ASP.NET na empresa, cliquei em um que me chamou a atenção, Delphi Grátis, verifiquei e realmente existe mas o software vem com algumas limitações, ainda assim é possível desenvolver muitas coisas legais. Mais detalhes no site da Code Gear - Turbo e tutoriais na Turbo Explorer.

Pesquisando outras alternativas ao software pirata para quem está habituado com o Delphi encontrei o Lazarus (Win32), que roda em Linux, FreeBSD, MacOSX e Windows, também temos o Free Pascal e o Kylix. Segundo meus colegas Sipmann e Allan, o Lazarus funcionou muito bem no Ubuntu 9.04 e eles recomedaram o uso do mesmo já que o Kylix está descontinuado.

Bom, concluí com esta breve consulta ao oráculo que existem muitas alternativas ao uso de software pirata e que vale a pena utilizálos para garantir a segurança do seu computador e do seu bolso, até.

Enviando e-mail no DELPHI for ASP.NET utilizando GMail

Olá pessoal, neste pequeno tutorial pretendo mostrar um exemplo simples de envio de e-mail em ASP.NET utilizando os serviços do Gmail e DELPHI 2007 for .NET, dica do Edinei.

Primeiramente vamos criar uma nova aplicação, File -> New -> ASP.NET Web Application.



Feito isso, adicione três TextBox, um Button e uma Label, renomeie a propriedade ID das textboxes para: txbdestinatario, txbassunto e txbmensagem respectivamente, a Label para lblretorno e o Button para btnenviar, aumente o tamanho das textboxes de acordo com sua preferência e mude a propriedade textMode da txbmensagem para “Multiline”. Apague o que tiver na propriedade Text da lblretorno e mude a propriedade Text do btnenviar para “Enviar E-mail”. O formulário deve ficar parecido com o da imagem abaixo.



O txtdestinatario vai receber o endereço de e-mail que se deseja enviar uma mensagem, txbassunto o assunto e txbmensagem a mensagem, a lblretorno irá mostrar se o e-mail foi enviado com sucesso ou se ocorreu algum erro durante o envio e o btnenviar chamará a função de envio de e-mail.

Para usar as funções de envio de e-mail do .NET, é necessário adicionar as seguintes bibliotecas na uses.


Uses
System.Net.Mail, System.Net.Configuration, System.Text, System.Net;

Feito isso, de um duplo clique no btnenviar e implemente a função que vai enviar o e-mail através do serviço de envio de e-mail da Google, o gmail, veja função abaixo.

procedure TDefault.btnEnviar_Click(sender: TObject; e: System.EventArgs);
var
EmailRemetente: string;
NomeRemetente: string;
Mail: MailMessage;
Client: SmtpClient;
begin
Mail := MailMessage.create;
Client := SmtpClient.create;
EmailRemetente := 'seuEmail@gmail.com'; // O e-mail do remetente
NomeRemetente := 'Seu Nome'; // O nome do remetente
try
Mail.&To.Add(txbDestinatario.text); // Destinatário
Mail.From := MailAddress.create(EmailRemetente, NomeRemetente, System.Text.Encoding.UTF8);
Mail.Subject := txbassunto.text; // Assunto do E-mail
mail.SubjectEncoding := System.Text.Encoding.UTF8;
mail.Body := txbmensagem.text; // Mensagem do e-mail
mail.BodyEncoding := System.Text.Encoding.UTF8;
mail.IsBodyHtml := true;
mail.Priority := MailPriority.High; // Prioridade do E-Mail
client.Credentials := NetworkCredential.create(EmailRemetente, 'AquiSuaSenha'); // usuário e senha do Gmail
client.Port := 587; // Esta porta é a utilizada pelo Gmail para envio
client.Host := 'smtp.gmail.com'; // Definindo o provedor que irá disparar o e-mail
client.EnableSsl := true; // Gmail trabalha com Server Secured Layer
try
client.Send(mail);
lblretorno.text := 'E-mail enviado com sucesso!';
except on erro:exception do
lblretorno.text := 'Erro ao tentar enviar e-mail. '+erro.message;
end;
finally
client.free;
mail.free;
end;
end;

Depois de implementada a função é só compilar e executar (CTRL+SCHIFT+F9) para testar o envio de e-mails.

Até.

Referências: http://www.devmedia.com.br/articles/viewcomp.asp?comp=12520

Desenvolvimento de uma aplicação utilizando SOA: um estudo de caso

Minhas anotações sobre a apresentação do artigo "Desenvolvimento de uma aplicação utilizando SOA: um estudo de caso" por Roberto Felipe Caliendo e Daniel Luís Notari durante o V ERBD em Ijuí.

---

SOA: organizar o desenvolvimento de software com base nas regras de negócio da empresa com acesso de forma distribuída.

SOAP: Simple Object Acess Protocol

WSDL: Web Service Description Language

Repositório UDDI: Universal Description, Discovery and Integration

MOTIVAÇÃO

os sistemas existentes hoje não estão aptos a trocar informações automaticamente pois são feitos em linguagens diferentes, com formas de armazenamento diferentes etc.

OBJETIVO

implementar alguns serviços nque pudessem ser reutilizados utilizando RSS (realy simple syndication??), web services abertos ao publico que queira se cadastrar e selecionar suas preferencias de leitura, web service de email e outro de operações diversas...

ARQUITETURA Microsoft
- SQL Server
- turbo delphi for dotnet
- IIS

DESENVOLVIMENTO EM CAMADAS: aplicação - webservice - negócio - BD

CONCLUSÕES

- SOA: necessidade de planejar, definir corretamente interface do serviço, diferentes aplicações consomem o mesmo serviço, trocar informações.
- Dificuldades técnicas para montagem de ambiente de desenvolvimento
- Disponibilidade webservice: CEP - Correios, era grátis passou a ser pago.
- Precisa ser testado em larga escala, viabilidade, problemas com muitos acessos...

E-mails: rfcaliendo@gmail.com, daniel.notari@ucs.br

Até.

Adição,Subtração e Diferença de datas no DELPHI for .NET

Olá pessoal, tive que fazer hoje uma função para diminuir 6 meses de uma data e decidi compartilhar um exemplo disso e outras funções similares que podem ser bastantes úteis.

Abaixo exemplos de procedimentos feitos no DELPHI 2007 for ASP.NET (RAD STUDIO), para executá-los você pode adicionar um button ou no próprio page load chamar estes procedimentos.


procedure Tteste.DiminuirData;
var
data: tdate;
begin
data := convert.ToDateTime(TextBox1.text);
data := data - convert.ToInt32(TextBox3.text);
// a função ToDateTime converto o de TDate para DateTime
// a função ToShortDateString vai retirar as horas, minutos e segundos e exibir no formato brasileiro (dd/MM/yyyy)
TextBox2.text := Convert.ToDateTime(data.tostring).ToShortDateString;
end;


Para somar dias em uma data basta trocar o sinal (-) por (+) :D

Agora procedimento para exibir número de dias em um intervalo de datas.


procedure Tteste.Diferenca;
var
data1, data2: tdate;
dias:integer;
begin
data1 := convert.Todatetime(TextBox1.text);
data2 := convert.Todatetime(TextBox2.text);
dias := convert.ToInt32(data1) - convert.ToInt32(data2);
TextBox3.text := dias.tostring;
end;


No Delphi podemos fazer muitas outras coisas interessantes utilizando a biblioteca DateUtils, basta adicionar na Uses, mas isso fica pra outro artigo, valeu!

Download do exemplo

Dicas Delphi for .NET

Para indentar o código rapidamente no DELPHI, selecione as linhas que deseja mudar o posionamento e pressione ctrl+i para que elas se desloquem 2 espaços para a direita, ou ctrl+u para que se desloquem 2 espaços para a esquerda. Outra dica legal para quem precisa trabalhar bastante com o código aspx e ele fica todo desalinhado, é ir no menu Edit->Format Document, deixando o código indentado novamente. Para indentar várias linhas mas apenas de um determinado ponto da linha em diante, pressione a tecla Alt, com ela pressionada clique com o botão direito do mouse e selecione as linhas que deseja indentar, note que será selecionado apenas a parte das linhas que será selecionado apenas o texto a partir da posição inicial do mouse e não a linha inteira.

Para inserir rápidamente um componente no design do DELPHI, clique no local onde deseja que o componente seja inserido, vá até a Tool Palette, clique em filter(figura semelhante a um funil) e digite o nome do componente, veja que com o filter marcado ele filtra os componentes que começam com o que está sendo digitado, assim que o componente desejado estiver selecionado pressione a tecla ENTER, e o componente será na última posição do mouse
pesquisar componente, enter coloca componente na última posição do mouse, , agora a maneira mais fácil :}, CTRL+ALT+P.

Comentar/Descomentar código: selecione o código que deseja comentar/descomentar e pressione as teclas Ctrl + ;

Apagar linha inteira: Posicione o cursor do mouse na linha e pressione Ctrl + y

Adicionando Colunas em GridView em tempo de execução

Olá, neste pequeno tutorial vou mostrar como adicionar colunas a um gridview no Code Gear RAD Studio .NET (Delphi 2007 for .NET) em tempo de execução.

Para começarmos, coloque no form um button e uma gridview, altere a propriedade da gridview AutoGenerateColumns para false, então, para adicionar as colunas manulmente em tempo de execução, adicione no evento onclick do button o seguinte código:


...
 var
    coluna1, coluna2 : BoundField;
  begin
    coluna1 := boundfield.create;
    coluna2 := boundfield.create;
  try
    coluna1.DataField:='NOME';
    coluna1.HeaderText:='Nome';
    coluna2.DataField:='ENDERECO';
    coluna2.HeaderText:='Endereço';
    //datafield é o nome do campo que busca no BD
    //header é o que aparece como cabecalho da coluna adicionada
    //se vc pressionar ctrl+space poderá ver as outras propriedades que podem ser configuradas
    gridview.columns.insert(0,coluna1);
    gridview.columns.insert(1,coluna2);
    //faz a consultaq sql no banco para trazer os dados para grid
    gridview.datasource := 'select...';
    gridview.databind;
  finally
    coluna1.free;
    coluna2.free;
  end;
end;

Até +