Links

­ LORENA E RAFAELARAFA TVBLOG RAFA TVTWITTER LORENA & RAFAELAINSTAGRAM LORENA & RAFAELA

sábado, 16 de julho de 2022

Um pouco do meu antigo trabalho

sexta-feira, 8 de outubro de 2021

Kimi, onde está você?

Eu conheci Kimi e sua mãe em uma pequena vila do sertão. Nunca soube o nome da mãe e nem do pai de Kimi. A única coisa que fiquei sabendo, e que me deixou muito irritado, foi o fato de que o pai da menina era muito mal para ela e para a mãe. A sorte era que ele ficava muito tempo fora de casa, tanto que nem cheguei a vê-lo direito, a não ser em uma única vez que o vi passando pelo quintal, mas não vi muita coisa mais que um vulto.

Kimi era uma garotinha de uns cinco anos de idade, linda, meiga, inteligente e muito carinhosa. Eu não conseguia entender que necessidade alguém poderia ter em maltratar uma pessoinha como Kimi. Você assistiu aquele filme de uma menina paranormal chamada Matilda? Kimi era exatamente igual a ela quando tinha a mesma idade dela.

Matilda, do filme homônimo

Pois bem, nessa época, estávamos eu, meu pai e minha irmã em uma casa nessa pequena vila e a mãe de Kimi reclamava dos maus tratos do marido e dizia ter muita vontade de fugir daquele lugar e que queria fazê-lo aproveitando os longos períodos em que o malvado ficava fora de casa.

Resolvemos, eu e meu pai, que as ajudaríamos a se verem livre do facínora.

Não morávamos naquela casa onde as conhecemos e não me lembro muito bem o que, exatamente, estávamos fazendo ali, mas resolvemos trazê-las conosco.

Não me recordo bem o que aconteceu, mas a mãe de Kimi teve que sair às pressas com a menina de lá e quando ficamos sabendo disso, resolvemos procurá-las para tentar descobrir o que tinha acontecido e onde elas estariam. A essa altura, já estávamos apenas eu e meu pai e não sei por qual motivo, nos separamos na busca por Kimi e sua mãe. Me lembro que peguei uma carona em um carro de um senhor que me levou até uma cidade da qual nem fiquei sabendo o nome.

Nessa cidade, encontrei meu pai com seu violão da frente verde. Foi uma ideia que ele teve, tendo em vista que vez ou outra, ele ou eu tocávamos violão e Kimi adorava ouvir nossas músicas. Meu pai tocava o violão de vez em quando, na esperança de que, se a menina ouvisse, acabaria por reconhecer e viria até nós.

Em um determinado momento, estávamos em frente a uma espécie de casa social, grande, se parecendo com o prédio de uma escola, onde tinham diversas pessoas no pátio cercado por uma grade. A situação lembrava um ambiente onde tinha acontecido alguma guerra ou catástrofe natural e aquele prédio seria um apoio às pessoas que, por algum motivo, estavam precisando de alguma ajuda.

Encostamos em uma parte do muro e meu pai começou a tocar alguma coisa. De repente, eis que surge, em uma das portas daquele prédio, Kimi e sua mãe. A menina estava radiante de felicidade. Ela veio correndo em nossa direção e se abraçou com meu pai, que estava mais à frente e mais perto dela. Eu a peguei nos braços logo em seguida. Kimi estava com um sorriso e um olhar de felicidade encantadores. Dei um beijo no queixo dela e ela ampliou ainda mais aquele lindo sorriso. Eu estava muito feliz por tê-las encontrado, e foi nesse momento que acordei e percebi que, apesar de parecer tão real, a ponto de até hoje eu lembrar todos os detalhes, tudo não passou de um sonho.

Talvez eu tenha vivido algo assim em uma vida passada ou talvez, Kimi seja dessa vida mesmo e esteja em algum lugar. Ou seria, ela, a Matilda de um universo paralelo, onde seu pai seria a contraparte da senhora Trunchbull? Há algum tempo, eu tenho uma ideia de que os sonhos possam ser universos paralelos onde entramos, por um portal, e vivemos histórias malucas. A única certeza que eu tenho, é que permanece a pergunta:

“Kimi, onde você está?”

terça-feira, 13 de abril de 2021

Lorena e Rafaela e Zezé di Camargo no Fantástico

Veja (ou reveja) a matéria do Fantástico sobre a homenagem que Zezé di Camargo fez ao pai, seu Francisco, através do clipe da música "Matuto", composição dele próprio e do Danimar.

Zezé convidou a dupla mineira Lorena e Rafaela para se juntar a ele nessa belíssima homenagem. O motivo para esse convite? Muito simples. Zezé di Camargo e Luciano são fãs de Lorena e Rafaela há anos e seu Francisco, pai deles, também era.

Assista ao vídeo para entender melhor essa história!



segunda-feira, 12 de abril de 2021

A velhice é a infância ao contrário - Reflexão


INTRODUÇÃO


Hoje, quero discorrer sobre um fenômeno do qual todos viemos e outro pelo qual (quase) todos nós passaremos. Esse último, que será o foco principal desse breve discurso, só os que morrerem cedo não conhecerão.


A INFÂNCIA


O primeiro é a infância, aquele período de descobertas, de aprendizado, que definirão nossa personalidade e nosso modo de viver nesse mundo. Aqui, aprendemos lições que levaremos para a vida inteira. É aqui que as lições de nossos pais fazem efeito, pois estamos com a mente limpa, prontinha para ser moldada. Nessa fase, tudo é  mais fácil e rápido de ser fixado no cérebro.

A VELHICE


Esse é o principal foco desse modesto desabafo. Por que? Você deve estar se perguntando. Ok, vamos raciocinar um pouco sobre como o mundo vê a velhice e trata seus idosos, principalmente, os pais, com quem vivemos mais diretamente.

Eu confesso que fico deveras angustiado ao ver como alguns filhos tratam seus pais já velhinhos, como lhes falta paciência para lidar com as falhas e deficiências impostas pela idade. Como ficam irritados quando a pessoa que lhe tanto lhe amou e ainda ama, que muitas vezes, tirou da boca para dar de comer ao filho, deixa cair um copo ou fica com as mãos trêmulas ao levar a comida na boca ou quando não conseguem aprender ou assimilar a forma de fazer alguma coisa. Lembra que a infância é nossa fase de aprendizado? Lembra que eu disse que a velhice é a infância ao contrário? Então, não adianta querer que seu pai ou sua mãe, de idade bastante avançada, aprenda algo na marra. Eles estão desaprendendo as coisas. O cérebro está em processo de finalizar sua capacidade de reter informação e as forças estão se acabando, ao contrário da infância, onde as forças estão em processo crescente e o cérebro só aumentando sua capacidade de guardar dados. Ao querer força-los a algo que não tem mais como conseguir fazer, estamos só piorando a vida deles, deixando-os tristes e desiludidos e causando-lhes dor e sofrimento. Dor na alma, a pior que existe.

