sexta-feira, 22 de junho de 2012

Asp.Net - UpdatePanel - Atualize apenas uma parte da página

UpdatePanel é um componente da palheta de componentes AJAX CONTROL TOOLKIT (Tenho um artigo no Blog a respeito) ele é responsável por atualizar apenas um pedaço da página ".aspx" em questão. Isto é interessante pois não precisamos dar o postBack na página por completa.

Fica aí a dica.

quarta-feira, 20 de junho de 2012

Android – Uma abordagem sobre persistência de dados no SQLite - Parte 2



Implementando o método para Gravar os Dados

A rotina GravarDados nos permite persistir os dados no SQLite. Sempre quando trabalhamos com Banco de Dados é recomendável utilizar o try/Catch. Segue a seguir a instrução.


public void GravarDados()
{
    try
    {
        String strPro = "";
         switch (rgCursos.getCheckedRadioButtonId())
         {
case R.id.rbLiteDelphi : strPro = "The Club   Lite (Delphi) - R$59,90";
             break;
                       
case R.id.rbLiteC : strPro = "The Club Lite (Delphi) - R$59,90";
            break;
                       
case R.id.rbProfessional : strPro = "The Club Lite (Delphi) - R$59,90";
           break;
                       
case R.id.rbStudent : strPro = "The Club Lite   (Delphi) - R$59,90";
           break;
       }
        
String sql = "INSERT INTO TB_THECLUB (NOM_CLI, CID_CLI, EST_CLI, PRO_CLI) VALUES ('"
       + txtCliente.getText().toString() +"','"
      + txtCidade.getText().toString()+"','"
      + spEstado.getSelectedItem().toString()+"','"
      + strPro+"')";
             
      BancoDados.execSQL(sql);           
MensagemAlerta("Mensagem", "Dados salvos com Sucesso!");
             
     }
    catch (Exception e)
    {
MensagemAlerta("Mensagem", "Erro ao gravar dados no Banco de Dados!"+e.toString());
     }
finally
    {
         BancoDados.close();
    }
}

O método “BancoDados.execSQL()” é responsável por montar a instrução de Insert no BD. O que fazemos de diferente aqui é que recuperamos os dados das respectivas variáveis (nome,cidade,estado e produto) e finalizando a instrução com uma mensagem informativa ao usuário. O método “BancoDados.close()” limpa o objeto da memória não permitindo recriá-lo desnecessariamente.
  
Implementando os métodos RegistroAnterior e RegistroPosterior

Estes métodos são reponsáveis por realizar a navegação entre os registros de nosso Banco de Dados. Novamente implementamos o Try/Catch, só que neste caso informaremos ao usuário caso não exista mais registros para navegação que ele está no primeiro ou último registro de nossa tabela.
public void RegistroAnterior()
{
    try
    {
         cursor.moveToPrevious();
         MostrarDados();
     }
    catch (Exception e)
    {
MensagemAlerta("Mensagem", "Você está no primeiro registro!");
     }
}
   

public
 void RegistroPosterior()
{
    try
    {
         cursor.moveToNext();
         MostrarDados();
     }
    catch (Exception e)
    {
MensagemAlerta("Mensagem", "Você está no último registro!");
     }
}


O método que faz este trabalho de navegação é o “cursor.moveToPrevious()” e o “cursor.moveToNext()”, sendo que o primeiro se movimenta para o registro anterior e o segundo para o posterior. Logo em seguida invocaremos o método MostrarDados() para preencher nossos respectivos objetos.

Métodos ChamaMenuPrincipal(), ChamaCadastro() e ChamaConsulta()

Estas rotinas já foram abordadas em artigos anteriores. Neste artigo foram implementadas novas funcionalidades para as mesmas.


public void ChamaMenuPrincipal()
{
    setContentView(R.layout.main);
    ChamaCadastro();
     ChamaConsulta()
}
   
public void ChamaCadastro()
{
Button btCadastrar = (Button) findViewById(R.id.btCadastrar);
btCadastrar.setOnClickListener(new View.OnClickListener()
     {  
         @Override
         public void onClick(View v)
         {
              setContentView(R.layout.cadastro);
                  
btEfetuar =  (Button) findViewById(R.id.btnEfetuar);
btEfetuar.setOnClickListener(new View.OnClickListener()
              {
                   @Override
                   public void onClick(View arg0)
                   {
                        AbreouCriaBancoDados();
                        InicializaObjetos();
                        GravarDados();
                   }
              });
             
Button btVoltarCadastro = (Button) findViewById(R.id.btVoltarCadastro);
btVoltarCadastro.setOnClickListener(new View.OnClickListener()
             {
                   @Override
                   public void onClick(View v)
                   {   
                        ChamaMenuPrincipal();
                   }
              }
              );
         }
     });
}

