terça-feira, dezembro 13, 2011

Percorrendo os registros de uma consulta no Sqlite

HI,

Precisei num programa para Android, percorrer todos os registros que uma consulta.

Pesquisei como implementar um while e achei esse código


Cursor cur = db.query("tbl_countries", null, null, null, null, null, null);
        cur.moveToFirst();
        while (cur.isAfterLast() == false) {
            view.append("n" + cur.getString(1));
           cur.moveToNext();
        }
        cur.close();

o restante do código se encontra aqui
http://www.higherpass.com/Android/Tutorials/Accessing-Data-With-Android-Cursors/2/


Fiquem na Paz!!!!

sexta-feira, dezembro 02, 2011

Problema com acentuação no Sqlite do Android

HI,

Estava com esse probleminha na rotina de importação do arquivo no formato csv. As palavras acentuadas eram gravadas no banco de dados com os caracteres acentuados com uma interrogação no seu lugar. A palavra Atenção por exemplo, era gravada com Aten??o.

Depois de muito procurar, acabei achando essa solução

Android - make sure the SQLite uses UTF-8 as charset
http://stackoverflow.com/questions/4276215/android-make-sure-the-sqlite-uses-utf-8-as-charset/6002118#6002118


Fiquem na Paz!!!!

Mais um erro ao restaurar backup do Firebird

HI,

Precisei pegar um banco de dados de um cliente, e deixar a base vazia, excluir todos os registros, mas não de todas as tabelas.

Fiz o backup, e na hora de restaurar deu o seguinte erro: Invalid token. Malformed string.

Procurando no google, achei essa solução

[firebase-br] Problema ao restaurar backup na versão FB 2.5
http://firebase.com.br/pipermail/lista_firebase.com.br/2010-February/066318.html

aqui tem um help sobre backup/restore
http://www.destructor.de/firebird/gbak.htm

meu comando ficou assim
gbak -c -v -fix_fss_m win1252 -user SYSDBA -password masterkey C:\vazio_backup.fbk C:\vazio.gdb


Fiquem na Paz!!!

Tratando o evento voltar do android

HI,

Tive a necessidade de verificar se o usuário estava acionando o botão de voltar do android.

Fiz uma tela de cadastro de clientes, e seria complicado depois de digitar todos o campos, sem querer o usuário voltar para a tela anterior, perdendo tudo o que foi digitado.

Quando se está inserindo um novo registro, pergunto no evento se o usuário deseja mesmo voltar para a tela anterior, e informo que todos os dados digitados serão perdidos.

Achei aqui essa dica

Android: Prompt user to save changes when Back button is pressed
http://stackoverflow.com/questions/2459848/android-prompt-user-to-save-changes-when-back-button-is-pressed/2459967#2459967


Fiquem na Paz!!!!

sábado, novembro 05, 2011

Enviando email no Android

HI,

Estava precisando de uma rotina para enviar email dos erros que acontecem na tela de comunicação de um programa que fiz. Essa tela recebe um arquivo zipado com arquivos de atualização e também envia arquivos para a empresa. Além de implementar um tratamento de erro para mostrar na tela do usuário, também queria que esse registro fosse enviado para mim.

Achei duas maneiras de se enviar email, por intent e de forma automática. Por intent precisa da intervenção do usuário.

Estou usando essa rotina

Sending Emails without User Intervention (no Intents) in Android
http://www.jondev.net/articles/Sending_Emails_without_User_Intervention_%28no_Intents%29_in_Android

achei essa rotina aqui

Sending Email in Android using JavaMail API without using the default android app(Builtin Email application)
http://stackoverflow.com/questions/2020088/sending-email-in-android-using-javamail-api-without-using-the-default-android-ap

e por intent

How to send email from your application
http://www.helloandroid.com/tutorials/how-send-email-your-application


Fiquem na Paz!!!!

sexta-feira, novembro 04, 2011

Erro ao restaurar backup do Firebird

HI,

Mais uma aventura com o Firebird.

Recebi o backup de um cliente e acredito que a versão do banco dele seja menos atualizada que a minha. Estou usando o Firebird 2.5

Ao restaurar recebi essa mensagem quando tava em uma tabela:

IBE: Invalid token.
     Malformed string.

Pesquisando, achei a solução, graças a Deus e aqueles que disponibilizam seus conhecimentos e... valeu google.

Esse foi o comando que usei para conseguir restaurar o banco

gbak -r -p 8192 -create -v -user SYSDBA -password masterkey -FIX_FSS_METADATA WIN1252 -REP banco.fbk banco.gdb

links que achei

http://tech.groups.yahoo.com/group/firebird-support/message/110416
http://firebirdpt.wordpress.com/2008/06/28/backup-e-restore-com-gbak-em-linha-de-comando/
http://firebase.com.br/pipermail/lista_firebase.com.br/2010-February/066318.html


Fiquem na Paz!!!!

quinta-feira, outubro 20, 2011

Alterando a quebra de linha de um campo no Sqlite

HI,

Precisei trocar a quebra de linha de um campo aonde é armazenada uma observação. O problema é que o usuário pode digitar com quebra de linha e quando exporta o arquivo txt, o registro fica em mais de uma linha no arquivo.

Para solucionar, tive que dá um replace no select para trocar a quebra de linha por um espaço.

Achei a dica aqui

How to remove carriage returns in a text field in sqlite?
http://stackoverflow.com/questions/4642535/how-to-remove-carriage-returns-in-a-text-field-in-sqlite


Fiquem na paz!!!

Programa incompatível com Motorola Xoom no Android Market

HI,

Foi detectando um problema com o motorola xoom ao baixar um aplicativo que está no Android Market. Disse que era incompatível. Como instalando pelo dropbox não tinha problema nenhum, então fui a caça da solução.

Consegui resolver o problema com essas dicas

Application does not show up in Android Market for Motorola XOOM tablet
http://stackoverflow.com/questions/5116768/application-does-not-show-up-in-android-market-for-motorola-xoom-tablet


