quinta-feira, 12 de junho de 2014

VBA - Converter número decimal para binário

Segue função em VBA (Serve para Acces ou para Excel) que converte um número Decimal para binário

Public Function ConvertDecimalToBinario(nDecimal As Double, nBits As Integer) As String
Dim i As Long
Dim num As Long: num = Int(nDecimal / 2)
Dim bin As Long: bin = nDecimal Mod 2
Dim strBinarios As String: strBinarios = bin
For i = 1 To nBits - 1
      bin = num Mod 2
      num = Int(num / 2)
      strBinarios = strBinarios & bin
Next
'Inverte o texto
Dim txt As String
For i = 0 To Len(strBinarios) - 1
txt = txt & Mid(CStr(strBinarios), Len(CStr(strBinarios)) - i, 1)
Next
ConvertDecimalToBinario = txt
End Function

Exemplo de uso:
no Excel: =ConvertDecimalToBinario(25;8) --> retorna um número binário (00011001) com 8 bits.

quinta-feira, 25 de outubro de 2012

Access :: Múltiplos resultados com 1 só Dlookup


 Sempre que usar um Dlookup uma viagem será feita a tabela correspondente. Logo, usar vários dlookups - principalmente em sistemas em rede - faz com que o rendimento do sistema diminua.

Uma solução ótima para tal é usar apenas 1 dlookup e com este, retornar vários resultados. Veja:


Forma Incorreta
me!campoA = Dlookup("campo1","NomeDaTabela",filtro)
me!campoB = Dlookup("campo2","NomeDaTabela",filtro)
me!campoC = Dlookup("campo3","NomeDaTabela",filtro)
me!campoD = Dlookup("campo4","NomeDaTabela",filtro)
me!campoE = Dlookup("campo5","NomeDaTabela",filtro)
Forma Correta
Dim seq As String, k
filtro = "''"
seq = "[campo1] & '|' & [campo2] & '|' & [campo3] & '|' & [campo4] & '|' & [campo5]"
seq = Dlookup(seq, "NomeDaTabela", Filtro)
k = Split(seq, "|")
Me!campoA = k(0)
Me!campoB = k(1)
Me!CampoC = k(2)
Me!CampoD = k(3)
Me!CampoE = k(4)
Fonte deste artigo: http://www.usandoaccess.com.br/dicas/dica32.asp?id=1#inicio

quinta-feira, 21 de junho de 2012

Converter primeira letra em maiúsculo com PHP

Esta função mostra como converter as inicias de uma string para maiúscula. A função converte string com acento.

Veja:
<?php
    function __INIMASC($term) {
        $palavra = str_replace(" Da "," da ",strtr(ucwords(strtolower($term)),"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÜÚÞß","àáâãäåæçèéêëìíîïðñòóôõö÷øùüúþÿ"));
        $palavra = str_replace(" Do "," do ",$palavra);
        $palavra = str_replace(" De "," de ",$palavra);
        $palavra = str_replace(" Das "," das ",$palavra);
        return $palavra;
    }
?>
Exemplo:
<?php
$texto = "JOÃO DA SILVA SAURO";
echo __INIMASC($texto);
?>
 
O resultado será: João da Silva Sauro.
Espero que tenha gostado.

segunda-feira, 11 de junho de 2012

Gerar Mensalidades com PHP

Para quem estava interessado no exemplo para download, clique aqui, mas lembrando que está em PDO.


Este Script mostra como gerar parcelas para seu sistema.  Por exemplo:
Um sistema de cadastro de aluno, onde o mesmo pagará 3 parcelas do seu curso,
1ª parcela | 01/05/2012 | R$ 50,00
2ª parcela | 01/06/2012 | R$ 50,00
3ª parcela | 01/07/2012 | R$ 50,00
[...] e assim por diante.
Confira o código abaixo, que salva os dados no banco de dados e também mostra o que foi gravado no banco em forma de tabela.
Crie uma tabela com o nome mensalidades e adicione os seguintes campos a ela
valor_mens(double), data_mens(date), num_mens(varchar)

 <?php  
 include "config.php"; //inclue seu arquivo de conexão com banco de dados   
   $valor       = 50; //Valor da parcela  
   $parcelas     = 10; //Número de parcelas  
   $datapagamento1  = "2012-06-25"; //Data do primeiro pagamento  
   $diavencimento   = 10; //Dia de vencimento das parcelas  
   $gravadata     = $datapagamento1;    
   echo '<table border="1">';  
     echo "<tr>";   
       echo "<td>Parcela</td>";    
       echo "<td>Vencimento</td>";        
     echo "</tr>";      
   for ($i = 1; $i <= $parcelas; $i++){      
     //Parcela  
     $parcela = $i."a"; //grava o número da parcela assim: 1a, 2a, 3a, etc...  
     echo "<tr>";  
       echo "<td>";  
         echo $parcela;  
       echo "</td>";      
     //Vencimento      
       echo "<td>";  
         echo $gravadata;  
       echo "</td>";      
     echo "</tr>";  
     if (!empty($diavencimento)){ //Se o dia de vencimento não tiver em branco  
       $dia = $diavencimento; //o dia será igual ao dia de vencimento  
     }else{  
       $dia = date("d",strtotime($gravadata)); //se o dia de vencimento tiver em branco, então o dia será igual ao dia da data de vencimento  
     }  
     $mes = date("m",strtotime($gravadata)) + 1;  
     $ano = date("Y",strtotime($gravadata));  
     $sql = mysql_query("INSERT INTO mensalidades (valor_mens, data_mens, num_mens) VALUES ('$valor', '$gravadata', '$parcela')");  
       if ($mes == 13) { //se passar do mês 12, então inicia com o mes 1 do próximo ano  
       $mes = 1;  
       $ano = $ano + 1;    
     }  
     if ($dia == 30 && $mes == 2){ //fevereiro não pode ter 30 dias não é. kkk  
       $gravadata = $ano."-".$mes."-28";  
     }else{  
       $gravadata = $ano."-".$mes."-".$dia;  
     }  
   }  
   echo "</table>";  
   if ($sql) {  
       echo "Mensalidades inseridas com sucesso.";    
     }else{  
       echo "Erro ao inserir mensalidades.";    
     }  
   ?> 