O botão “Efetuar” é encarregado de persistir os dados, então é nele que chamamos o método AbreouCriaBancoDados() – para abrir ou criar a estrutura, logo em seguida Inicializamos os objetos com o método InicializaObjetos() e finalizamos com o GravarDados(). Ver Imagem 04.

Figura 04: Tela de Cadastro Finalizada.

   
public void ChamaConsulta()
{
Button btConsultar = (Button) findViewById(R.id.btConsultar);
btConsultar.setOnClickListener(new View.OnClickListener()
     {
         @Override
         public void onClick(View v)
          {
              setContentView(R.layout.consulta);
     AbreouCriaBancoDados();
              InicializaObjetos();
              BuscarDados();
              MostrarDados();
                    
Button btAnterior = (Button) findViewById(R.id.btAnterior);
btAnterior.setOnClickListener(new View.OnClickListener()
              {
                   @Override
                   public void onClick(View arg0)
                   {
                        RegistroAnterior();
                   }
              }
              );
                  
Button btPosterior = (Button) findViewById(R.id.btPosterior);
btPosterior.setOnClickListener(new View.OnClickListener()
              {
                   @Override
                   public void onClick(View arg0)
                   {
                        RegistroPosterior();
                   }
              }
              );
                  
Button btVoltarConsulta = (Button) findViewById(R.id.btVoltarConsulta);
btVoltarConsulta.setOnClickListener(new View.OnClickListener()
              {
                   @Override
                   public void onClick(View v)
                   {
                        ChamaMenuPrincipal();
                   }
              }
              ); 
                  
         }
        }
        );
}

No ChamaConsulta() também inicializamos o método AbreouCriaBancoDados(), logo em seguida o InicializaObjetos(). O próximo passo utilizamos o BuscarDados() e por final o MostrarDados(). Como nesta tela utilizamos mais outros dois controles para navegação entre os registros, então é aqui o local de chamar o RegistroAnterior() e o RegistroPosterior(), ambos para navegação entre os dados. Ver Imagem 05.

Figura 05: Tela de Consulta Finalizada.

Conclusão

Procurei neste artigo abordar de uma forma simples a persistencia de dados utilizando o sistema Android. Dividi em pequenas rotinas cada estrutura para podermos dar uma maior abordagem sobre o assunto. Finalizamos duas telas principais, uma de Cadastro e outra de Consulta.

Abraço e até o mês que vem!

terça-feira, 19 de junho de 2012

Android - Uma abordagem sobre persistência de dados no SQLite - Parte 1



Olá amigos do The Club, tivemos outros artigos relacionados a persistência de dados em banco no Sistema Android. Neste artigo vou procurar detalhar um pouco mais dos recursos utilizados nos artigos anteriores e conhecer outros para se trabalhar com Banco de Dados. Estas informações se tornam primordiais para quem está começando a aprender este tipo de linguagem de programação. Continuaremos trabalhando com o SQLite, lembrando que o mesmo é responsável por persistir os dados no Banco. O foco deste artigo é permitir que os senhores montem uma tela simples de cadastro e outra de consulta persistindo e trabalhando com os dados.

Criando um novo Projeto

Seguindo os mesmos passos dos artigos anteriores para criar um novo projeto é bem simples, clique em File/New/Project Android e configure as propriedades da seguinte maneira:

Nome do Projeto: Android_BancoDados
Versão: Android 2.2
Aplicação: Android_BancoDados
Nome Pacote: pct. Android_BancoDados
Atividade: Android_BancoDadosActivity
Versão SDK: 8

A configuração deverá ficar idêntica a Imagem 01.


Figura 01: Configurações Iniciais.


Para finalizar esta etapa clique em “Finish”.

Importando as telas

O passo seguinte seria aproveitarmos as telas e boa parte da codificação do artigo “Navegando entre Telas” do Mês de Março de 2012. A diferença é que estaremos persistindo os dados no Banco de Dados, ao invés de salvar na memória em uma classe. Ver Imagem 02.
Figura 02: Telas importadas do artigo do mês de Março.

A Tela de Consulta possuirá mais dois botões para navegação entre os registros. Ver Imagem 03 e em seguida o código XML correspondente.

Figura 03: Tela de Consulta.


<LinearLayout
android:layout_width="match_parent" android:id="@+id/linearLayout5" android:layout_height="67dp">
<Button android:text=" Anterior" android:id="@+id/btAnterior" android:layout_height="wrap_content" android:layout_width="160dp"></Button>
<Button android:text="Posterior " android:id="@+id/btPosterior"
android:layout_width="160dp" android:layout_height="wrap_content"></Button>
</LinearLayout>