Fiquem Na Paz!!!!

quinta-feira, outubro 13, 2011

Detectando a mudança de orientação da tela no android

HI,

Precisei dessa rotina para saber quando a visualização está na horizontal, para aplicar um outro layout. É que nesse não dava para usar scroll.

Tou usando esse exemplo

How to detect orientation change in layout in Android?
http://stackoverflow.com/questions/5726657/how-to-detect-orientation-change-in-layout-in-android

Também achei esse
http://android-er.blogspot.com/2010/08/orientationeventlistener-detect.html

Fiquem na Paz!!!

segunda-feira, setembro 05, 2011

TextView com mais de uma linha no Android


HI,

Precisei fazer uma tela para o usuário informar uma observação e queria que tivesse mais de uma linha.

Consegui fazer usando partes desse código no layout do meu TextView



android:layout_width="wrap_content" android:layout_height="wrap_content"
android:lines="5" android:gravity="top|left" android:inputType="textMultiLine"
android:scrollHorizontally="false"
android:minWidth="10.0dip"
android:maxWidth="5.0dip"/>

que achei aqui

Android multi line editText (Text area)
http://stackoverflow.com/questions/2446544/android-multi-line-edittext-text-area


Fiquem na Paz!!!

quinta-feira, setembro 01, 2011

Manipulando arquivos com o Java

HI,

Precisei testar no android se um arquivo existia, e depois de ler o seu conteúdo, deletá-lo.

Usei as rotinas que achei aqui

Basic File Manipulation With Java
http://www.higherpass.com/java/Tutorials/Basic-File-Manipulation-With-Java/


Fiquem na Paz!!!

segunda-feira, agosto 29, 2011

Otimizando o processo de insert de muitos registros no Android

HI,

A rotina de importação que implementei usando o ContentValues... put... insert... ficou uma carroça puxada por lesmas. Vou ter que refazer tudo. Procurei por dicas no google e achei bons materiais. Ainda vou implementar.

Aconselho uma lida nesse testo

Database Speed Comparison
http://www.sqlite.org/speed.html

Achei dua maneiras, e as duas tem que ter controle de transação.

How to speed up multiple inserts in SQLite
http://www.tanguay.info/web2008/codeExample.php?id=728

Android: Using DatabaseUtils.InsertHelper for faster insertions into SQLite database
http://www.outofwhatbox.com/blog/2010/12/android-using-databaseutils-inserthelper-for-faster-insertions-into-sqlite-database/

Tem esse outro texto também sobre como otimizar

SQLite Optimization FAQ
http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html


Acredito que eu passe a utilizar esse código


try {
    mDb.beginTransaction();
    for (Value value : values) {
        ih.prepareForInsert();
        ih.bind(colIdx, value.getSomeValue());
        // ...
        ih.execute();
    }
    mDb.setTransactionSuccessful();
} finally {
    mDb.endTransaction();
}

editando

Achei esse código e estou utilizando ele. Passou de uns 15 minutos para menos de 1, hehehe.

Notes on Android SQLite bulk insert
http://sagistech.blogspot.com/2010/07/notes-on-android-sqlite-bukl-insert.html


Fiquem na Paz!!!

domingo, agosto 28, 2011

Função Split no Delphi

HI,

Estou utilizando essa função numa rotina para importar um arquivo texto delimitado.

Splitting a string in a string list
http://www.delphi3000.com/articles/article_2618.asp?SK=


Fiquem na Paz!!!

quarta-feira, agosto 24, 2011

Controle de transação no SQLite

HI,

Precisei colocar um controle de transação em uma rotina do sistema para Android que estou desenvolvendo.


db.beginTransaction();
try {
db.execSQL(...);
db.execSQL(...);
db.setTransactionSuccessful();
} finally {

db.endTransaction();
}


achei aqui essa dica
http://groups.google.com/group/android-developers/browse_thread/thread/ebe11a0fada35754

outro exemplo
http://www.helloandroid.com/tutorials/database-transactions

Fiquem na Paz!!!

Utilizando um dialogo de confirmação no Android

HI,

Aprendi uma maneira simples de criar um dialogo para solicitar a confirmação do usuário sobre alguma ação que será executada ou não no sistema. Um dialogo com as opções de SIM e NÃO por exemplo.

Achei a dica aqui

How to display a Yes/No dialog box in Android?
http://stackoverflow.com/questions/2478517/how-to-display-a-yes-no-dialog-box-in-android/2478662#2478662



DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        switch (which){
        case DialogInterface.BUTTON_POSITIVE:
            //botão SIM clicado
            break;
        case DialogInterface.BUTTON_NEGATIVE:
            //botão NÃO clicado
            break;
        }
    }
};

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Deseja excluir o registro?").setPositiveButton("SIM", dialogClickListener)
    .setNegativeButton("NÃO", dialogClickListener).show();




Fiquem na Paz!!!

Criando um dialogo personalizado no Android

HI,

Estava usando um AlertDialog para o usuário manipular o registro de uma tabela. O problema começou quando fui colocar um teste para saber se o usuário informou um campo obrigatório. Com o AlertDialog não consegui impedir que a tela se fechasse ao clicar no botão confirmar.

A solução que encontrei foi usar um dialogo personalizado. Dessa maneira se estiver tudo ok, executo o comando de fechar o dialogo.

How to display a custom dialog in your Android application
http://www.helloandroid.com/tutorials/how-display-custom-dialog-your-android-application


Fiquem na Paz

domingo, agosto 21, 2011

Formatando casas decimais no android

HI,

Uma dica que usei para exibir um valor decimal formatado


import java.util.*;

DecimalFormat dec = new DecimalFormat("###.##");

System.out.println(dec.format(value));

peguei aqui
http://www.daniweb.com/software-development/java/threads/32513/161716#post161716

Fiquem na Paz!!!

sábado, agosto 20, 2011

Passagem de parâmetro por referência no Android

HI,