Com os idosos, temos que ter paciência, mais do que com crianças, pois essas, estão em processo de evolução, essas, enquanto os idosos estão em processo contrário.

Só queria mesmo passar meu ponto de vista para que possamos meditar sobre a fase da vida pela qual todos nós iremos passar.

E, lembre-se, nossos filhos são nosso reflexo. Como você quer eles te tratem no futuro, quando não tiver mais forças para aprender ou para sequer, caminhar?

Reflitamos!

segunda-feira, 15 de abril de 2019

Dica de hospedagem de site boa e barata



Olá, navegantes! Hoje estou passando para dar uma dica super legal para você que está precisando de uma opção boa e barata para hospedar seu site de forma profissional sem aquele lance amador de www.seusite.subdominio.umprovedorqualquer.qualquercoisa. Estou falando da Hostinger, um serviço de qualidade internacional que tem servidores também no Brasil. Eu uso esse serviço há anos e sempre me atendeu perfeitamente com um suporte ágil e que sempre resolveu rapidamente todas as minhas dúvidas. E para esse mês de abril de 2019, estão com uma promoção super legal. Dê uma conferida.



quinta-feira, 4 de abril de 2019

Livre-se da vergonha de não ter dinheiro para pagar as compras do supermercado




Sabe aquela hora que você vai passar as compras no supermercado e não tem tanto dinheiro assim para pagar e vai ficando preocupado(a) ao ver o valor chegando pertinho do que você tem para pagar no momento? Todo mundo já passou por isso ou viu alguém passar, não é mesmo? Pois bem, isso não é mais problema. Encontrei um aplicativo muito legal que você pode usar no celular na hora que estiver colocando suas compras no carrinho. Basta ir colocando a quantidade e preço unitário de cada um que o sistema vai calculando tudo pra você. Veja, no vídeo abaixo, como funciona:


E o melhor de tudo, é que a versão para celular funciona sem a necessidade de estar conectado na Internet. Ele armazena a sua lista localmente para que você não a perca. Legal, né?

O site para se cadastrar e para instalar o aplicativo no seu celular é o lidec.pe.hu.

sábado, 30 de março de 2019

Está a procura de um emprego?



Uma oportunidade em tempos de desemprego

Hoje vou falar de um sistema que descobri que auxilia na busca de uma colocação em vários setores do mercado de trabalho. Trata-se da Revelo, um sistema online que conecta empresas e candidatos a uma colocação nessas empresas.


Um sistema como muitos outros que existem no mercado, você deve estar pensando. Bem, há um diferencial interessante na Revelo que, a meu ver, facilita e agiliza o processo. Eles tem um sistema de testes relativamente simples, rápido, imediato e online que dispensa a necessidade da empresa interessada em contratar, fazer esses testes posteriormente, o que acarretaria em tempo extra.

A empresa é idônea?

Para me certificar da idoneidade da empresa, eu mesmo dei uma pesquisada no site Reclame aqui e constatei poucas reclamações envolvendo o nome da mesma e, pelo que pude perceber, no que dependia deles, fizeram o possível para solucionar todos os casos da melhor forma possível. Com base nisso e em comentários de muitas pessoas que atestam ter conseguido uma boa colocação intermediada pela empresa - entre essas pessoas, até mesmo algumas das que reclamaram no Reclame aqui - eu posso dizer que se trata, sim, de uma empresa confiável e que está pronta a te ajudar na sua busca pelo tão sonhado emprego.

Como participar?

1 - Faça seu cadastro. Você pode enviar seu currículo nessa etapa, dizer o que está buscando e definir quando quer começar o processo;

2 - Numa etapa inversa ao que normalmente acontece, as empresas interessadas vem até você e você decide se aceita ou não;

3 - Você escolhe as empresas que mais lhe agrada e um especialista da Revelo o ajudará a se preparar para a entrevista;

4 - Escolha a empresa e estará praticamente no mercado de trabalho pela nova empresa.

Ah, é grátis, você não paga absolutamente nada para participar do processo. Aproveite e faça seu cadastro agora mesmo, clicando aqui


sábado, 8 de julho de 2017

quinta-feira, 28 de julho de 2016

segunda-feira, 28 de setembro de 2015

Lorena e Rafaela cantando em japonês


Uma linda interpretação em japonês de Lorena e Rafaela.

Lorena é uma elegantíssima nerd da classe dos otakus. Ela adora mangá. Ela lê e desenha muito bem alem do seu incontestável talento para a música.

Rafaela é uma das mais lindas, charmosas e talentosas cantoras do mundo.

Elas merecem todo o nosso amor, admiração e carinho.

sábado, 18 de abril de 2015

Brasileiros que poderiam interpretar o Super Homem no cinema - Galeria


sábado, 4 de abril de 2015

Qual é o seu herói e a sua editora preferidos?

Se tem uma coisa que costuma mexer com os nervos dos fanboys, é falar sobre editoras e heróis (a rima foi totalmente despretensiosa).
Acabei de criar uma enquete com alguns dos heróis mais famosos das duas principais editoras do gênero, a DC Comis e a Marvel, e até o presente momento, mesmo com uma quantidade de votos baixa, já dá para perceber algumas coisas que talvez ainda mudem ao decorrer do tempo.
Assim como em outras pesquisas que tenho visto, fica clara a preferência pelo Super Homem da DC e do Homem Aranha da Marvel.
Outra coisa que podemos observar é que o Super Homem continua sendo o maior herói de todos. Na pesquisa em que o votante escolhe o melhor entre o escolhido da DC e o escolhido da Marvel, Super Homem fica em primeiro lugar e Homem Aranha em segundo. Com isso percebemos que os dois são os mais queridos da maioria dos brasileiros.
Por último e não menos importante, na parte em que o votante escolhe a editora preferida, temos a DC Comics com uma boa vantagem sobre a Marvel até o momento.
Claro que você ainda pode ajudar a mudar os rumos dessa pesquisa, caso não concorde com os rumos que ela está tomando. Basta acessá-la, dar seu voto e, se quiser, divulgá-la para todos que puder. Para isso, clique aqui.

sexta-feira, 13 de março de 2015

Banco de dados em TXT e PHP – Parte 1


Fala galerinha! Tudo na tranquilidade? Espero que sim.
Depois de algum tempo estou voltando com mais um pequeno tutorial, dessa vez voltado para o PHP. Falarei sobre como criar banco de dados em arquivo txt.

Você deve estar se perguntando porque raios alguém criaria um banco de dados em txt e usaria php para acessá-lo se a maioria dos servidores - mesmo os gratuitos - que tem suporte a php também tem suporte a mysql, certo? Eu respondo. Imagine a seguinte situação: você criou um site em um subdomínio ou mesmo com um domínio próprio mas com hospedagem gratuita. Geralmente hospedagens gratuitas são bastante limitadas. O banco de dados mesmo costuma suportar um número pequeno de registros. Imagine que o banco de dados do seu servidor gratuito lhe dá o direito a ter apenas dez mil registros na base de dados e você pretende criar uma pesquisa para a qual espera umas 50 mil respostas. Seu banco de dados não conseguirá armazenar isso tudo, concorda? E ainda existem alguns hosts gratuitos que tem suporte a php mas não tem suporte a bancos de dados. É aqui que entra o banco de dados em txt.