Implementando o método para inicializar os componentes

Achei interessante e prático criar um método para iniciar os objetos utilizados ao longo no desenvolvimento. São as mesmas variáveis utilizadas anteriormente, por isto não entrarei em detalhes.

public void InicializaObjetos()
{
     //Variáveis utilizadas no Cadastro
     rgCursos = (RadioGroup) findViewById(R.id.rgCursos);
rbLiteDelphi = (RadioButton) findViewById(R.id.rbLiteDelphi);
     rbLiteC = (RadioButton) findViewById(R.id.rbLiteC);
rbProfessional = (RadioButton) findViewById(R.id.rbProfessional);
rbStudent = (RadioButton) findViewById(R.id.rbStudent);
     txtCliente = (EditText) findViewById(R.id.edtCliente);
     txtCidade = (EditText) findViewById(R.id.edtCidade);
     spEstado = (Spinner) findViewById(R.id.spnEstado);
      
     //Variáveis utilizadas na Consulta      
     txtCli = (TextView) findViewById(R.id.lbCliente);
     txtCid = (TextView) findViewById(R.id.lbCidade);
     txtEst = (TextView) findViewById(R.id.lbEstado);
     txtCur = (TextView) findViewById(R.id.lbProduto);
     txtCod = (TextView) findViewById(R.id.lbCodigo);
}

Implementando o método para Abrir ou Criar o Banco de Dados

Para darmos continuidade ao artigo abra nossa “Activity” em “Android_BancoDados\src\pct.Android_BancoDados\Android_BancoDadosActivity.java”.
Importaremos duas classes responsáveis pela manipulação de dados, sendo:

Import android.database.sqlite.SQLiteDatabase: Seria o Banco de Dados propriamente dito, ou seja, responsável por armazenar as informações.

Import android.database.Cursor: Esta classe é responsável por manipular, navegar entre os registros do Banco de Dados.
Logo em seguida criaremos os objetos dentro da Activity.

SQLiteDatabase BancoDados = null;
Cursor cursor;

Devemos também criar um método responsável por abrir ou criar o Banco de Dados.


public void AbreouCriaBancoDados()
{
    try      
    {
BancoDados = openOrCreateDatabase("DBTHECLUB",        MODE_WORLD_READABLE, null);
String sql = "CREATE TABLE IF NOT EXISTS TB_THECLUB"
         +"(COD_CLI INTEGER PRIMARY KEY, " +
"NOM_CLI TEXT, END_CLI TEXT, TEL_CLI TEXT,  PRO_CLI TEXT)";
        
BancoDados.execSQL(sql);
Mensagem("Mensagem", "Banco Criado com Sucesso!");
    }
    catch (Exception e)
    {
Mensagem("Mensagem", "Erro ao criar ou abrir o Banco de Dados!");
      }
   
}

public void Mensagem(String Titulo, String Mensagem)
{
AlertDialog.Builder infoResultado = new      AlertDialog.Builder(Android_BancoDadosActivity.this);
     infoResultado.setTitle(Titulo);
     infoResultado.setMessage(Mensagem);
     infoResultado.setNeutralButton("Ok",null);
     infoResultado.show();
}


Iniciamos o método com um try/catch para validar a criação ou abertura do BD. Usaremos o método “OpenOrCreateDatabase” para criar o Banco de Dados contendo os seguintes parâmetros:


Tipo
Parâmetro
Descrição
Name
“DBTHECLUB”
Nome para o Banco de Dados.
Mode
MODE_WORD_READABLE
Significa que todas as aplicações poderão ler e acessar o arquivo.
Factory
null
Recurso não utilizado no momento.

A próxima etapa nós escrevemos a instrução SQL para criar a tabela de TB_THECLUB caso já não exista em nosso Banco de Dados. O comando BancoDados.execSql(sql) é responsável por esta tarefa. Utilizamos um método já abordado em outros artigos para podermos exibir uma mensagem informativa ao usuário, obtendo ou não sucesso na criação ou abertura de nosso Banco de Dados SQLite.

Implementando o método para Buscar os dados

Este método irá realizar a consulta SQL no SQLite retornando os dados para o Cursor.

public void BuscarDados()
{
    try
    {
      cursor = BancoDados.query("TB_THECLUB",
new string[]        {"NOM_CLI","CID_CLI","EST_CLI","PRO_CLI"},
                           null,
                           null,
                           null,
                           null,
                           null);
        
         if (cursor.getCount()!= 0 )
         {
              cursor.moveToFirst();
         }
    }
    catch (Exception e)
    {
MensagemAlerta("Mensagem", "Erro ao buscar dados no Banco de Dados!");
    }
}

   
Iniciamos o método com um try/catch para validar a obtenção dos dados usando o método “Query”. Neste caso atribuímos nossa consulta ao “Cursor” instanciado no início do artigo. Explicarei todos os argumentos na tabela a seguir.
Argumentos do Método BancoDados.query()