Precisei receber o valor de uma função através do parâmetro, já que estava usando a função para retorna um outro valor. No Delphi e C# é moleza. Para conseguir fazer no android, só com essa dica que achei.

Can I pass parameters by reference in Java?
http://stackoverflow.com/questions/1068760/can-i-pass-parameters-by-reference-in-java


AtomicReference ref = new AtomicReference("Hello"); mutate(ref); System.out.println(ref.get()); //Goodbye! private void mutate(AtomicReference ref) { ref.set("Goodbye"); } Espero que possa ser útil Fiquem na Paz!!!

terça-feira, agosto 16, 2011

Criando arquivo texto com quebra de linha ( arquivo CSV )

HI,

Vou ter que criar um arquivo txt  no sistema que estou desenvolvendo.

Criei o arquivo usando essa dica

How to export data to CSV file – Java
http://www.mkyong.com/java/how-to-export-data-to-csv-file-java/

A bronca que surgiu, foi que no notepad não mostrava cada registro em uma linha, só no wordpad.

Achei a solução aqui para resolver isso
http://stackoverflow.com/questions/4794428/android-java-newline-not-working

só usar: \r\n
no exemplo tem somento \n


Fiquem na Paz!!!!

quarta-feira, agosto 10, 2011

Exibir texto com quebra de linha no android

HI,

Pretendo montar uma mensagem com quebra de linha usando o AlertDialog. Procurei por um exemplo usando o \n e acabei achando um bem melhor.

Nesse exemplo usa-se a tag BR do html para criar o efeito de quebra de linha

articleTextView.setText(Html.fromHtml(textForTextView));


achei aqui
http://stackoverflow.com/questions/2840608/how-do-i-add-a-newline-to-a-textview-in-android


Fiquem na Paz!!!!

terça-feira, agosto 09, 2011

Android SQLite Database - Tutorial

HI,

Um exemplo para se trabalhar com banco de dados no android

Android SQLite Database - Tutorial
http://www.vogella.de/articles/AndroidSQLite/article.html


Fiquem na Paz!!!

Manipular evento do spinner ao mudar item

HI,

Essa dica é para executar algum código ao selecionar um item do spinner.

Nesse exemplo vi que tem um evento ao não escolher nada ou ao escolher o mesmo item, não sei ao certo. Na verdade estou enfrentando esse problema, ao clicar no item que já está selecionado.

Android Spinner: Get the selected item change event
http://stackoverflow.com/questions/1337424/android-spinner-get-the-selected-item-change-event


Fiquem na Paz!!!

quinta-feira, agosto 04, 2011

Erro ao usar Spinner e Cursor

HI,

Ontem me deparei com um erro ao entrar pela segunda vez numa tela que tem uns quatro spinners. No log dizia que a tabela já tava aberta, algo assim.

Os erros que peguei e procurei no google são esses

ERROR/Cursor(296): Finalizing a Cursor that has not been deactivated or closed. database = /data/data/, table = null, query = select _id, Codigo, Descricao from tabela


08-04 03:38:15.472: ERROR/Cursor(298): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here


O erro foi solucionado usando o comando: startManagingCursor(cursor);

Que achei aqui


Fiquem na Paz!!!!

quarta-feira, agosto 03, 2011

Obter o valor de um campo da tabela associada ao Spinner

HI,

Dessa vez precisei pegar o valor código da tabela associada ao Spinner, que não é o _id. O exemplo que achei permite pegar o valor de qualquer campo. Então dá para pegar o valor do campo descrição ou código.

Exemplo:

Tabela sexo com os seguintes campos: _id, codsexo e descsexo

codsexo seria F | M
e descsexo FEMININO | MASCULINO

Para pegar o _id é só usar esse esquema:
int cod_id = spinnersexoIndex.getSelectedItemPosition();


E para pegar o valor dos demais campos:


String spinnerString = null;
Cursor cc = (Cursor)(spinnersexoIndex.getSelectedItem());
if (cc != null) {
    spinnerString = cc.getString(
        cc.getColumnIndex("codsexo") );
}

peguei esse exemplo aqui
http://stackoverflow.com/questions/1776552/android-how-to-get-selected-item-from-data-driven-spinner


Fiquem na Paz!!!!

segunda-feira, agosto 01, 2011

Evitando que a tela do android desligue

HI,

Existe um processo executado no meu aplicativo que demora um certo tempo e tava querendo que a tela não desligasse, para não pará-lo.

Na dica que achei existem duas maneiras para se fazer isso. Uma é via código e outra é um parâmetro do layout.

Keep the screen on
http://www.androidsnippets.com/keep-the-screen-on

Na pesquisar eu achei esse código para executar algum código quando a tela é ligada ou desligada

Handling Screen OFF and Screen ON Intents
http://thinkandroid.wordpress.com/2010/01/24/handling-screen-off-and-screen-on-intents/

domingo, julho 31, 2011

Executando um arquivo de áudio no android

HI,

Estou querendo avisar quando termina um determinado processo aqui no meu programa utilizando um arquivo de áudio. Tipo um beep para avisar que terminou.

Encontrei duas dicas e numa delas um site com arquivos de áudio.

Creating Sound Effects in Android: Part 1
http://www.droidnova.com/creating-sound-effects-in-android-part-1,570.html

Estou usando esse Sound Effects no meu aplicativo

também achei esse outro, mas não consegui utilizá-lo

beep by Intent
http://www.androidsnippets.com/beep-by-intent

e o site com áudios para download
http://www.soundjay.com/beep-sounds-1.html

é isso aí, espero que posso ser útil

fiquem na Paz!!!!

terça-feira, julho 26, 2011

Passando valores entre Activities no Android

HI,

Estou usando essa técnica para passar valores entre Activities. Exemplo: Passar o row_id do cliente escolhido para a próxima tela.

Passing Data Between Activities via Bundles
http://droidweb.com/2010/02/developer-tip-10-passing-data-between-activities-via-bundles/