Dica para quem trabalha com programação web

Primeiramente, quero deixar uma dica muito útil para quem trabalha com programação voltada à web. Trata-se de um programa chamado phpStorm desenvolvido pela empresa jetBrains, bastante eficaz por trazer uma infinidade de recursos como reconhecer diversas linguagens de programação e de scripts, tais como: php, javascript, mySql, css, css3, html, html5 etc.


Entre os recursos do programa, podemos destacar o reconhecimento das milhares de dependências das linguagens que ele suporta bem como das variáveis já criadas, dando dicas sobre elas ao digitarmos os comandos. Isso facilita demais o trabalho do programador.

Para usufruir dessa maravilha, basta acessar a página de downloads no site da jebBrains, www.jetbrains.com/phpstorm.

Passos iniciais

Bem, em primeiro lugar, precisamos nos certificar de que o host tenha suporte a php, lógico. Talvez, nesse ponto, você esteja se perguntando porque não usamos javascript que roda em praticamente qualquer página? Novamente, eu respondo: o javascript é uma linguagem client-side, ou seja, que roda no lado cliente. Portanto, uma tentativa de criar um arquivo ou escrever nele usando essa linguagem faria-a tentar criar ou escrever o arquivo no computador do usuário e não no servidor, a não ser que seja dada permissão para isso no servidor, o que não é recomendado, pois acarretaria em falha de segurança, sem contar que o javascript puro, para esse caso, só funcionaria no Internet Explorer, pois os outros browsers não tem suporte nativo ao objeto de criação de arquivos. E ainda há o fato da possibilidade do javascript estar desabilitado no computador do usuário.

Com isso devidamente esclarecido, continuemos: também é conveniente verificar se o host aceita arquivos .htaccess, um tipo de arquivo de configurações que poderemos usar para dar uma certa segurança contra abertura do arquivo de texto pelo browser ou a partir de outro site - os chamados "hot links".

Quais arquivos criarei?

Para esse pequeno projeto, criaremos, a princípio, apenas três arquivos básicos, a saber:

1 - index.html: terá o formulário com os campos a serem preenchidos;

2 - cadastrar.php: aqui o código que fará toda a mágica acontecer;

3 - .htaccess: será o arquivo aonde definiremos parâmetros que permitirá uma certa proteção ao txt.

Mais adiante veremos outros dois arquivos para criar uma enquete e gravar os resultdos no banco txt, além de pesquisar e retornar os resultados.

Vamos aos códigos

Para esse projeto criaremos, a princípio, um banco de dados de usuários.

index.html

Algumas observações importantes para quem é iniciante em php e gravação de dados vindos de um formulário:

1 - existem dois métodos de capturar os dados vindos do formulário. Um deles é o POST e o outro é o GET. Cada um é usado de uma forma diferente. Aqui usaremos o POST. Observe como o método é passado dentro da tag do "<form>";

2 – O nome da página que irá processar os dados e gravar no arquivo txt também é passado dentro dessa tag "<form>" por um parâmetro chamado "action";

3 - Os campos precisam ter um nome único dentro de cada "<form>". Esses nomes são passados através do atributo "name". O POST, no php, irá procurar por esses nomes para saber o valor de cada campo. Observe, dentro da tag de cada ‘<input type="text">’, como esse parâmetro é usado;

4 - Por último e não menos importante: o último <input> é do tipo "submit". Ele que irá chamar a página que passamos no "action" do formulário.

código:
   1:  <form name="dbase" method="post" action="cadastrar.php">
   2:      Usuário: <input type="text" name="user">
   3:      Email: <input type="text" name="nome">
   4:      Senha: <input type="text" name="idade">
   5:      Confirmar senha: <input type="text" name="telefone">
   6:      <input type="submit" value="Enviar dados">
   7:  </form>

cadastrar.php

Irei dividir esse tópico em várias etapas para poder explicar melhor cada uma delas.

Capturando os dados vindos do formulário:

Para fins de melhor organização do código, criaremos variáveis para representar os dados vindos do formulário e nessas variáveis passaremos os nomes dos campos utilizando o método POST do qual já falamos anteriormente. Observe o código abaixo:

código:
   1:      $user = $_POST["user"];
   2:      $nome = $_POST["nome"];
   3:      $idade = $_POST["idade"];
   4:      $telefone = $_POST["telefone"];


O que vem antes do sinal de igual é o nome da variável. Podemos dar qualquer nome para uma variável seguindo algumas regras:

1 – Para criarmos uma variável, sempre começaremos colocando um cifrão($) antes do nome da variável;

2 – A variável deve ser única. Não podemos ter duas variáveis com o mesmo nome;

3 – Não podemos colocar espaços e nem acentos nos nomes das variáveis:
      $Nome da variável → incorreto.
      $NomeDaVariavel → correto.
      $nome_da_variavel → correto.

4 – Para quem ainda não está familiarizado com o php, observe que toda linha, quando determinando recebimento de valores, termina com ponto e vírgula(;) assim como acontece no javascript.

O que vem depois do sinal de igual é o valor que cada variável receberá. Observe que para pegar esse valor, utilizamos o método $_POST, que deve ser escrito exatamente dessa maneira, seguido de colchetes. Dentro dos colchetes colocamos, entre aspas, o nome do campo do formulário que contém o dado que aquela variável receberá. O sinal de igual, nesse caso e em toda linguagem de programação, deverá ser ligo como “recebe” e não como “é igual”:

“$user = $_POST[‘user’];” lê-se “a variável $user recebe, pelo método POST, o valor do campo de nome user”.

Fazendo a validação dos dados

Vamos ver, inicialmente, a função que usaremos para criar e/ou abrir o arquivo txt:

fopen: essa é a função que cria o arquivo, caso ele ainda não exista, e abre-o. Essa função contém alguns parâmetros necessários. Para o nosso caso, utilizaremos dois: o nome do arquivo e o tipo de abertura:

código:
   1:  $arquivo = fopen(“dbtxt.azt”, “a+”);

O parâmetro “a+” indica que o arquivo será aberto para leitura e gravação e o cursor posicionado no final do texto para que o próximo texto seja gravado sempre no final do arquivo.

Para aprender como usar os demais parâmetros, acesse o link sobre a função no site oficial do php:

A intenção básica de um banco de dados em txt não é exatamente cadastrar usuários, pois um txt não oferece mecanismos de segurança e proteção à privacidade como um banco de dados mySql por exemplo. Assim sendo, devo alertar que, caso a privacidade das informações a serem cadastradas sejam de vital importância, será melhor utilizar um host com armazenamento de dados ilimitado ou pelo menos com uma quantidade máxima de registros que seja suficiente, apesar de que poderemos adotar alguns métodos que dificultará bastante a invasão ao sistema. Mas como esse tutorial é apenas ilustrativo e pode ser que para determinado caso seja necessário evitar duplicidade de registros, aprenderemos como verificar se o nome de usuário que estamos cadastrando já existe no arquivo txt bem como verificar se algum campo não ficou em branco.

