sábado, março 30, 2013

Trabalhando com uma tabela de Contadores no MySQL

HI,

Essa dica é fresquinha, acabei de implementar agora.

Estou fazendo um sistema de suporte usando o banco MySQL e para criar o código do protocolo minha intenção é que em cada ano o contador comece do 1.

Exemplo: 201300001, 201300002,  201300...
Quando for 2014 que comece tudo de novo, 201400001, 201400002, ...

Crie uma tabela com dois campo, Ano e Valor.

Incrementar o valor com +1 é tranquilo, mas como garantir que dois usuários não peguem o mesmo valor?

Pensei em bloquear o registro para dar um update e pegar o valor atual. Pesquisando como fazer isso, achei dessa maneira que pensei em fazer e uma muito melhor.

Achei a dica aqui

MySQL How To Select and Update in Single Statement - Increment Counter avoiding Race Condition
http://www.sqlines.com/mysql/how-to/select-update-single-statement-race-condition

Usei essa solução


UPDATE counters
SET value = LAST_INSERT_ID(value) + 1
WHERE id = 1;

SELECT LAST_INSERT_ID();


Mas eu não quis usar pegando o valor atual, e sim ele +1

Ficou assim meu update

DECLARE novo_valor INT;


UPDATE seq_protoco
SET valor = LAST_INSERT_ID(valor + 1)
WHERE ano = 2013;

SELECT LAST_INSERT_ID() INTO novo_valor;




Fiquem na Paz!!!

quarta-feira, março 27, 2013

Barra de Progresso no Android

HI,

Precisei melhorar uma tela de comunicação de um programa que fiz. Nessa tela é recebido um arquivo compactado com os arquivos para atualização e é transmitido outro arquivo compactado com as informações que foram coletadas.

Pois bem, a tela tinha uma mensagem de dialogo apenas exibindo aquela bolinha girando e uma mensagem pedindo pra aguardar. Decidir modificar para ir mostrando cada etapa do processo na tela e resolvi modificar o dialogo para Progress Bar.

Usei esses exemplos para modificar a minha rotina.

Android Progress Bar Example
http://www.mkyong.com/android/android-progress-bar-example/

android progress dialog example
http://mobile-development.org/index.php/android/android-progress-dialog-example




Fiquem na Paz!!!

domingo, março 24, 2013

Adicionando leitura de código de barras ao nosso projeto no Android

HI,

Essa é pra quem não quer ficar acessando um programa de leitura de código de barras à partir do nosso programa.

Com a lib ZXing é possível incorporar esse recurso ao nosso projeto.

Achei como fazer essa integração nesse blog:

Utilizando Zxing para ler código de barras.
http://maicon.strey.nom.br/blog/2012/04/27/utilizando-zxing-para-ler-codigo-de-barras/


Fiquem na Paz!!!

domingo, março 17, 2013

Instalação manual do Apache e do PHP no Windows

HI,

Mais um pró resolvido, graças a Deus e as pessoas que disponibilizaram a solução.

Eu já tinha instalado o MySQL no meu  notebook para acessá-lo no Visual Studio. Baixei a versão 64bit e a instalação é manual.

E hoje encontrei um sistema de pesquisa em php e decidi estudar seu funcionamento, mas para testá-lo não queria instalar o Wamp, por exemplo, já que tenho o MySQL instalado. Então decidi baixar o Apache e o PHP.

Apache (no meu caso é 64bits)
http://www.apachelounge.com/download/win64/

PHP
http://windows.php.net/download/#php-5.4


Instalei o Apache como serviço, testei no browser, tudo OK.

Descompactei o PHP, segui os passos de configuração do Apache, decidir instalar o PHP como módulo do Apache.

Quando fui iniciar o serviço do Apache deu o seguinte erro:

The Apache service named
reported the following error: >>>
httpd.exe: Syntax error on line 497 of C:/Apache24/conf/httpd.conf: Cannot load C:/php/php5apache2_4.dll into server: %1 n\xe3o \xe9 um aplicativo Win32 v\xe1lido.



Depois de alguns muitos minutos de busca no Google, consegui achar o caminho para resolver esse probleminha.

Nesse resposta consegui o link da versão 64bits do PHP, da versão atual.
http://stackoverflow.com/questions/8263297/cannot-load-php5apache2-2-dll/13510720#13510720

Tem um link para esse endereço
http://www.apachelounge.com/download/additional/


Fui na sessão Members e baixei a versão 64bits do PHP

PHP 5.4.13 available (x64 & x86)
http://www.apachelounge.com/viewtopic.php?p=24113



Fiquem na Paz!!!

domingo, março 10, 2013

Voltando as atividades aqui no Blog

HI,

Depois de alguns meses sem publicar uma só linha aqui nesse espaço que costumo compartilhar as soluções de problemas (na área da nossa profissão) que vou encontrando soluções pelo caminho, voltei a publicar.

Porque tanto tempo afastado?

Acabei ficando sem tempo. Tava numa época de preparativos pro meu casamento. Casei em fevereiro. Graças a Deus tá tudo uma maravilha.