Em PDO Seria Assim:

1 - Crie uma pasta dentro da raiz do seu projeto com o nome "classes" e dentro dessa pasta crie um arquivo com o nome "BD.class.php". Segue código desse arquivo:
 <?php  
 class BD {  
   private static $conn;  
   private function __construct() {  
   }  
   public static function getConn() {  
     try {  
       if (is_null(self::$conn)) {  
         self::$conn = new PDO(DSN, USER, PASS);  
       }  
       return self::$conn;  
     } catch (Exception $e) {  
       echo '<div class="alertErro">' . $e->getMessage() . '</div>';  
     }  
   }  
 }  


2 -  Crie uma pasta chamado "config" dentro da raiz do seu projeto e dentro dessa pasta, inclua os seguintes arquivos "config.php, define.php e load.php", segue código de cada arquivo.

config.php

<?php

include ('config/define.php');
include ('config/load.php');

define.php

<?php

define('HOST', 'localhost'); // Host
define('USER', 'root'); // Usuário
define('PASS', ''); //Senha
define('BD', 'banco'); //Nome do banco de dados
define('DSN', 'mysql:host=' . HOST . ';dbname=' . BD);

load.php


<?php

function __autoload($classe) {
    $pagina = sprintf('classes/%s.class.php', $classe);
    if (file_exists($pagina)) {
        include ($pagina);
    } else {
        echo '<div class="AlertErro">Arquivo não existe</div>';
    }
}
3 - E finalmente o código para gerar as parcelas e salvá-las no banco. 
Este é o código SQL para criar a tabela.

CREATE TABLE `mensalidades` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `valor_mens` double DEFAULT NULL,
  `data_mens` date DEFAULT NULL,
  `num_mens` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
E para gerar as mensalidades use este código em qualquer arquivo dentro da sua pasta raiz.

<?php
include "config/config.php"; //inclue seu arquivo de conexão com banco de dados 
$valor = $_POST['valor'];
$parcelas = $_POST['parcelas'];
$datapagamento1 = implode(!strstr($_POST['datapagamento1'], '/') ? "/" : "-", array_reverse(explode(!strstr($_POST['datapagamento1'], '/') ? "-" : "/", $_POST['datapagamento1']))); //Esta rotina é para converter a data do formato brasileiro para o americano
$diavencimento = $_POST['vencimento'];
$gravadata = $datapagamento1;
$sql = "INSERT INTO mensalidades (valor_mens, data_mens, num_mens) VALUES ";
echo '<table border="1">';
echo "<tr>";
echo "<td>Parcela</td>";
echo "<td>Valor</td>";
echo "<td>Vencimento</td>";
echo "</tr>";
for ($i = 1; $i <= $parcelas; $i++) {
    //Parcela
    $parcela = $i . "a"; //grava o número da parcela assim: 1a, 2a, 3a, etc...
    echo "<tr>";
    echo "<td>";
    echo $parcela;
    echo "</td>";
    //Valor
    echo "<td>";
    echo $valor;
    echo "</td>";
    //Vencimento        
    echo "<td>";
    echo implode(!strstr($gravadata, '-') ? "-" : "/", array_reverse(explode(!strstr($gravadata, '-') ? "/" : "-", $gravadata))); //Muda para o formato brasileiro
    echo "</td>";
    echo "</tr>";

    if (!empty($diavencimento)) { //Se o dia de vencimento não tiver em branco
        $dia = $diavencimento; //o dia será igual ao dia de vencimento
    } else {
        $dia = date("d", strtotime($gravadata)); //se o dia de vencimento tiver em branco, então o dia será igual ao dia da data de vencimento
    }

    $mes = date("m", strtotime($gravadata)) + 1;
    $ano = date("Y", strtotime($gravadata));

    $sql .= "(" . $valor . ", '" . $gravadata . "', '" . $parcela . "'),";

    if ($mes == 13) { //se passar do mês 12, então inicia com o mes 1 do próximo ano
        $mes = 1;
        $ano = $ano + 1;
    }

    if ($dia == 30 && $mes == 2) { //fevereiro não pode ter 30 dias não é. kkk
        $gravadata = $ano . "-" . $mes . "-28";
    } else {
        $gravadata = $ano . "-" . $mes . "-" . $dia;
    }
}

echo "</table>";

//Remove a última vírgula da string SQL
$sql = substr($sql, 0, -1);
//Salva no banco
try {
    echo "<p>String SQL: $sql</p>";
    $stmt = BD::getConn()->prepare($sql);
    if ($stmt->execute()):
        echo "Mensalidades inseridas com sucesso.";
    else:
        echo "Erro ao inserir!";
    endif;
} catch (Exception $e) {
    echo 'ERROR: ', $e->getMessage(), "\n";
}