Aqui vai uma dica sobre esse arquivo txt:

1 - Procure dar um nome e uma extensão que sejam difíceis de serem deduzidos, como por exemplo jkmnyukpxd.znk;

2 - Adicione uma página index, mesmo que vazia, na pasta aonde está o arquivo. Isso dificultará que alguém possa abrir o diretório no navegador e ver a lista de arquivos;

Aprenderemos também a melhorar a segurança e a privacidade mais à frente, quando falarmos do arquivo .htaccess.

O bloco de códigos anterior é bem genérico, contendo apenas o básico para se ter uma noção de como funciona a “coleta” de valores vindos de um formulário. Em alguns casos, pode ser que seja gerado um erro no código caso não venha nenhum valor da variável. Isso pode acontecer principalmente na primeira abertura de uma página que contenha, ela mesma, o formulário e o código php para a validação. Nesse caso, o action do formulário ficaria vazio: action="".

Para solucionar esse problema, podemos utilizar alguns métodos envolvendo uma condicional If em união com a função isset do php para verificar se o método POST com o campo “user” está trezendo algum resultado:

código:
   1:  If(isset($_POST[“user”])){
   2:      $user = $_POST["user"];
   3:  }

Isso, contudo, pode gerar outro erro, pois a variável $user ainda não existe no momento que for iniciada a verificação na primeira linha do If. Para corrigir isso podemos criá-la antes, sem nenhum valor:

código:
   1:  $user = "";
   1:      If(isset($_POST[“user”])){
   2:          $user = $_POST["user"];
   3:      }


Entretanto o código ficará um pouco extenso se forem muitos os campos a serem verificados. Para resolver isso, podemos resumir essas quatro linhas em apenas uma, mudando um pouco a sintaxe da condicional If:

código:
   1:  $user = isset($_POST["user"]) ? $_POST["user"] : "";