outro link
http://thedevelopersinfo.wordpress.com/2009/10/15/passing-data-between-activities-in-android/

Qualquer dúvida, podem dizer.

Fiquem na Paz!!!!

segunda-feira, julho 11, 2011

Abreviando nome no Oracle

HI,

Para melhorar a comparação entre um nome digitando com um armazenado no banco, resolvi utilizar uma função para auxiliar. Dei preferência por essa que retorna apenas o primeiro e último nome. Assim se tiver armazenado abreviado, não tem problema. Não se trata de uma comparação crítica, é para validar a abertura de uma conta aonde o usuário precisa acertar um documento de identificação, a data de nascimento e o nome da mãe.

Código da função


CREATE OR REPLACE FUNCTION abrevia_nome (pValue IN VARCHAR2)
RETURN VARCHAR2 IS

nome VARCHAR2(100);
Saida VARCHAR2(2000);

BEGIN
nome := pValue;
SELECT SubStr(nome, 1, INSTR(UPPER(NOME), ' ')) ||
REVERSE(Trim(SubStr(REVERSE(nome), 1, INSTR(UPPER(REVERSE(NOME)), ' ')))) INTO saida FROM dual;

RETURN Nvl(Saida, pValue);
END; -- Funcao abrevia_nome


achei ela aqui

Fiquem na Paz!!!!

sábado, julho 09, 2011