Tipo
Parâmetro
Descrição
Table
“TB_THECLUB”
Nome da tabela utilizada.
Columns
new String []{"NOM_CLI","CID_CLI","EST_CLI","PRO_CLI"}
Um vetor contendo todos os campos utilizados.
Selection
Null
Cláusula Where
SelectionArgs
Null
Argumento da cláusula Where.
GroupBy
Null
Argumento para agrupar os registros.
Having
Null
Argumento para restringir a quantidade de registros.
OrderBy
Null
Argumento para Ordenação dos registros.

O método “cursor.GetCount()” nos permite descobrir se possuímos ou não registros, Já o “cursor.MoveToFirst()” nos desloca para o primeiro Registro da tabela.

Implementando o Método para Mostrar os Dados

Quando executamos uma consulta com o BD armazenamos os dados no cursor, portanto agora precisamos recuperar os registros para poder mostrar em um textbox por exemplo, veja a seguir o método que faz exatamente esta tarefa.

public void MostrarDados()
{    
    txtCod.setText(cursor.getString(cursor.getColumnIndex("COD_CLI")));
txtCli.setText(cursor.getString(cursor.getColumnIndex("NOM_CLI")));           txtCid.setText(cursor.getString(cursor.getColumnIndex("CID_CLI")));
txtEst.setText(cursor.getString(cursor.getColumnIndex("EST_CLI")));
txtCur.setText(cursor.getString(cursor.getColumnIndex("PRO_CLI")));
}

O método “GetString()” retorna uma string a partir de um index. Portanto utilizamos o “GetColumnIndex()” passando como parâmetro o nome do campo para obter o registro correspondente.

Asp.Net - Como colocar título usando o iTextSharp


            string attachment = "attachment; filename=Article.pdf";

            Response.ClearContent();
            Response.AddHeader("content-disposition", attachment);
            Response.ContentType = "teste/pdf";
            StringWriter stw = new StringWriter();
            HtmlTextWriter htextw = new HtmlTextWriter(stw);
            Panel3.RenderControl(htextw);
            Document document = new Document();
            PdfWriter.GetInstance(document, Response.OutputStream);
            document.Open();

            Font fonteTitulo = FontFactory.GetFont("Verdana", 12, iTextSharp.text.Font.BOLD);
            fonteTitulo.SetColor(0, 0, 0);
            Chunk titulo = new Chunk("Relatório de Clientes", fonteTitulo);
            Phrase frase = new Phrase(titulo);
            Paragraph p = new Paragraph();
            p.Add(frase);
            document.Add(p);

            StringReader str = new StringReader(stw.ToString());
            HTMLWorker htmlworker = new HTMLWorker(document);
            htmlworker.Parse(str);
            document.Close();
            Response.Write(document);
            Response.End();


sexta-feira, 15 de junho de 2012

Android - Artigo Android e SQLite

Olá amigos do Blog, estou finalizando um artigo sobre persistência de dados no Android com o SQLite, logo logo estarei postando aqui pra vcs.

Espero que seja de grande utilidade.

Abraços.

terça-feira, 12 de junho de 2012

Delphi - Pesquisar dentro de uma String


procedure TForm1.Button1Click(Sender: TObject);
begin
   if (pos('Teste','abcdTeste012345')) then
      ShowMessage('Texto encontrado!');
end;

segunda-feira, 11 de junho de 2012

Asp.Net - Chamar uma função Javascript com o Asp.Net


<script type="text/javascript" language="javascript">
     function FuncaoTestar()
     {
           alert('Teste');
     }

    </script>


Page.ClientScript.RegisterStartupScript(this.GetType(), "teste", "FuncaoTestar;", true);

sábado, 9 de junho de 2012

SQL Server - Transformar campos em minúsculo ou maiúsculo


SELECT LOWER(CAMPO) AS MINUSCULO FROM TABELA

SELECT UPPER(CAMPO) AS MAIUSCULO FROM TABELA

Android - Como importar um projeto pronto


Para isto clique em “File/Import” e escolha a opção “Existing Projects into Workspace” localizada na aba “General”. Figura 01.


Figura 01: Selecionar Tipo.


O próximo passo é selecionar onde o projeto foi criado e em seguida concluir clicando no botão “Finish”. Ver Imagem 02.

Figura 02: Importação de um projeto.


Fica aí a dica.

Abraços.