Veja que agora a variável $user aparece primeiro. Assim sendo, ela já existirá quando a verificação for iniciada. O que vem antes do ponto de interrogação equivale à primeira linha do exemplo do If anterior. O ponto de interrogação pode ser interpretado como sendo a abertura da chave({) do If anterior e os dois pontos(:) como sendo um else(caso contrário). A leitura dessa linha seria algo parecido com:

Crie a variável $user que receberá, caso esteja setado o campo “user”, o valor, por POST, desse campo. Caso contrário, ela ficará vazia.

Pronto, agora não teremos mais problemas de validação de dados.

Agora vou falar um pouco sobre algumas funções que utilizaremos nesse processo de criação/abertura do arquivo txt e da validação dos dados.

Em primeiro lugar, criaremos uma variávem de nome sugerido $mensagem que, inicialmente, ficará vazia:

código:
   1:  $mensagem = “”;

Essa variável será usada para auxiliar no retorno dependendo dos resultados das validações dos dados. Sempre que cocorrer um erro de validação, colocaremos um aviso nessa variável e, ao final, será feita uma avaliação da mesma. Se tiver algum aviso nessa variável, significa que alguma fase da validação falhou. Nesse caso, será exibido o aviso e o registro não será gravado. Se, por outro lado, essa variável continuar vazia, significa que a validação dos dados não encntrou nenhum erro. Aí então o registro será gravado.

A primeira verificação é se todos os campos requeridos foram preenchidos. Isso pode ser feito mais ou menos da seguinte forma:

código:
   1:  If(!$_POST["user"]){
   2:      $mensagem = "Não foi digitado um nome de usuário.";
   3:  }

Em PHP, o ponto de exclamação signifca negação. É o mesmo que NOT(NÃO). No bloco acima estamos dizendo que, caso não tenha vindo nenhum valor do campo de nome "user", a variável $mensagem receberá o texto "Não foi digitado um nome de usuário". Veja como ficaria uma validação de todos os campos, verificando se todos foram preenchidos, se os dois campos da senha tem valores iguais e se a senha tem oito ou mais dígitos:

código:
   1:  if(!$user) {
   2:      $mensagem = "Não foi digitado um nome de usuário.";
   3:  }elseif(!$email){
   4:      $mensagem = "Não foi digitado um Email válido!";
   5:  }elseif(!$senha){
   6:      $mensagem = "Não foi digitada uma senha!";
   7:  }elseif(strlen($senha) < 8){
   8:      $mensagem = "A senha precisa ter pelo menos 8 dígitos!";
   9:  }elseif(!$csenha){
  10:      $mensagem = "A senha não foi confirmada!";
  11:  }elseif($senha != $csenha){
  12:      $mensagem = "As senhas não conferem!";
  13:  }

Nesse ponto, fizemos a validação de todos os campos. Agora, teremos que adicionar, a título de validação, a verificação se o arquivo existe e se o usuário já existe ou não. Por que não fizemos essa validação antes das demais? Porque esse processo pode ser um pouco lento dependendendo a quantidade de registros no arquivo txt. Assim sendo, melhor começar pelo mais rápido, pois, caso haja algum erro, o usuário não precisará esperar vários segundos para saber o que está acontecendo.

Para validar a existência do usuário, usaremos as funções file_exists para retornar a existência ou não do arquivo, filesize para retornar o tamanho do arquivo, fgets para retornar o texto do arquivo e strpos para pesquisar o usário dentro do texto. Isso será feito linha a linha. Veja uma breve explicação dessas funções:

file_exists: antes de tentarmos abrir um arquivo, precisamos verificar se ele existe. Como aqui usaremos um método que só criará o arquivo no primeiro cadastro, essa verificação se fará necessária para não ocorrer erro na execução da verificação. E também porque pode, por algum motivo, esse arquivo sumir do mapa. Será com a função file_exists que faremos essa verificação. Se a convertermos para um número inteiro utilizando a função (int) assim mesmo entre parênteses, a mesma retornará 0(zero) caso o arquivo não seja encontrado e 1(um) caso o arquivo seja encontrado.

A utilização dessa função é muito simples, bastanto passar o caminho e nome completos do arquivo com a sua extensão dentro de parênteses e entre aspas: file_exists(“caminho/arquivo.ext”). Incluindo o (int) para retornar um número inteiro, ficaria assim: (int)file_exists(“caminho/arquivo.ext”). Caso o arquivo esteja na mesma pasta, basta colocar o nome dele entre as aspas: (int)file_exists(“arquivo.ext”). Podemos criar uma variável que será do tipo número inteiro para receber esse valor:

código:
   1:  $arqExiste = (int)file_exists("dbtxt.azt");

A função file_exists, além de verificar se o arquivo existe, também será usada para definirmos se o registro que está sendo gravado ficará na mesma linha ou se deverá ser inserida uma quebra de linha antes dele. Ou seja, caso já exista algum registro no arquivo, será inserida uma quebra de linha antes do registro atual. Para controlar isso, teremos uma variável de nome sugerido $dados. Se o arquivo já existir e o tamanho dele for maior que 0, significa que já há pelo menos um registro gravado nele. Então, adicionaremos uma quebra de linha antes dos dados propriamente dito. No php, poderemos utilizar “\r\n” para adicionar essa quebra de linha. Caso o arquivo não exista ou se o tamanho dele for 0, então não precisa adicionar a quebra de linha.

filsesize: essa função retorna o tamanho de um arquivo em bytes e a utilização dela é muito simples. Basta passar o caminho com o nome e extensão do arquivo. Caso o arquivo esteja na mesma pasta da página php que está executando a função, basta passar o nome do arquivo com a extensão: filesize(“dbtxt.azt”).

Agora que já conhecemos as funções file_exists e filesize, iremos utilizá-las para montar a linha do registro:

código:
   1:  if($arqExiste == 1 && filesize("dbtxt.azt") > 0){
   2:      $dados = "\r\n" . $user . ";" . $email . ";" . $senha;
   3:  }else{
   4:      $dados = $user . ";" . $email . ";" . $senha;
   5:  }

No bloco acima estamos dizendo ao php que se o arquivo existir e o tamanho dele foi maior que 0, montaremos a variável $dados adicionando uma quebra de linha antes com “\r\n”. Caso contrário, monta a variável sem a quebra de linha.

Uma dica mais, baseada no bloco de código acima, para quem ainda não conhece o PHP:

Você deve ter observado que há partes entre aspas, alguns pontos no meio de algumas linhas e sinais de igual duplicados, certo? Certo. Vamos desvendar o porquê de tudo isso:

1 – Texto entre aspas: quando precisarmos inserir uma parte de texto em algum campo ou, nesse caso, na linha de registro, essa parte deverá ficar entre aspas. Quando formos inserir um número puro ou os dados de uma outra variável, não colocaremos as aspas. Por isso “\r\n” está entre aspas, pois, quebras de linhas são inseridas na forma de texto. E por isso $user, $mail, etc, estão fora de aspas, pois são dados que estão em outras variáveis existentes.

2 – Ponto: em PHP, quando precisarmos concatenar(juntar) textos com números e variáveis, utilizamos o ponto(.), o que equivale a dizer “”um texto” & $uma_variavel” por exemplo.

3 – Sinal de igual duplicado. Como já dizemos anteriormente, um sinal de igual em programação significa “recebe”. Quando queremos fazer uma comparação entre duas coisas, usamos o sinal de igual duplicado para diferenciar do “recebe”. O contrário do sinal de ==(igual a) é !=(diferente de). Há ainda o sinal triplo(===) que diferencia  0 como numeral de 0 como falso. Mais a frente veremos um exemplo disso.

Uma outra dica: podemos “encriptar” a senha para dificultar que alguém saiba qual é caso tenha acesso ao arquivo txt. Existem várias funções nativas do PHP para fazer essa “encriptação” que não é bem uma encriptação mas sim um hash. Para o nosso caso, podermos utilizar a função MD5. A forma de usá-la é muito simples:
MD5($senha)  ou hash("MD5", $senha)

A segunda forma é melhor porque é compatível com todas as funções hashes enquanto que a maioria não reconhece a primeira. Isso deve ser feito na passagem da senha na montagem da linha e não no $_POST.

fgets: captura o texto do arquivo txt. Essa função exige uma variável para receber esse texto:

código:
   1:  $linha = fgets($arquivo);

Veja que foi passada a variável $arquivo, pois usaremos o arquivo que abrimos no início utilizando essa variável como nome. Essa função fica dentro de um loop while que fará ela ser executada linha a linha enquanto não chegar o fim do arquivo. O que identifica o fim do arquivo é a função feof. Colocando o sinal de negação(!) do qual já falamos, dizemos para executar o loop enquanto não for o fim do arquivo:

código:
   1:  while(!feof($arquivo)){
   2:      $linha = fgets($arquivo);
   3:   
   4:      if(strpos($linha, $user . ";") === 0){
   5:          $mensagem = "Escolha outro nome de usuário.";
   6:          break;
   7:      }
   8:  }


Explicando as linhas do código acima:

1: Enquanto não chegar o fim do arquivo…

2: …$linha receberá a próxima linha do arquivo que está na variável $arquivo.

4: Se o valor de usuário da variável $user estiver no início da linha…

5: a variável $mensagem receberá o texto “Escolha outro nome de usário”.

6: Interrompe o loop caso o nome de usuário seja encontrado na base de dados txt. Por que devemos usar o break para interromper o código se o nome de usuário for encontrado? Imagine que sua base de dados tenha 500.000 linhas e o nome de usuário seja encontra na linha número 200. O código será finalizado bem mais rápido se for interrompido na linha 200.

7: Fim da condicional If.

8: Fim do loop While.

O código acima funcionará corretamente desde que não haja diferença de maiúsculas e minúsculas entre o user digitado e o da linha da base de dados. O php diferencia maiúsculas e minúsculas. Isso significa que para ele user é diferente de User e de uSer. Dessa forma, precisaremos igualar as duas partes, colocando tudo em minúsculas ou maiúsculas para comparar com eficiência. Podemos fazer isso utilizando a função strtolower:
if(strpos(strtolower($linha), strtolower($user) . ";") === 0)
Se você bem observou, deve ter visto que estamos concatenando o nome de usuário com o ponto e vírgula. Por que estamos fazendo isso? Para garantir que não haverá erros de interpretação. Um exemplo de linha:
criquiocalavera;criquio@prov.com;senha
Se um usuário tentar cadastrar criquio e não tiver o ponto e vírgula como final, a validação não deixará prosseguir, pois criquio foi encontrado. Então, colocamos o ponto e vírguala como final para fazer essa diferenciação, ficando assim “criquio;” e “criquiocalavera;”.
Verificando a validação para gravar ou não o registro
Agora que fizemos todas as validações, iremos finalizar o processo gravando o registro ou exibindo uma mensagem de erro. Como dissemos antes, o que irá garantir se houve ou não erros será a variável $mensagem. Caso não tenha nada nela, é porque não foi encontrado nenhum erro e, portanto, nenhuma mensagem foi recebida por essa variável:
   1:  if($mensagem == ""){
   2:      $escreve = fwrite($arquivo, $dados);
   3:      if(intval($escreve) > 0){
   4:          $mensagem = "Seus dados foram gravados com sucesso.";
   5:      }else{
   6:          $mensagem = "Ocorreu um erro na gravação dos dados.";
   7:      }
   8:  }
O bloco acima está dizendo que se a variável $mensagem estiver vazia, será criada mais uma variável de nome $escreve. Essa variável utilizará a função fwrite para gravar o registro no arquivo de texto. Essa função tem os parâmetros a saber:
1– Nome  do arquivo, no qual foi passado $arquivo, que é a variável que guarda o nome do arquivo;
2 – Texto a ser gravado. No nosso caso, passamos a variável que montamos com a linha que contém os dados do registro $dados.
A seguir usarmos um método para verificar se a linha foi gravada com sucesso. intval($escreve) retorna o número 0 caso a linha não tenha sido gravada e maior que 0 caso ela tenha sido gravada. E então a variável $mensagem recebe um texto de acordo o resultado.
Para finalizar, fechamos o arquivo txt com a fclose($arquivo) e exibimos o resultado da variável $mensagem para o usuário:
   1:  echo $mensagem;
e criamos mais uma linha na página com um link para o usuário voltar para a página de registro ou outra página qualquer:
   1:  echo "<br><a href='index.html'>Voltar</a>";
Para facilitar ainda mais o seu trabalho, deixarei abaixo o código completo e melhorado conforme todas as dicas passadas até aqui:

   1:  <?php
   2:   
   3:      header('Content-Type: text/html; charset=utf-8');
   4:   
   5:      $user = isset($_POST["user"]) ? $_POST["user"] : "";
   6:      $email = isset($_POST["email"]) ? $_POST["email"] : "";
   7:      $senha = isset($_POST["senha"]) ? $_POST["senha"] : "";
   8:      $csenha = isset($_POST["csenha"]) ? $_POST["csenha"] : "";
   9:   
  10:      $mensagem = "";
  11:      $arquivo = fopen("dbtxt.azt", "a+");
  12:   
  13:      if(!$user) {
  14:          $mensagem = "Não foi digitado um nome de usuário. Por favor, volte e digite um nome de usuário!";
  15:      }elseif(!$email){
  16:          $mensagem = "Não foi digitado um Email válido. Por favor, volte e digite o Email!";
  17:      }elseif(!$senha){
  18:          $mensagem = "Não foi digitada uma senha. Por favor, volte e digite a senha!";
  19:      }elseif(strlen($senha) < 8){
  20:          $mensagem = "A senha precisa ter pelo menos 8 dígitos. Por favor, volte e reformule-a!";
  21:      }elseif(!$csenha){
  22:          $mensagem = "A senha não foi confirmada. Por favor, volte e confirme-a!";
  23:      }elseif($senha != $csenha){
  24:          $mensagem = "A senha não confere com a validação. Volte e digite-as novamente.";
  25:      }else{
  26:   
  27:          $arqExiste = (int)file_exists("dbtxt.azt");
  28:   
  29:          if($arqExiste == 1 && filesize("dbtxt.azt") > 0){
  30:              $dados = "\r\n" . $user . ";" . $email . ";" . MD5($senha);
  31:          }else{
  32:              $dados = $user . ";" . $email . ";" . MD5($senha);
  33:          }
  34:          while(!feof($arquivo)){
  35:              $linha = fgets($arquivo);
  36:   
  37:              if(strpos(strtolower($linha), strtolower($user) . ";") === 0){
  38:                  $mensagem = "O nome de usuário \"" . $user . "\" não está disponível no momento.<br><br>Volte e digite outro nome de usuário.";
  39:                  break;
  40:              }
  41:          }
  42:      }
  43:   
  44:      if($mensagem == ""){
  45:          $escreve = fwrite($arquivo, $dados);
  46:          if(intval($escreve) > 0){
  47:              $mensagem = "Seus dados foram gravados com sucesso.";
  48:          }else{
  49:              $mensagem = "Ocorreu um erro na gravação dos dados.";
  50:          }
  51:      }
  52:   
  53:      fclose($arquivo);
  54:   
  55:      echo $mensagem;
  56:      echo "<br><a href='/dbtxt/'>Clique aqui para voltar</a>";
  57:   
  58:  ?>

É isso, pessoal, aqui terminamos a parte 1 desse tutorial. Em breve retornarei com a parte 2 aonde passarei as formas de proteger o site e o arquivo txt de forma a dificultar a exibição dele digitando o endereço na barra de endereços do browser ou em um link dentro de sites externos. Também falaremos sobre a criação de uma enquete quando então veremos como pesquisar e retornar os dados do arquivo txt para a tela não necessariamente nessa ordem.

Até lá!

quinta-feira, 12 de março de 2015

Hostinger Hospedagens

Um dos melhores serviços de hospedagem grátis com domínio próprio do Brasil


Hoje eu vou falar sobre serviços de hospedagem. Para quem não sabe ainda como funciona colocar um site com domínio próprio no ar, é mais ou menos assim: primeiro contrata-se o domínio e depois precisa alugar um serviço de hospedagem para hospedar os arquivos do site. Após tudo isso, é preciso configurar os DNSs do serviço de hospedagem no domínio. Quando contratamos um serviço de hospedagem pago, eles mesmos podem se encarregar de toda a burocracia por você, tendo em vista que, apesar de não ser um processo demasiadamente complicado, pode ser demorado para uma pessoa leiga entender como tudo funciona.
Geralmente, os serviços de hospedagem cobram uma taxa mensal para manter os arquivos hospedados em seus servidores, enquanto o pagamento do domínio é anual. Alguns serviços de hospedagem costumam oferecer o domínio gratuitamente na aquisição de seus planos pagos.
Alguns desses serviços de hospedagem costumam ter um plano gratuito para quem não precisa de muitos recursos como PHP, bancos de dados MySql, entre outros. Nesse caso, o usuário contrata o domínio por conta própria e utiliza o servidor para a hospedagem dos arquivos ou então utiliza um subdomínio como www.nomedoprovedor.seusite.com.br, o que não é nada profissional.
Mas existe um serviço que disponibiliza um plano gratuito com ótimo suporte a PHP e MySql, alem de o usuário poder usar ilimitados domínios com subdomínios, contas de email no nome do domínio, como por exemplo contato@seusite.com.br. Serviços esses que te possibilitam inúmeras configurações da conta de email.
Estou falando da Hostinger, que alem de todos esses benefícios que citei, oferece o phpMyAdmin, que é uma espécie de frontend utilizado para se criar e configurar bancos de dados MySql de forma muito fácil.
As vantagens não param por aí. Alem desses serviços podemos citar ainda total suporte do time de apoio ao cliente, completo gerenciamento de email, domínio, do website em si, vários painéis de manipulação e edição de arquivos, possibilidade de se proteger páginas do seu site com senhas, entre inúmero outros serviços.
Todas as vantagens mencionadas até agora estão disponíveis, acredite se quiser, no plano gratuito. No entanto, existem ainda planos muito mais completos a preços totalmente acessíveis.
A VCS Sistemas recomenda esse serviço, que é considerado um dos melhores nos quesitos recursos, segurança, confiabilidade e suporte técnico. Nossos clientes que fazem uso do mesmo, estão muito satisfeitos.
Para conhecê-lo melhor, acesse o site oficial

sexta-feira, 15 de agosto de 2014

Vinculando uma planilha Excel a uma tabela Access - vídeo

No vídeo de hoje, eu demonstro como fazer a vinculação de uma planilha de um documentos do Excel com uma tabela ou consulta de um banco de dados do Access.


DatePicker - o substituto do controle calendário no Access 2007/2010

Como muitos sabem, e quem ainda não sabe agora ficará sabendo, o controle calendário existente nas versões 2003 para trás do Access não existe mais nas versões 2007 e 2010. Na versão 2007 ele ainda funciona, mas na 2010 não tem mais suporte.

Pois bem, entre as soluções para contornar essa questão, uma delas pode ser você usar um controle de terceiros ou então, usar o DatePicker, que é nativo nas versões 2007 em diante e substitui o controle calendário. O problema é que você precisará clicar no ícone do calendário, que aparece quando o campo tipo data recebe o foco, para abrir o calendário e só então escolher a data. Existe uma outra questão que desfavorece o DatePicker pelas vias normais, que é o fato dele perder o DatePicker caso o campo possua máscara de entrada. Bom, aqui veremos como forçar a exibição do DatePicker em campos com máscara e tambem como exibir o calendário automaticamente ao entrar no campo, sem a necessidade de clicar no ícone do DatePicker. Faremos isso usando o nosso querido e idolatrado amigo, o VBA. As linhas de código aqui descritas podem ser usadas no evento "Ao receber foco" do campo tipo data.

Em primeiro lugar, vamos recordar como definimos, nas propriedades do campo, se o DatePicker será ou não exibido automaticamente: nas propriedades do campo, aba "Formato", linha "Mostrar Selecionador de Datas", temos as duas opções possíveis para essa propriedade, que são as seguintes:

Nunca - o DatePicker nunca será exibido.

Para datas - O DatePicker será exibido quando o campo receber o foco, caso seja tipo data e caso não tenha máscara de entrada.

Bom, mas e se eu quiser que meu campo tenha a máscara e tambem exiba o DatePicker quando receber o foco? Aqui, partiremos para o VBA. As opções que definimos nas propriedades do campo, usando o método acima, tambem podem ser feitas via VBA.

Para não exibir o DatePicker: Me.NomeDoCampo.ShowDatePicker = 0

Para exibir o DatePicker: Me.NomeDoCampo.ShowDatePicker = 1

Bem, mas ainda fica o problema do DatePicker não ser exibido caso o campo tenha máscara. Para esse caso, podemos usar um terceiro parâmetro:

Para exibir o DatePicker em campo com máscara: Me.NomeDoCampo.ShowDatePicker = 2

E se eu quiser que o calendário seja exibido automaticamente quando o campo receber o foco sem a necessidade de clicar no ícone do calendário?

Para exibir o calendário automaticamente: DoCmd.RunCommand acCmdShowDatePicker

Entendendo o ano bissexto e calculando-o via VBA

Hoje, enquanto eu lia algumas matérias na Internet, me deparei com uma matéria relacionada ao ano bissexto e então pensei em elaborar uma função simples para poder calcular se o ano é bissexto ou não. Isso pode ser útil, por exemplo, para montar um calendário personalizado, para o qual precisamos saber quais anos são bissextos para podermos preencher corretamente o mês de fevereiro em uma combobox ou listbox ou mesmo em uma tabela.

Aí você diz: "isso é fácil, todo mundo sabe que o ano bissexto ocorre de quatro em quatro anos".

Bom, parcialmente correto. Temos que nos lembrar que são de quatro em quatro anos para anos múltiplos de quatro. Bom, muita gente sabe disso, mas não são apenas essas as regras que precisamos saber. Veja, abaixo, o que precisamos saber:

1 - o ano bissexto ocorre de quatro em quatro anos; 
2 - o ano bissexto ocorre nos anos múltiplos de quatro; 
3 - a regra acima não se aplica para anos que terminam em "00" exceto quando for múltiplo de 400. 

Assim sendo, tudo que precisaremos é retornar o resto do ano dividido por 4 ou por 400 e tambem por 100.

Nos dois primeiros casos, o ano será bissexto se o resto for 0. No terceiro caso, será bissexto se o resto for diferente de 0 para 100 e igual a 0 para 4. Veja a nossa funçãozinha abaixo:

Dim Dias As Integer

If Me.cboAno Mod 400 = 0 Or (Me.cboAno Mod 4 = 0 And Me.cboAno Mod 100 <> 0) Then
    Dias = 29
Else
    Dias = 28
End If

Pronto, agora é só preencher a combo dos dias para quando o mês for fevereiro:

Dim TDias As Integer
Me.cboDias.RowSource = ""
Me.cboDias.RowSourceType = "value list"

    For TDias = 1 To Dias
        Me.cboMeses.AddItem TDias
    Next

Obviamente temos os outros meses do ano. A ideia, nesse caso, seria ter uma variável para verificar o mês e colocar o número de dias correspondente e, para o fevereiro, adicionar a função acima. Obviamente, tambem, há outras formas de se fazer a mesma coisa, mas deixo essa dica para ajudar, tambem, a entender a formação do ano bissexto.

Mas, por que temos o ano bissexto de 4 em 4 anos menos nos anos múltiplos de 100? Bom, é porque o ano solar tem um pouco mais de 365 dias mas não chega a 6 horas de diferença. Se fosse 6 horas redondo, bastaria acrescentar um dia a cada 4 anos, mas como falta alguns minutos para seis horas, essa diferença é tirada nos anos múltiplos de 100. O ano solar é igual a 365,2425 dias. Se fosse 365,25, aí sim, seriam exatamente seis horas a mais. Essa é uma curiosidade que muita gente não sabia, talvez pelo fato de que nossa expectativa de vida, no geral, seja inferior a um século.

Espero que meu pequeno artigo seja útil.

Publicado meu primeiro livro "Filha de coração"

Filha de coraçãoDepois de alguns anos desde que comecei a escrevê-lo, finalmente tenho a satisfação de dizer que meu livro acaba de ser pubilicado nos sites especializados Perse e Agbook com ramificação em vários outros sites e lojas físicas.

Devido ao custo de produção ser menor no Perse, o mesmo estará vendendo o livro a um custo um pouquinho menor tambem.
Em ambos, há a opção de comprar o livro em forma impressa ou em forma de e-book.

Veja abaixo a sinopse do livro:

Marcelo era um jovem solteiro e querido aonde morava e aonde trabalhava.

Por razões alheias à sua vontade, decidiu se mudar para outra cidade, aonde tinha alguns parentes. Nessa cidade, Marcelo conhece uma encantadora garotinha. A amizade que nasce entre os dois é tão grande e tão profunda que muita gente os confunde como pai e filha, o que deixa-o muito feliz, pois, para ele, Aline,aquela princesainha linda, meiga e angelical se tornara, realmente, sua filha.

Uma história real e fascinante sobre a mais profunda amizade já conhecida, tão profunda que transcende o próprio significado da palavra Amizade.
Links para maiores detalhes e aquisição da obra: logoperse                  Compre aqui o livro 'Filha de coração'

Criar perfil no Orkut e conta de Email: Vídeo


Vídeo tutorial que demonstra como criar um perfil no Orkut e uma conta de email para ser usada na criação desse perfil.

Esse vídeo tutorial foi criado atendendo a vários pedidos de usuários iniciantes que não estão conseguindo criar seus perfis.



VBA Access - Como enviar emails, via SMTP, usando o CdoSys

Neste artigo irei demonstrar como enviar emails, via SMTP, usando o componente CdoSys. Este componente costuma ser instalado automaticamente com as novas versões do Windows ou quando instalamos alguns programas como, por exemplo, o Outlook.

O que é o CdoSys?

Resumidamente falando, é um componente criado pela Microsoft que tem por finalidade fornecer argumentos para o envio de emails via SMTP. Este componente fornece todos os argumentos presentes em programas de emails e webmails, tais como: título da mensagem, destinatário, com cópia (cc), com cópia oculta (cco), corpo da mensagem e envio de anexos.

Uma vantagem que temos ao usar este componente, é que podemos fornecer a opção de envio de mensagens com anexos diretamente do aplicativo, seja ele Access, Visual Basic, seja implementando em uma página web integrada à linguagem Asp ou Php, por exemplo.

Como faço para utilizar esse recurso?

Em primeiro lugar, é necessário conferir se o sistema possui a DLL CdoSys instalada na pasta System32. Caso tenha, é provável que ela esteja presente nas referências do módulo VBA do seu aplicativo. Para conferir se ela faz parte da lista, abra qualquer formulário em modo estrutura ou design e abra o módulo VBA do mesmo, ou pressione as teclas ALT+F11. Já no módulo, clique no menu Ferramentas e depois em Referências. Consulte na lista de referências se existe a “Microsoft CDO for Windows 2000 Library”. Em caso positivo, marque-a.
ReferênciasCaso ela não esteja presente nas referências, clique no botão Procurar, localize-a e confirme.

Se tudo der certo, ela já estará presente e referenciada. Caso não dê certo, pode ser que seja necessário registrá-la. Para isso, abra o prompt do DOS ou cmd, digite regsvr32 cdosys.dll e dê Enter. Se tudo funcionar direitinho, será exibida a mensagem de Sucesso.

OK, ela já está registrada e referenciada no VBA, e agora?

Agora chegou a hora de declarar variáveis que representarão as rotinas presentes na DLL e que são responsáveis pelo desempenho das funções que lhe são competentes.

Em primeiro lugar, precisamos declarar as variáveis que representarão o objeto CdoSys e instanciá-las:

Para acessar o tutorial completo visite o link http://usandoaccess.com.br/tutoriais/tuto38.asp

Arrays - veja como utilizá-las para simplificar e automatizar tarefas

A poucos dias atrás peguei um aplicativo desenvolvido por uma outra pessoa para fazer a manutenção e uma das coisas que me chamou a atenção foi a forma utilizada por essa pessoa para colocar o mês com as iniciais do nome em inglês. A ideia inicial seria que o mês fosse exibido sempre da mesma forma, independente das configurações regionais do computador em que o aplicativo estivesse rodando. Para isso, o programador utilizou algo como abaixo descrito:
Dim mes As String

If Format(rs!Data, "m") = 1 Then
    mes = "JAN"
ElseIf Format(rs!Data, "m") = 2 Then
    mes = "FEB"
ElseIf Format(rs!Data, "m") = 3 Then
    mes = "MAR"
ElseIf Format(rs!Data, "m") = 4 Then
    mes = "APR"
ElseIf Format(rs!Data, "m") = 5 Then
    mes = "MAY"
ElseIf Format(rs!Data, "m") = 6 Then
    mes = "JUN"
ElseIf Format(rs!Data, "m") = 7 Then
    mes = "JUL"
ElseIf Format(rs!Data, "m") = 8 Then
    mes = "AUG"
ElseIf Format(rs!Data, "m") = 9 Then
    mes = "SEP"
ElseIf Format(rs!Data, "m") = 10 Then
    mes = "OCT"
ElseIf Format(rs!Data, "m") = 11 Then
    mes = "NOV"
ElseIf Format(rs!Data, "m") = 12 Then
    mes = "DEC"
End If

Me.datacadastro = mes & Format(rs!Data, "/dd/yyyy")
A ideia seria exibir a data no formato MAY/12/2012. Funciona corretamente. O problema é que após verificar todos os módulos de formulários e relatórios, me deparei com 24 blocos desses, sendo que em alguns tinham até 3 com variáveis nomeadas como mes1, mes2 e mes3, sendo cada uma dedicada a um campo diferente do formulário ou relatório.

Se cada bloco contem 25 linhas de código, multiplicando por 24 chegamos ao total de 600 linhas. Imagina o tempo gasto no processo, mesmo copiando e colando, pois tem que alterar nomes de campos e de variáveis. Tudo isso poderia ser simplificado utilizando uma função pública, na qual seria utilizado apenas um bloco: Public Funtion Meses(Mes As String) As String


Dessa forma, tudo seria reduzido à apenas um bloco com 25 linhas. Mas, pensando bem, podemos reduzir ainda mais se utilizarmos Arrays em uma função pública.

O que é uma Array?

Na programação, Array pode ser definido como uma variável que armazena dados de um mesmo tipo. No exemplo acima, armazenaria a inicial dos nomes dos meses em inglês. Quando colocamos os dados que queremos em um conjunto de dados dentro de uma Array, cada um desses dados recebe um índice que, por padrão, começa no índice 0(zero) igual às coluna de uma combobox ou listbox ou mesmo os índices dos campos de uma tabela. Para utilizarmos um determinado dado do conjunto, basta passar o número do índice. Para o caso dos meses, teríamos índices de 0 a 11.

Como utilizar a Array para capturar o número do mês?

Como dito acima, cada dado de um conjunto de dados de uma Array, possui um número que o identifica, assim como os meses podem ser numerados de 1 a 12. Como a Array, na sua forma padrão, inicia no zero, podemos pegar o número do mês menos 1 para compatibilizar com o número do mês na Array. Para facilitar o processo e deixar a função disponível para qualquer formulário, relatório ou consulta, criaremos um módulo e, dentro desse módulo, criaremos uma função pública:

Public Function Meses() As Variant
    Meses = Array("JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC")
End Function
Pronto, agora basta utilizar a função Meses aonde precisarmos formatar a data. Ainda utilizando o exemplo que deu origem a esse artigo, podemos fazer assim:

Me.datacadastro = Meses(Format(rs!Data, "m") - 1) & Format(rs!Data, "/dd/yyyy")

Nesse caso, o Format(rs!Data, "m") captura o número do mês no campo rs!Data de um determinado registro. Se o mês em questão for maio, o número "m" será 5. Na nossa Array, o índice, ou seja, o número de "MAY" é 4, pois a Array começa no 0. Por isso utilizamo o - 1 para subtrair 1 número para fazer a equivalência entre o mês do registro e a Array.

Veja que utilizando Array, o número de linhas de código caiu de 600 para apenas 3, ou seja, 0,5% do total de linhas inicial. Não é uma maravilha? Aqui finalizamos nosso artigo referente à esse assunto. Espero que possa ser útil.