Remover acentos de strings (C#)

HI,

Passei a usar essa rotina em meus códigos.

Remover acentos de strings (C#)
http://www.e-bee.com.br/site/index.php/2009/04/08/remover-acentos-de-strings-c/


Fiquem na Paz

quinta-feira, julho 07, 2011

Abrir o modalpopup ao entrar na página

HI,

Precisei desse código para mostrar ao usuário as instruções de utilização de um site. Quase ninguém vai na página de ajuda, hehehe. Ligam logo para o call center.

How To Open ModalPopup on page Load in ASP.NET
http://aspdotnetcodebook.blogspot.com/2008/01/how-to-open-modalpopup-on-page-load-in.html


fiquem na Paz!!!

quinta-feira, junho 30, 2011

Lendo e Escrevendo arquivos no Android

HI,

Mais um recurso que vou usar em um sistema para android que tou desenvolvendo.

Vou precisar ler arquivos recebidos via ftp para popular as tabelas do sistema.

Android writing and reading files
http://huuah.com/android-writing-and-reading-files/

Fiquem na Paz!!!

Compactando e Descompactando no Android

HI,

Vou deixar uma solução que achei para compactar e descompactar via programação no Android.

Estou usando no sistema que estou desenvolvendo. Ficou uma beleza.

Unzipping Files with Android (Programmatically)
http://www.jondev.net/articles/Unzipping_Files_with_Android_(Programmatically)

Zipping Files with Android (Programmatically)
http://jondev.net/articles/Zipping_Files_with_Android_(Programmatically)


Fiquem na Paz!!!

sexta-feira, junho 17, 2011

Erro estranho ao implementar captura dos erros no ASP.Net

HI,

Decidi colocar um tratamento de erro em um site que estou criando,  e deu erro ao acessar o site, depois de colocar usuário e senha. O estranho, é que antes não dava nenhum erro, não acontecia nada no modo debug.

Coloquei o código no Application_Error do Global.asax

Essa foi a mensagem de erro que começou a aparecer:


System.Web.HttpException: Arquivo inexistente.
   em System.Web.StaticFileHandler.GetFileInfo(String virtualPathWithPathInfo, String physicalPath, HttpResponse response)
   em System.Web.StaticFileHandler.ProcessRequestInternal(HttpContext context)
   em System.Web.DefaultHttpHandler.BeginProcessRequest(HttpContext context, AsyncCallback callback, Object state)
   em System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   em System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)


Pesquisando no google, achei um problema desses, e provavelmente poderia ser um acesso a um arquivo no CSS. Analisando o CSS, encontrei o problema, tinha uma linha que não usava mais, que jogava no backgroud de uma div uma imagem que não existia.

Achei a solução aqui
http://forums.infragistics.com/forums/p/19543/70812.aspx#70812

Para implementar um log de erros, vocês podem tomar como base esse tutorial
http://www.macoratti.net/07/08/aspn_lge.htm

Solução de como pegar a mensagem de erro, Server.GetLastError()
http://pt.w3support.net/index.php?db=so&id=343014

Caso queiram enviar o erro por email
http://social.msdn.microsoft.com/Forums/pt-BR/aspnetpt/thread/9c152de9-2984-4854-9c48-0354df27225c


Espero que possa ser útil.

Fiquem na Paz!!!!

Fazendo um IFrame ocupar todo o espaço do browser

HI,

Colocaram uma TV aqui na sala para exibir a página de um sistema de monitoramento ( para acompanhar o status de servidores, processos, sistemas, etc. ). Aí eu tive a idéia de criar um sistema para trocar o conteúdo para ser exibido, para não ficar com a TV apenas com um conteúdo. Pensei em fazer em Delphi, mas achei melhor fazer em ASP.Net.

Sabia que ia precisar deixar a página dando refresh a cada x tempo e que precisaria exibir a url do site na mesma página. Consegui fazer isso usando um IFrame. O desafio foi fazê-lo ficar sem as bordas e ocupar toda a área de exibição do browser, mesmo que ele estivesse em fullscreen.

Comecei usando uns javascripts que achei, mas não gostei do resultado. Depois de algum tempo pesquisando, achei uma solução que resolveu o problema da borda e do redimensionamento.

dessa maneira o width e o height ficam de acordo com a área client

Achei aqui
http://stackoverflow.com/questions/247128/how-to-auto-size-an-iframe

Para concluir a página de exibição de páginas, usei essas idéias

Carregando uma página no Iframe no codebehind do Asp.net
http://geekswithblogs.net/ranganh/archive/2005/04/25/37635.aspx

Autorefresh
http://webdesign.about.com/od/metataglibraries/a/aa080300a.htm

Também achei um javascript para a função de refresh
http://www.javascriptkit.com/script/script2/autofresh.shtml


Espero que possa ser útil

Fiquem na Paz!!!

sábado, junho 11, 2011

Migrando um banco Sql Server Compact para SQLite

HI,

Mas uma bronca que consegui resolver, graças a Deus.

Vou iniciar o desenvolvimento de um sistema de forças de venda para android. Fiz um para windows mobile. Como não tava querendo criar todas as tabelas no SQLite, resolvi buscar uma ferramenta para realizar esse trabalho.

O mais perto que cheguei, foi de um programa para migrar um banco de dados SQL Server para SQLite. Antes disso eu tinha encontrado um programa para exportar a estrutura e os dados do SQL Server Compact.

Então eu decidi recriar o banco de dados no SQL Server, e do SQL Server, migrar para o SQLite. Pura gambiarra? hehehe. O importante é que consegui criar o banco de dados completo para SQLite.

Receita do que precisei:

Utilitário para exportar a estrutura e os dados do sql server compact usando o SQL Server Management Studio.

SQL Compact data and schema script utility


Programa para criar um banco SQLite a partir de um banco de dados SQL Server

Convert SQL Server DB to SQLite DB

Tem um porém nesse programa. Ao utilizar o executável, deu um erro, disse que não encontrava o System.Data.SQLite.dll. Fui atrás desse arquivo no google e instalei no meu notebook.

System.Data.SQLite

Outro porém. Mesmo instalando, continuou dando erro. Vi que poderia ser problema de diferença de versão. Resolvi baixar o código fonte, adicionar em Reference a dll System.Data.SQLite e executar. Repeti o processo e deu certo



Agora tá tudo blz.

Fica a dica de ferramentas para se trabalhar com o SQLite






Espero que posso ajudar.

Fiquem na Paz!!!

sexta-feira, junho 10, 2011

Trabalhando com o ModalPopup do Ajax Asp.Net

HI,

Não pretendo nesse post ensinar a implementar um dialogo modal no asp.net. Vou colocar aqui todo o material que me ajudou a deixar o meu dialogo funcional, do jeito que eu queria.

Minha necessidade: Uma tela de pequisa, que jogasse a descrição do item desejado em um textbox da página. Usei o ModalPopupExtender e no panel coloquei um textbox para o usuário digitar o termo, um botão para acionar a pesquisa, um gridview para listar o resultado e um botão para fechar o dialogo.

Problemas que encontrei: Ao clicar no botão de Pesquisar, a dialogo fechava. Na paginação, dava erro ao tentar ir para outra página no gridview. Ao entrar novamente no dialogo, os resultados da pesquisa ainda estavam no gridview.


Sites que usei para elaborar meu dialogo modal de pesquisa.

Para implementar o dialogo:

ModalPopup Demonstration

Working with ModalPopup Ajax Control

Using the ASP.NET AJAX ModalPopup in an ASP.NET 3.5 application


Evitando que a tela se feche:


Por exemplo, no botão de Pesquisar, coloquei esse código para evitar que a tela desaparecesse
MyModalPopoupExtender.Show()


Para resolver o problema do pageindexchanging:


analisem esse código

protected void StudentLookupGridView_PageIndexChanging(object sender,GridViewPageEventArgs e)

{

// Recapture the current StudentCollection.

StudentLookupGridView.DataSource =

(StudentCollection)Session["LookupStudentCollection"];

// Set to the “new page”.

StudentLookupGridView.PageIndex = e.NewPageIndex;

// Rebind the data.

StudentLookupGridView.DataBind();

}

outro link, ModalPopupExtender and GridView paging problem


Para limpar o resultado da pesquisa:


GridView1.DataSource = null;
GridView1.DataBind();


Para resetar o SelectedIndex e o PageIndex:

GridView1.SelectedIndex = -1;
GridView1.PageIndex = 0;

Usei a opção AutoGenerateSelectButton do gridview para o usuário clicar e indicar o item que ele deseja escolher. Caso não se faça isso, em uma nova busca vai mostrar selecionado no gridview um item qualquer da mesma posiçao do item seleiconado anteriomente. E também vai indicar no contador de paginação a última página clicada.

Coloquei esses códigos no botão de pesquisar, depois de setar o datasource com o resultado da pesquisa.


Definindo o focus de um componente ao abrir o modal dialog

Usei essa solução. Funcionou perfeitamente.

ASP.NET: Setting Focus in Modal Dialogs


Executando a pesquisa ao pressionar ENTER

Definindo a propriedade DefaultButton do panel, funciona. Mas eu quis utilizar o ENTER também para confirmar a linha selecionada, caso o usuário quisesse usar o TAB para navegar pelas linhas do gridview.

Usei uma função no TextBox da pesquisa, para acionar um cliquei no portão de Pesquisa

Achei aqui




Pronto!!!! Foi tudo que achei em dois dias de trabalho para criar a minha tela de pesquisa. Graças a Deus, tá tudo blz. Agora vou trabalhar no layout.

Ficou assim:



Espero que possa ajudar

Fiquem na Paz!!!!

sexta-feira, junho 03, 2011

Instalando aplicativos no android facilmente

HI,

Sei que tem como instalar através do emulador, mas eu achei uma maneira mais fácil, assim considero. Tou sempre conectado mesmo, hehehe.

É usando o serviço do Dropbox.

Faço o upload do apk e baixo usando o celular, molezinha, hehehe.

Acessem esse link:

Nele tem um passo-a-passo para fazer essa manobra.

Outra opção é pelo QRCode


Fiquem na Paz!!!!

Column does not exist

HI,

Mais uma surra no Android. Levei algumas horas para descobrir o erro. Não tinha procurado no google, por que eu achava que eu tava informando errado o nome do campo, ou que estava pegando a variável da tabela expenses.

Resolvi criar uma tabela no exemplo de estudo para armazenar as categorias das despesas. Criei com os campos idcat e desccat. Criei as classes para manipular a tabela, tudo indo ok, tava inserindo. Mas quando chegou na hora de listar as categorias na tela, deu o seguinte erro: java.lang.IllegalArgumentException: column '_id' does not exist.

O que me confundiu, é que na tabela de expenses, existe esse campo. Pensei que tava misturando os código, etc. Depois de um monte de tentativas, de alterações no código, de criar os log para saber o que estava acontecendo ( no log mostrava o nome certo da variável idcat ). Resolvi pesquisar no google pela mensagem de erro: java.lang.IllegalArgumentException column does not exist . No resultado vi um monte de _id. Achei estranho. Um monte de gente faltando esse campo.

Foi aí que descobrir entrando nas páginas, que usando o SimpleCursorAdapter, é obrigatório ter uma campo único com o nome _id, hehehe. Pensei que ia ter que mudar o nome do campo, de idcat para _id, mas eu vi uma dica de mudar o nome do campo no select, ficando assim: select idcat as _id, desccat from categories.

Mas para executar essa query é preciso usar o rawQuery no lugar do query.

Ficou assim o código:

public Cursor allCategories(){
return mDb.rawQuery("select idcat as _id, namecategory from " + DB_TABLE_CATEGORIES, null);
}

e criei mais uma variável para representar esse campo:

public static final String KEY_CAT_ID = "idcat";
public static final String KEY_CAT_ROWID = "_id";
public static final String KEY_CAT_DESCRIPTION = "namecategory";


é isso aí, espero que possa ser útil.

links que achei




Fiquem na Paz!!!!

quinta-feira, junho 02, 2011

Colocando o title dentro do textbox

HI,

Como não achei logo a solução no google, passei quase o dia todo para fazer isso. Eu já tinha tentando fazer usar isso, até consegui usando um código do jQuery, mas o problema é que no campo senha ao invés de mostrar o tittle, mostrava um monte de asteriscos, hehehe. Tinha desistido de usar, mas aí o setor de marketing aqui da empresa que trabalho disse que eu precisa fazer a tela de login no mesmo estilo da tenha do twitter, sem usar o label do lado do textbox e sim colocar a descrição dentro.

Testei várias soluções, algumas usavam dois textbox para a senha, etc. Por que o lance é ao entrar no text box, mudar o type dele para password.

A solução que tou usando é o ZTINPUTHINT, que é um plugin para o jQuery.

Dica: Controle o tamanho do textbox através do CSS, pq senão ele mostra um textbox de tamanho diferente quando abre a página, e quando você entra no componente é que ele mostra do tamanho que você definiu dentro do html.

É possível ter um CSS para a dica e outra para o texto que vai ser digitado.

Página de demonstração: http://ztinputhint.googlecode.com/svn/other/demo.html

Imagens da opção de login que fiz.







Fiquem na PAZ!!!!

terça-feira, maio 31, 2011

Motorola Atrix

HI,

Como tou aprendendo a programa para o Android e sempre tive a vontade de comprar um celular com esse sistema operacional. Estava esperando o momento certo e ele tinha chegado. Estava com muita vontade de testar o programa no celular. No emulador num é a mesma coisa, hehehe. No windows mobile até dava, já que se usa uma canetinha. Mas passar o dedo na tela do computador, sem condições, hehehe.

Estava esperando para comprar um com android 2.2. E recentemente foi lançado o Motorola Atrix. Pense no desejo de comprar um, mesmo custando quase o preço de um tablet. Mas eu considero essa compra como um investimento, já que tou aprendendo para migrar um sistema de força de vendas que temos para windows mobile.

Mas não estou escrevendo apenas para falar dessa aquisição :-)