Fiquem na Paz!!!

Instalação manual do MySQL

HI,

Baixei a versão atual do MySQL Community Server e só tinha a versão 64 bits em zip pra baixar.

Segui essa receita de bolo e minha versão tá funcionando beleza.
http://dev.mysql.com/doc/refman/5.6/en/windows-install-archive.html

Pra manipular meu banco de dados instalei o MySQL Workbench
http://www.mysql.com/downloads/workbench/


Fiquem na Paz!!!

quarta-feira, outubro 03, 2012

Exportar relatório do Crystal Report em PDF no Asp.net

HI,

Hoje tava bricando um pouco com um exemplo que fiz em Asp.net acessando um arquivo .rpt do Crystal Report. Já tinha conseguido visualizar e passando um parâmetro.

Para gerar um pdf a partir desse relatório, usei essas dicas:

Generate a PDF File using CrystalReports
http://www.codeproject.com/Articles/16379/Generate-a-PDF-File-using-CrystalReports


How can I export the crystal report to PDF directly?
http://forums.asp.net/t/1585859.aspx/1

O primeiro exemplo salva um arquivo pdf no disco, o segundo exibe o relatório no browser.

No segundo link, o código que usei foi esse:


MemoryStream oStream; // using System.IO
       oStream = (MemoryStream)
       oRpt.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
        Response.Clear();
       Response.Buffer = true;
       Response.ContentType = "application/pdf";
       Response.BinaryWrite(oStream.ToArray());
      Response.End();


No primeiro link não usei a funçao toda, só a parte que me interessava,  a que salva no disco.

Fiquem na Paz!!!!

Erro NullPointerException ao usar notifyDataSetChanged no Android

HI,

Vou contar um pouco da história primeiro.

Resolvi colocar uma opção de busca em uma ListActivity. Coisa simples, apenas um like no whera da query de pesquisa. Fazia um busca e não atualizava a tela e quando eu pressionava algum item dava erro. É que a query não retornava nada e dava erro, só percebi que a query não tava retornando nada depois de um bom tempo. Para atualizar eu precisava usar o comando notifyDataSetChanged() (detalhe: se a query retorna algum registro, a tela era atualizada,  a bronca era só quando não retornava registros)

Esse é o bloco de comandos que atualiza a tela, a list ou uma mensagem indicando que não retornou nada.


    private final Handler handler = new Handler() {
        @Override
        public void handleMessage(final Message msg) {
            progressDialog.dismiss();
            if ((dias == null) || (dias.size() == 0)) {
                empty.setText("Listagem Vazia");
            } else {
                mAdapter = new MyCustomAdapter();
                setListAdapter(mAdapter);
            }
        }
    };


Coloquei o comando notifyDataSetChanged() após o empty.setText("Listagem Vazia"); e ficou funcionando blz. Mas... quando fui testar num tablet e não tinha registro ainda, quando fui acessar a tela, deu erro de java.lang.NullPointerException. Fiquei sem entender um pouco por que fui testar no smartphone excluíndo todos os registro e mostrou a mensagem Listagem Vazia, mas quando sair e voltei pra tela, deu o mesmo erro. Pesquisando mais uma vez no google, encontrei a solução, graças a Deus e a quem colocou.

o bloco de comando ficou assim:


    private final Handler handler = new Handler() {

        @Override
        public void handleMessage(final Message msg) {
            progressDialog.dismiss();
            if ((dias == null) || (dias.size() == 0)) {
                empty.setText("Listagem Vazia");
               
               
                if (mAdapter != null){
                mAdapter.notifyDataSetChanged();
                }

            } else {
                mAdapter = new MyCustomAdapter();
                setListAdapter(mAdapter);
            }
        }
    };



Achei aqui

Android java.lang.RuntimeException: Unable to resume activity
http://stackoverflow.com/questions/10897551/android-java-lang-runtimeexception-unable-to-resume-activity

foi preciso colocar um teste para saber se o adapter era null.

Agora tá 100% o lance da pesquisa



Fiquem na Paz!!!

terça-feira, outubro 02, 2012

Saber se uma string é um número válido

HI,

Precisei de uma função para saber se o texto de uma busca era formado apenas por números. Achei uma rotina que inda até se o número é valido. Estou usando em um aplicativo android.

Se o usuário digitar apenas um número, aí eu também pesquiso pelo _id do registro, além de pesquisar por outros dois campos varchar.

Achei aqui

How to check if String() value is numeric
http://www.coderanch.com/t/401142/java/java/check-if-String-value-numeric

Essa é a rotina


if ("-2324.00".matches("((-|\\+)?[0-9]+(\\.[0-9]+)?)+")) {
System.out.println("Is a number");
} else {
System.out.println("Is not a number");
}


Fiquem na Paz!!!

sexta-feira, setembro 28, 2012

Centralizar o menu na horizontal usando CSS

HI,

Não precisei mais usar esse código, mas deixo aqui caso alguém precise.

When Is a Float Not a Float?
http://www.search-this.com/2007/09/19/when-is-a-float-not-a-float/



Fiquem na Paz!!!