Ele tem um probleminha com SMS, hehehe. Pense, quase me causa um problemão. Enviaram SMS para mim e eu nada de receber, e era importante.

Pesquisando no google, encontrei essas soluções. Agora tá tudo blz.




Fiquem na Paz!!!

sexta-feira, maio 27, 2011

Erro 404 no IIS

HI,

Depois de um servidor windows 2003 ser formatado e o IIS instalado novamente, tive que configurar um site em aspx que estou criando.

Não funcionou, deu erro 404, de página não encontrada.

Fui almoçar e nosso gerente de T.I fez um teste colocando uma página teste.html dentro da pasta e ela foi exibida no browser. Então a configuração do endereço do site tava ok.

Pesquisando mais um pouco no google, quando voltei, por "erro 404 ASPX iis" encontrei a solução para o problema. Estava desabilitada a permissão para exibir paginas Asp.Net 2.0.

Links




é isso aí

Fiquem na Paz!!!

domingo, maio 22, 2011

Obtendo o Banco de Dados do emulador Android

HI,

Essa dica é para obter o banco de dados que está no emulador.

Acessem esse site

Precisei manipular o banco de dados para saber como excluir um campo da tabela, criar uma trigger, etc.

Não dá para usar o comando alter table drop column no android. É preciso renomear a tabela, criar uma nova com o mesmo nome, depois dá um select insert para pupular a nova tabela e depois excluir a tabela que foi renomeada.

Fica assim o comando

db.execSQL("ALTER TABLE \"main\".\"expenses\" RENAME TO \"oXHFcGcd04oXHFcGcd04_expenses\"");

db.execSQL("CREATE TABLE \"main\".\"expenses\" (\"_id\" integer PRIMARY KEY ,\"description\" text NOT NULL ,\"value\" number(9,2) NOT NULL );");

db.execSQL("INSERT INTO \"main\".\"expenses\" SELECT \"_id\",\"description\",\"value\" FROM \"main\".\"oXHFcGcd04oXHFcGcd04_expenses\";");

db.execSQL("DROP TABLE \"main\".\"oXHFcGcd04oXHFcGcd04_expenses\";");


Fiquem na Paz!!!

Definindo a data inicial do DatePickerDialog

HI,

Tinha ido dormir umas quatro da manhã tentando definir a data do Date Picker Dialog com a data que tá gravada na tabela quando se está editando o registro. Achei um exemplo, mas não consegui fazer, devia ser o sono, pois, analisando o mesmo exemplo agora de manhã depois de ter acordado ( a hora? meio dia, hehehe ), consegui botar para funcionar.

Agora quando se está editando, é exibida a data que está gravada.

Fiz com base nesse exemplo


Código que estou utilizando

@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_DIALOG_ID:
if (definirdata){
String _date[] = mPickDateExpense.getText().toString().split("/");
mYear = Integer.parseInt(_date[2]);
mMonth = Integer.parseInt(_date[1]) - 1; // mes vai de 0 a 11
mDay = Integer.parseInt(_date[0]);
definirdata = false;
}
return new DatePickerDialog(this,
mDateSetListener,
mYear, mMonth, mDay);
}
return null;
}


Fiquem na Paz!!!

Gravando datas no SQLite do Android

HI,

Continuo avançando aqui no exemplo expenses. Hoje consegui gravar a data no banco de dados, graças a Deus.

Depois de muita tentativa e erro e muitas pesquisas no Google, fui achando as soluções.

Primeiro erro que me deparei foi esse: java.text.ParseException: Unparseable date

Tava tentando converter a data da despesa ( uma string ) que tava no formato dd-MM-yyyy para jogar dentro de uma variável do tipo data. Só depois que percebi que tinha esquecido de trocar o traço pela barra deixando o formato assim: dd/MM/yyyy.

Código para converter uma string em data

SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
Date datepayment = formatter.parse(datepaymentText.getText().toString());

datepaymentText é um Button.

O segundo erro que me deparei foi: java.lang.ClassCastException: java.util.Date

Pensei que o problema era na hora de gravar no campo data da tabela. Desabilitei a linha que dá um insert no banco e mesmo assim tava dando esse erro. Então deduzi que o problema era na passagem de parametro. Fiquei pensando, como é que pode passar um campo data para um metódo que tem uma variavel do tipo data e dá erro?

Pesquisando no google descobrir que ao invés de usar a biblioteca java.sql.Date, eu deveria usar java.util.Date. Depois que fiz isso, não deu mais erro.

E nessa mesma busca vi que eu deveria converter essa variável data que tá no formato dd/MM/yyyy para yyyy-MM-dd, que é o formaro do banco de dados.

O código para gravar a data no banco de dados ficou assim:

public long createExpense(Date datepayment){
ContentValues initialValues = new ContentValues();

SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
dateFormat.applyPattern("yyyy-MM-dd");

initialValues.put(KEY_DATEPAYMENT, dateFormat.format(datepayment));
return mDb.insert(DB_TABLE, null, initialValues);
}

Deixei só o campo data para exemplificar.

Agora tá beleza, tá gravando e recuperando o campo data

Ficou assim a tela do programa




Espero que possa ser útil.

Páginas que me ajudaram
http://www.guj.com.br/java/76586-converter-um-campo-de-um-text-field-em-date#403825
http://www.guj.com.br/java/36076-converter-string-para-uma-data
http://stackoverflow.com/questions/754684/how-to-insert-a-sqlite-record-with-a-datetime-set-to-now-in-android-application
http://stackoverflow.com/questions/3842509/android-java-datetime-values-from-string-to-long-to-string-issue

Fiquem na Paz!!!

Escolhendo uma data com o date picker no android

HI,

Um outro componente que adicionei no formulário foi o Date Picker. O exemplo que achei coloca a data escolhida em um textview e o dialog para a escolha da data é a partir de um button.

Eu modifiquei o código para jogar a data escolhida no próprio button.

Usei o exemplo do site do android
http://developer.android.com/resources/tutorials/views/hello-datepicker.html

Que achei nesse site
http://blog.professorcoruja.com/2010/11/componente-date-picker-no-android-form.html

Fiquem na Paz.

Populando um spinner a partir de um array

HI,

Usei a dica desse site para exibir os valores em um spinner que não estão em uma tabela do banco de dados. Nesse caso, os valores são provenientes de um array.

Para obter a posição do valor selecionado basta usar: Spinner.getSelectedItemPosition()


Fontes:

How to populate a Spinner widget from an Array
http://androidforbeginners.blogspot.com/2010/01/how-to-populate-spinner-widget-from.html

Obtendo a posição do item selecionado
http://stackoverflow.com/questions/2903961/how-to-get-an-items-position-from-items-id-in-android-spinner

Criando widget Spinner
http://www.portalandroid.org/comunidade/viewtopic.php?f=7&t=5670


Fiquem na Paz

sexta-feira, maio 20, 2011

Campo data com valor padrão no SQLite

HI,

Ainda tou engatinhando no Android, levando uns tombos, mas graças a Deus eu tou conseguindo avançar.

No exemplo de controle de despesas já coloquei um spinner para indicar o tipo de pagamento da despesa.



Agora a minha batalha é colocar o campo data dessa despesa. Estava incluindo no SQLite Manager, extensão do firefox, um campo do tipo data e selecionei para não ter valor null, e quando se faz isso, temos obrigação de informar um valor padrão. Tinha colocado SYSDATE, mas não deu certo.

Pesquisando no google, encontrei uma solução usando uma trigger para atualizar a data antes de inserir.

CREATE TABLE foo (
id NUMBER NOT NULL,
created DATE);

CREATE TRIGGER insert_date AFTER INSERT ON foo
BEGIN
UPDATE foo SET created = DATETIME('NOW') WHERE rowid = new.rowid;
END;


Só que dessa maneira aí, o campo vai ser atualizado, mesmo que eu informe a data na tela.

Modifiquei a trigger para testar se o campo está vazio, se tiver, atualiza a data atual do banco.

CREATE TRIGGER insert_date AFTER INSERT ON foo
BEGIN
UPDATE foo SET created = DATETIME('NOW') WHERE rowid = new.rowid and new.created is null;
END;

Agora vou tentar colocar o campo data no formulário.

Espero que possar ser úitl, fiquem na Paz

quarta-feira, maio 18, 2011

Android, primeiro programa com banco de dados.

HI,

Hoje consegui terminar um exemplo de uma aula sobre android da devmedia. Deu um trabalhão danado. O vídeo é do tempo que nem tinha celular com android. Mas graças a Deus e com a ajuda das pessoas que alimentam o google com conteúdo, consegui botar para funcionar. Também tive esse trabalho todo porque não manjo quase nada de Java.

Consegui avançar depois que descobrir como contornar o erro "Source not found". Achei a dica nesse blog para usar controle de exceção e ter no debug a mensagem correta do erro.

E alguns dos erros é que algumas coisas deixaram de existir no sdk atual, e tive que pesquisar como fazer da forma atual.

Alguns sites que me ajudaram:

sobre menu

tive que usar equals para passar uma long para string e testar se era igual a zero, para saber se era vazia.

Esse foi por causa de um erro ao recuperar os dados do item selecionado, tinha que mover para o primeiro, mesmo retornando apenas um resultado

Tela do Programa

Agora vou incrementá-lo. Usar pesquisa, outras tabelas, etc.

Fiquem na Paz.

terça-feira, maio 10, 2011

Exibir dados a partir de uma procedure

HI,

Hoje tive uns probleminhas para exibir o resultado de uma procedure. Um cliente criou uma procedure para retornar os dados dos clientes. Nunca tinha usado isso no Delphi. Criei rapidinho uma tela para exibir esse resultado em um componente grid.

O primeiro problema que tive, e que recorri ao google, foi quando tentei setar o componente TStoredProc para true. Deu o seguinte erro: error creating cursor handle. Pesquisando no google, descobrir que só posso dá um StoredProc1.ExecProc;. Pois bem, associei um datasource ao componente StoredProc1 e em runtime, executei o ExecProc e não mostrou nada no grid. Aí pensei, deve ser por que esse troço só serve para executar comandos que não retornam dados. Foi aí que tive a idéia de dar um select na procedure e usar o componente query.

Ficou assim: Select * from Nome_Procedure. Dei um open e mostrou os resultados no Grid. Mas aí surgiu o segundo problema. Em algumas colunas tava mostrando (BYTES) ao invés do valor do campo.

Coloquei um Label para receber o conteúdo de campo, mas não mostrou nada. Label.caption := Query.FieldByName('codigo').AsString;

Fui a procura de uma rotina para converter de bytes para integer e achei esse código.

Fiz uma adaptação e criei essa função:

function BytesToInteger(Campo: TField): integer;
var MyBuffer : ^integer;
begin
with Campo do
begin
GetMem(MyBuffer, DataSize);
try
if not GetData(MyBuffer) then
result := 0
else
result := MyBuffer^;{ Do something with the data };
finally
{ Free the space }
FreeMem(MyBuffer, DataSize);
end;
end;
end;

Testei na tela e exibiu em um label o código correto, fiquei animado. Depois eu modifiquei a consulta para converter para float, com o resultado, desanimei. Mostrou o resultado em notação científica. Se eu fosse tentar resolver isso ia ficar muito complicado o código, cheio de conversões.


Foi aí que eu tive a idéia de tratar isso na query, fazendo um type cast.

A query tava assim
select codigo, nome, limite from EXPCLIENTES

Modificando a query
select cast(codigo as integer) codigo, nome, cast(limite as double precision) limite from EXPCLIENTES

Passou a apresentar corretamente os campos no Grid.


Espero que possa ser útil.

Fiquem na Paz

segunda-feira, abril 18, 2011

Formatando seu código no blog

HI,

Tou indo domir, mas antes deixo essa dica que precisei utilizar agora para formatar o código de uma rotina em c#. Para ficar um pouco mais elegante.

Primeiro: Edite o HTML do blogspot e coloquei a formatação CSS. Pegue aqui.

Segundo: Utilize este site para formatar seu código http://www.manoli.net/csharpformat/

Terceiro: Cole o código HTML no post ( na opção Editar Html ) e pronto.
public static string GetRandomPasswordUsingGUID(int length)
{
// Get the GUID
string guidResult = System.Guid.NewGuid().ToString();

// Remove the hyphens
guidResult = guidResult.Replace("-", string.Empty);

// Make sure length is valid
if (length >= 0 || length > guidResult.Length)
throw new ArgumentException("Length must be between 1 and " + guidResult.Length);

// Return the first length bytes
return guidResult.Substring(0, length);
}

Na Visualização o código não aparece formatado. Deve ter um outro lugar para colocar o CSS, depois vejo isso.

Intel +, fiquem na Paz!!!

Retornar apenas números e letras

HI,

Estou usando Asp.net com C#

Precisei retornar apenas os números do CPF informado no TextBox, que está com mascara.

Não estava a fim de usar replace. Então pesquisei no google uma rotina que utilizasse Expressão Regularar.

Montei essa função com o que achei.
       /// <summary>
/// Retornar apenas as letras e os números da variável passada como parametro
/// </summary>
/// <param name="valor">Valor com caracteres</param>
/// <returns>Apenas número e letras</returns>
public static string RetornaNumeroLetra(string valor)
{
try
{
Regex regexObj = new Regex(@"[^0-9]");
return regexObj.Replace(valor, "");
}
catch (ArgumentException ex)
{
// Syntax error in the regular expression
throw new Exception(ex.Message);
}
}


Intel +, fiquem na Paz!!!

O Último Retorno

HI,

Quase que não consigo me logar no meu blog, hehehe. Tempão que não apareço por aqui.

Tou voltando para ficar.

Conteúdo para manter esse blog atualizado, tem um montão.

Acabei de fazer um curso de Asp.Net e tou com boas práticas para compartilhar com vocês. Espero que voltem todos, hehehe. E que apareçam mais visitantes.

Também tou estudando Android, mas por conta própria.

Intel +, fiquem na Paz!!!