Pesquisa

Pesquisa personalizada

domingo, 25 de dezembro de 2011

Como interceptar as teclas de função em Delphi




Primeiro, coloque a propriedade KeyPreview do formulário como TRUE.
Depois, insira este código no evento OnKeyDown do formulário:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = VK_F5 then
showMessage('Foi pressionada a tecla F5');
end;

Você também pode usar as variáveis VK_F1 até VK_F12 referentes as outras
teclas de função.

terça-feira, 29 de novembro de 2011

Separar Strings em JavaScript

Java Script
A função split() pode ser utilizada em javascript para separar strings por meio de um delimitador.

A sintaxe é string.split('delimitador');

Veja neste exemplo , estamos separando três strings com o uso do pipe (|) :

var parametros="banana|maçã|manga";
var quebra=parametros.split("|");

alert(quebra[0]); // mostra apenas a string "banana"
alert(quebra[1]); // mostra apenas a palavra "maçã"
alert(quebra[2]); // mostra apenas a palavra "manga"

Veja o exemplo na imagem a seguir :

split() separando strings em javascript

segunda-feira, 7 de novembro de 2011

MD5

md5O Message-Digest algorithm 5 conhecido como MD5 é um algoritmo de hash criptográfico de 128 bits unidirecional utilizado por softwares com protocolo ponto-a-ponto (P2P, ou Peer-to-Peer), na verificação de integridade de arquivos e logins, para salvar senhas em bancos de dados e também é usado em assinaturas digitais onde um texto precisa ser criptografado de forma segura antes de ser cifrado com uma chave privada por um sistema de chave pública.

O MD5 foi desenvolvido por Ronald Rivest no ano de 1991 e colocado em dominio público em 1992, para suceder ao MD4 que estava com alguns problemas de segurança. Os cálculos do MD5 são um pouco mais lentos mas é muito mais seguro que o MD4.

A entrada do MD5 é um fluxo de dados isto é a mensagem, esta pode ter um número arbitrário de bits, representado por b, um número inteiro positivo que varia de zero até o infinito. Para obter a mensagem cifrada, seus bits, representados por m0, m1, ..., m{b-1} são submetidos a diversas operações. Este processo é dividido em cinco etapas.

1) Preparar o Fluxo de dados: Adiciona-se na mensagem os bits necessários para que seu tamanho mais 64 bits sejam divisível por 512.

2) Incluir o Comprimento: uma representação binária do tamanho original da mensagem e que ocupa 64 bits, é adicionada à mesma. O conjunto obtido é processado em blocos de 512 bits e cada bloco é processado em quatro rodadas distintas.

3)Inicializar o Buffer: Um buffer de quatro variaveis é usado para calcular a mensagem. Os registradores de 32 bits A, B, C e D são inicializados com os seguintes valores hexadecimais:

var A: 01 23 45 67
var B: 89 ab cd ef
var C: fe dc ba 98
var D: 76 54 32 10

4) Processamento da mensagem: Primeiramente são definidas quatro funções auxiliares. Cada uma usa três variaveis de 32 bits para produzir uma saída de uma variavel de 32 bits.

F(X,Y,Z) = (X and Y) or (not(X) and Z)
G(X,Y,Z) = (X and Z) or (Y and not(Z))
H(X,Y,Z) = X xor Y xor Z
I(X,Y,Z) = Y xor (X or not(Z))

A função F atua como condicional sobre cada um dos bits: se X então Y senão Z. Os bits de X, Y e Z são independentes e não induzidos então cada bit de F(X,Y,Z) também será independente e não induzido.

As funções G, H e I são semelhantes à função F produzindo saídas de bits independentes e não induzidos se os mesmos tiverem estas características.

A função H é apenas um "XOR" ou função de "paridade" das suas entradas.

As etapas deste passo usam uma tabela de 64 elementos, T[1] a T[64], construída à partir da função seno. T[i] for o nésimo elemento da tabela e é igual à parte inteira de abs(seno(i)) multiplicada por 4294967296, onde i é expresso em radianos. Antes de iniciar o processamento, deve-se armazenar os valores de A, B, C e D. Neste texto, as variáveis de trabalho serão expressas em letras minúsculas, portanto armazenamos a = A, b = B, c = C e d = D. Divide-se cada bloco de 512 bits em 16 sub-blocos de 32 bits, identificados por X[0] a X[15]. Genericamente, os sub-blocos são designados por X[k]. A seguir, aplica-se as funções F, G, H e I em quatro rodadas:

/* Rodada 1 : Seja [abcd k s i] a operação a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s) Faça as seguintes 16 operações. */

[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4]
[ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8]
[ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]

/* Rodada 2: Seja [abcd k s i] a operação a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s) Faça as seguintes 16 operações.*/

[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]

/* Rodada 3: Seja [abcd k s i] a operação a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s) Faça as seguintes 16 operações*/

[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]

/* Rodada 4: Seja [abcd k s i] a operação a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s) Faça as seguintes 16 operações*/

[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]

/* Por fim, faça as adições dos resultados obtidos para a, b, c, d com os valores iniciais de A, B, C e D*/

A = a + A
B = b + B
C = c + C
D = d + D

5) Saída: a saída é a concatenação de A, B, C e D. Começa-se com o byte menos significativo de A e termina-se com o byte mais significativo de D.

Rodada 1
--------------------------------
F(a,b,c,d, X[ 0], 7, 0xd76aa478)
F(d,a,b,c, X[ 1],12, 0xe8c7b756)
F(c,d,a,b, X[ 2],17, 0x242070db)
F(b,c,d,a, X[ 3],22, 0xc1bdceee)
F(a,b,c,d, X[ 4], 7, 0xf57cc0af)
F(d,a,b,c, X[ 5],12, 0x4787c62a)
F(c,d,a,b, X[ 6],17, 0xa8304613)
F(b,c,d,a, X[ 7],22, 0xfd469501)
F(a,b,c,d, X[ 8], 7, 0x698098d8)
F(d,a,b,c, X[ 9],12, 0x8b44f7af)
F(c,d,a,b, X[10],17, 0xffff5bb1)
F(b,c,d,a, X[11],22, 0x895cd7be)
F(a,b,c,d, X[12], 7, 0x6b901122)
F(d,a,b,c, X[13],12, 0xfd987193)
F(c,d,a,b, X[14],17, 0xa679438e)
F(b,c,d,a, X[15],22, 0x49b40821)

Rodada 2
---------------------------------
G(a,b,c,d, X[ 1], 5, 0xf61e2562)
G(d,a,b,c, X[ 6], 9, 0xc040b340)
G(c,d,a,b, X[11],14, 0x265e5a51)
G(b,c,d,a, X[ 0],20, 0xe9b6c7aa)
G(a,b,c,d, X[ 5], 5, 0xd62f105d)
G(d,a,b,c, X[10], 9, 0x02441453)
G(c,d,a,b, X[15],14, 0xd8a1e681)
G(b,c,d,a, X[ 4],20, 0xe7d3fbc8)
G(a,b,c,d, X[ 9], 5, 0x21e1cde6)
G(d,a,b,c, X[14], 9, 0xc33707d6)
G(c,d,a,b, X[ 3],14, 0xf4d50d87)
G(b,c,d,a, X[ 8],20, 0x455a14ed)
G(a,b,c,d, X[13], 5, 0xa9e3e905)
G(d,a,b,c, X[ 2], 9, 0xfcefa3f8)
G(c,d,a,b, X[ 7],14, 0x676f02d9)
G(b,c,d,a, X[12],20, 0x8d2a4c8a)

Rodada 3
--------------------------------
H(a,b,c,d, X[ 5], 4, 0xfffa3942)
H(d,a,b,c, X[ 8],11, 0x8771f681)
H(c,d,a,b, X[11],16, 0x6d9d6122)
H(b,c,d,a, X[14],23, 0xfde5380c)
H(a,b,c,d, X[ 1], 4, 0xa4beea44)
H(d,a,b,c, X[ 4],11, 0x4bdecfa9)
H(c,d,a,b, X[ 7],16, 0xf6bb4b60)
H(b,c,d,a, X[10],23, 0xbebfbc70)
H(a,b,c,d, X[13], 4, 0x289b7ec6)
H(d,a,b,c, X[ 0],11, 0xeaa127fa)
H(c,d,a,b, X[ 3],16, 0xd4ef3085)
H(b,c,d,a, X[ 6],23, 0x04881d05)
H(a,b,c,d, X[ 9], 4, 0xd9d4d039)
H(d,a,b,c, X[12],11, 0xe6db99e5)
H(c,d,a,b, X[15],16, 0x1fa27cf8)
H(b,c,d,a, X[ 2],23, 0xc4ac5665)

Rodada 4
-------------------------------
I(a,b,c,d, X[ 0], 6, 0xf4292244)
I(d,a,b,c, X[ 7],10, 0x411aff97)
I(c,d,a,b, X[14],15, 0xab9423a7)
I(b,c,d,a, X[ 5],21, 0xfc93a039)
I(a,b,c,d, X[12], 6, 0x655b59c3)
I(d,a,b,c, X[ 3],10, 0x8f0ccc92)
I(c,d,a,b, X[10],15, 0xffeff47d)
I(b,c,d,a, X[ 1],21, 0x85848dd1)
I(a,b,c,d, X[ 8], 6, 0x6fa87e4f)
I(d,a,b,c, X[15],10, 0xfe2ce6e0)
I(c,d,a,b, X[ 6],15, 0xa3014314)
I(b,c,d,a, X[13],21, 0x4e0811a1)
I(a,b,c,d, X[ 4], 6, 0xf7537e82)
I(d,a,b,c, X[11],10, 0xbd3af235)
I(c,d,a,b, X[ 2],15, 0x2ad7d2bb)
I(b,c,d,a, X[ 9],21, 0xeb86d391)

Exemplos de utilização do MD5: Não existem hash parecidos, apenas idênticos :

MD5 ("") = d41d8cd98f00b204e9800998ecf8427e

MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661

MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72

MD5 ("message digest")= f96b697d7cb7938d525a2f31aaf161d0

MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b

MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = d174ab98d277d9f5a5611c2c9f419d9f

MD5("12345678901234567890123456789012345678901234567890123456789012345678901234567890") = 57edf4a22be3c955ac49da2e2107b67a


terça-feira, 18 de outubro de 2011

Biblioteca ADODB

adodb
A ADODB é uma biblioteca utilizada para simplificar as tarefas do PHP relacionadas ao banco de dados. Os bancos de dados suportados pela biblioteca são: Access, ADO, DB2, FrontBase, Informix, InterBase, Firebird, Microsoft SQL Server, MySQL, Oracle, ODBC, PostgreSQL, SAPDB, SQLAnywhere, SQLite, Sybase e Visual FoxPro.

Para utilizar primeiramente é necessário realizar o download da biblioteca no endereço : http://adodb.sourceforge.net/#download e incluir a biblioteca na estrutura do projeto:

A seguir classe de conexão utilizando ADODB conectando com firebird:

//disponibilizando adodb
include("adodb/adodb.inc.php");

//definindo a classe de conexão
class conexao
{
//definir atributos de configuração conexao

var $qual_banco = "firebird"; //nome do banco
var $nome_banco = "C:/Arquivos de programas/teste.fdb"; //caminho do banco de dados
var $usuario_banco = "teste";
var $senha_banco = "teste";

//definir um atributo para a instancia do banco de dados
var $bd;

//definir o método contrutor da conexao , o método é executado quando a classe é chamada
function conexao()
{
$this->bd = NewADOConnection($this->qual_banco);
$this->bd ->dialect = 3; //dialeto 3 do SQL
$this->bd ->debug = false; // aparecer o sql
$this->bd ->Connect ( $this->nome_banco,
$this->usuario_banco,
$this->senha_banco);
}
}

//criar uma instancia do objeto conexao
$con = new conexao();

classe de conexão









Exemplo utilizando a classe de conexão:

include("../conexao.inc.php");

class aulas
{

//- INSTÂNCIA DA CLASSE CONEXÃO
var $con;

//- RESULTSET DE DADOS
var $rs;

//- MENSAGENS DE ERRO NO ACESSO AOS DADOS
var $mensagem;

//- CONSTRUTOR PARA INSTANCIAR AUTOMATICAMENTE UMA CONEXÃO
function aulas(){

$this->con = new conexao();

}

function excluir () {
$sql = "delete from AULAS where A_CODIGO = $_REQUEST[id]";

if ($this->con->bd->Execute($sql))
$this->mensagem = "Dados excluídos com sucesso !";
else
$this->mensagem = "Erro ao excluir. Estes dados estão sendo utilizados !";
}

}

utilizando a classe de conexão

quarta-feira, 5 de outubro de 2011

Classe Math em Javascript

javascript
Com a classe Math é possível realizar operações matemáticas em Javascript. Não é necessário instanciar a classe para utilizar, pois os atributos e métodos são variáveis de classe, portanto basta utilizar o nome da classe para acessa-los.

Propriedades

E: retorna o valor de Euler, a base dos logaritmos neperianos.

PI: retorna o valor de PI conhecido como número para cálculos com círculos.

SQRT2: retorna o valor da raiz quadrada de 2;

SQRT1_2: retorna o valor da raiz quadrada de 0.5 ou 1/2 ;

LN2: retorna o valor do Logaritmo neperiano de 2 (ln 2);

LN10: retorna o valor do Logaritmo neperiano de 10 (ln 10);

LOG2E: retorna o valor do Logaritmo de E (Math.E) na base 2;

LOG10E: retorna o valor do Logaritmo de E na base 10.

Exemplos:

Math.E; // retorna 2.71828....
Math.SQRT2 // retorna 1.41....
(2 * Math.PI);


Métodos

abs(): retorna o valor absoluto de um número.

acos(): retorna o arco co-seno de um número em radianos.

atan(): retorna o arco tangente de um número.

ceil(): retorna o o inteiro igual ou imediatamente seguinte de um número. Por exemplo, ceil(3) vale 3, ceil(3.4) é 4.

cos(): retorna o co-seno de um número.

exp(): retorna o resultado de elevar o número E por um número.

floor(): ao contrário do método ceil(), retorna um número igual ou imediatamente inferior.

log(): retorna o logaritmo neperiano de um número.

max(): retorna o maior entre 2 números.

min(): retorna o menor entre 2 números.

pow(): recebe dois números como parâmetros e retorna o primeiro número elevado ao segundo número.

random(): retorna um número aleatório entre 0 e 1

round(): Arredonda ao inteiro mais próximo e retorna.

sin(): retorna o seno de um número com um ângulo em radianos.

sqrt(): retorna a raiz quadrada de um número.

tan(): retotna a tangente de um número em radianos.

Exemplos:

Math.round(4.5); // retorna 5.
Math.round(3.49); // retorna 3.
Math.random(); // retorna 0.56766776…
Math.max(4,7); // retorna 7.
Math.min(4,7); // retorna 4.

quarta-feira, 28 de setembro de 2011

Janela Secundária

javascript e htmlA abertura de janelas secundárias nas páginas, isso contribui para:
  • Mostrar uma informação específica;
  • O usuário não precisa sair da página onde estava o link;
  • A janela secundária pode ser configurada livremente, por exemplo, os tamanhos e menus;
Para abrir uma janela secundária podemos fazer com HTML ou Javascript. Para abrir uma janela secundária em HTML basta utilizar o atributo TARGET das tags HREF. Colocando target="_blank" no link. O link fica desta forma :

htmlO problema do HTML é que não temos o mesmo controle que no JavaScript. Para abrir a janela secundária com JavaScript pode-se utilizar window.open(). Esta função recebe três parâmetros, que são colocados entre os parênteses:

window.open(URL, nomeJanela, configuracaoJanela)

onde:

URL: link que desejamos abrir na janela secundária;
nomeJanela: nome que se atribui para a janela para dirigir links com o atributo target do HTML
formaJanela: são as configurações da janela como sua altura, largura, barras de rolagem e outros

window.open("http://programscomputer.blogspot.com/","janelaComputer", "width=100,height=320,scrollbars=NO")

Outra opção no JavaScript é criar uma função que se encarregue de abrir a janela secundária e receba por parâmetro o link abrir:

função javascriptPara executar esta função :
executar funçãoVeja alguns parâmetros para formatar a janela secundaria em JavaScript com window.open() :
  • height = ajustar a altura da janela em pixels;
  • left = distancia em pixels entre a borda esquerda da tela e a borda da janela.
  • location: barra de endereços que exibe a localização do site. Usa se location=yes para aparecer e location=no para não ser mostrada.
  • resizable = estabelece se o usuário pode ou não modificar o tamanho da janela onde resizable=yes pode modificar o tamanho e resizable=no o tamanho fica fixo.
  • scrollbars= definir se terá barra de rolagem usa-se scrollbars=no nunca aparecerá as barras e scrollbars=yes aparecem se necessário.
  • status= exibe ou não a barra de status. Usa se status=yes para aparecer e status=no para não ser mostrada.
  • top= distancia em pixels entre a borda superior da tela e a borda superior da janela.
  • toolbar= exibir ou não a barra de ícones básicos. Usa se toolbar=yes para aparecer e toolbar=no para não ser mostrada.
  • width= ajustar a largura da janela em pixels;

segunda-feira, 19 de setembro de 2011

PHP $_SERVER

servidor$_SERVER é um array php que possui informações como cabeçalhos, paths, e localizações de scripts. As entradas neste array são criadas pelo servidor web. Por isso pode ser que algumas informações não sejam mostradas por não estar configurado ou permitido, ou ainda podem ser mostradas outras além da lista mostrada a seguir. Também é importante lembrar que algumas versões do php não possuem todos estes elementos. Os principais elementos deste array são :

PHP_SELF: nome relativo a raíz do arquivo que está executando;

argv: argumentos passados para o script;

argc: número de parâmetros passados para o script (visivel em linha de comando);

GATEWAY_INTERFACE: número de revisão da especificação CGI que o servidor está utilizando;

SERVER_ADDR: endereço IP do servidor onde está o script em execução;

SERVER_NAME: nome do servidor onde o script está sendo executado;

SERVER_SOFTWARE: string de identificação do servidor, fornecida nos headers ao responder - requests.

SERVER_PROTOCOL: nome e número de revisão do protocolo de informação pelo qual a página foi requerida;

REQUEST_METHOD: método de request utilizando para acessar a página.

REQUEST_TIME: timestamp do início da requisição;

QUERY_STRING: string de solicitação pela qual a página foi acessada;

DOCUMENT_ROOT: diretório raiz onde o script atual é executado conforme definido no arquivos de configuração do servidor;

HTTP_ACCEPT: conteúdo do header Accept da requisição atual;

HTTP_ACCEPT_CHARSET: conteúdo do header Accept-Charset da requisição atual;

HTTP_ACCEPT_ENCODING: conteúdo do header Accept-Encoding da requisição atual;

HTTP_ACCEPT_LANGUAGE: conteúdo do header Accept-Language da requisição atual;

HTTP_CONNECTION: conteúdo do header Connection da requisição atual;

HTTP_HOST: conteúdo do header Host da requisição atual;

HTTP_REFERER: endereço da página acessada pelo usuário;

HTTP_USER_AGENT: conteúdo do header User-Agent da requisição atual

HTTPS: mostra valor não vazio se o script foi requisitado através do protocolo HTTPS.

REMOTE_ADDR: endereço IP de onde o usuário está visualizado a página atual.

REMOTE_HOST: nome do host que o usuário utilizou para chamar a página atual.

REMOTE_PORT: porta TCP na máquina do usuário utilizada para comunicação com o servidor web;

SCRIPT_FILENAME: caminho absoluto to script atual;

SERVER_ADMIN: valor fornecido pela diretiva SERVER_ADMIN do Apache no arquivo de configuração do servidor;

SERVER_PORT: porta utilizada pelo servidor web para comunicação;

SERVER_SIGNATURE: versão do servidor e nome do host virtual que é adicionado às páginas geradas no servidor;

PATH_TRANSLATED: caminho real do script relativo ao sistema de arquivos ;

SCRIPT_NAME: caminho completo do script atual;

REQUEST_URI: URI fornecido para acessar a página atual;

PHP_AUTH_DIGEST: variável definida para o cabeçalho 'Authorization' enviado pelo cliente;

PHP_AUTH_USER: nome fornecido pelo usuário fazendo autenticaçào HTTP;

PHP_AUTH_PW: senha fornecida pelo usuário fazendo autenticaçào HTTP;

AUTH_TYPE: tipo de autenticação utilizado.

Para visualizar estes elementos pode ser executado o script php abaixo.

foreach($_SERVER as $nome_campo => $valorCampo) {

$atribuicao = "\$" . $nome_campo . " = " . $valorCampo;

echo $atribuicao ;

}

O script também está na imagem a seguir para melhor visualizar.

código fonte

domingo, 11 de setembro de 2011

Criando arquivo xml no delphi

banco de dados  , tabela , arquivo xml, dataset, datasource, dbgrid,  atributos, valores,
Para se criar arquivos xml e o mesmo poder guardar informações como uma tabela de banco de dados é muito facil.



1º passo



iremos usar para demostrar esta situação tres componentes conhecidos nosso:

o clientdataset, o datasource e um dbgrid



2º passo



no clientdataset na propriedade fielddefs adicione um campo que representa um campo de uma tabela.



renome este campo na propriedade name que aparece no objectespector, depois em datatype informe que ele é uma string e por fim em attributs diga que ele é requerido.

Leia Mais

quinta-feira, 8 de setembro de 2011

Calcular diferença entre duas datas em PHP

php
Para calcular a diferença entre duas datas na linguagem de programação PHP, usaremos duas funções do PHP.
  • list: função utilizada para criar uma lista de variáveis em apenas uma operação.
  • mktime: função que retorna o timestamp Unix correspondente para os argumentos passados. Os parâmetros utilizados nesta função são:
int mktime ( int $hora , int $minuto , int $second , int $mes , int $dia , int $ano )

A função foi desenvolvida da seguinte forma :

function dif_dias($data_inicial, $data_final) {

list($dia_inicial, $mes_inicial, $ano_inicial) = explode("/",$data_inicial);
list($dia_final, $mes_final, $ano_final) = explode("/", $data_final);

$data_inicial2 = mktime(0,0,0,$mes_inicial,$dia_inicial,$ano_inicial);
$data_final2 = mktime(0,0,0,$mes_final,$dia_final,$ano_final);

$dias = ($data_final2 - $data_inicial2)/86400;

return $dias;
}

//Para Testar

$data_inicial = '01/09/2011';
$data_final = '05/09/2011';

$dias = dif_dias("$data_inicial","$data_final");

echo 'total de dias: '.$dias.'';

//Neste caso o resultado foi : total de dias: 4

O código fonte pode ser visto identado na imagem a seguir:

código fonte

sexta-feira, 2 de setembro de 2011

VB.NET Listando as Impressoras Instaladas



Componentes, Impressoras, VB.NET,  NameSpace, Dicas, Programação Vb.Net, Visual Basic,


Pra visualização do código a baixo, foram utilizados dois componentes:
- Um botão com nome = btn_carregar
- Um combobox com nome = Cmb_Impressoras

Obs.: Antes de iniciar o código propriamente dito, é necessário informar o NameSpace utilizado para trabalhar com as propriedades ligadas a impressora, que habitualmente é declaro no topo do código, chamado System.Drawing.Printing.
Chamada do namespace que trabalha com as propriedades relacionada a impressão

Imports System.Drawing.Printing

Private Sub btn_carregar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btn_carregar.Click

variaveis utilizadas
Dim v_total, v_cont, v_item As Integer
Dim pd As PrintDocument = New PrintDocument
Try

retornar o numero total de impressoras instaladas   v_total = pd.PrinterSettings.InstalledPrinters.Count

varre todas as impressoas instaladas adicionando-as ao combobox 
    With pd.PrinterSettings.InstalledPrinters
          For v_cont = 0 To v_total - 1
              Me.Cmb_Impressoras.Items.Add(.Item(v_cont))
          Next
      End With

seleciona o primeiro item    Me.Cmb_Impressoras.SelectedIndex = (v_item)
Catch ex As Exception
exibe mensagem de erro cajo aconteça ao inesperado     MessageBox.Show("Erro de Impressão " + ex.Message)
Finally
libera da memória
     pd.Dispose()
End Try
End Sub



Leis Mais

segunda-feira, 22 de agosto de 2011

YII Framework - PHP

YII, Framework  , Ferramenta , MVC,  PHP  , Aplicações  , Fluxo
O que é o Yii Framework?

O Yii é um framework que está sendo mantido e desenvolvido pelo criador do framework Prado, que é um famoso framework PHP baseado no conceito de event-driven programming, que a grosso modo seria um framework em que o seu fluxo é determinado por eventos.



quinta-feira, 18 de agosto de 2011

PHP str_replace

A função str_replace() do PHP substitui todas as ocorrências da string de procura com a string de substituição .

str_replace( "procuraPor", "substituirPor", $ondeFazerSubstituicao);

Neste exemplo estou substituindo o ponto por nada e o hífen também por nada.

$original = '123.456.789-0';

//isso retorna 123456789-0
$semponto = str_replace( ".", "", $original);

//isso retorna 1234567890
$semponto = str_replace( "-", "", $original);

Veja o mesmo exemplo na imagem a seguir:

segunda-feira, 1 de agosto de 2011

XAMPP

xampp
É um ambiente destinado a desenvolvedores web, atua como servidor web livre capaz de interpretar páginas dinâmicas. O ambiente é composto por:
  • base de dados MySQL;
  • servidor web Apache;
  • e os interpretadores para linguagens de script: PHP e Perl.
O nome deste ambiente significa:

X = para qualquer dos diferentes sistemas operacionais ;
A = Apache;
M = MySQL;
P = PHP;
P = Perl.

Atualmente XAMPP está disponível para Microsoft Windows, GNU/Linux, Solaris, e MacOS X.

O XAMPP possui aplicativos, bem como, o Apache, MySQL, phpMyAdmin, FileZilla FTP Server, OpenSSL.

Inicialmente o objetivo era de se utilizar esta ferramenta para desenvolvedores realizar testes locais em seus computadores, onde não tivesse eu necessitasse de acesso a internet. Hoje por ser considerada uma ferramenta segura pode ser utilizado como servidor público para servir sites web. O XAMPP é uma ferramenta que está atualizada com as útimas versões do Apache/MySQL/PHP e Perl.

Para instalar o XAMPP basta baixar o arquivo de instalação e realizar a mesma, pode ser baixado em : apachefriends

Se quiser utilizar o XAMPP com o banco de dados firebird faça a seguinte configuração :

- editar o php.ini em c:\arquivos de programas\xampp\apache\bin e retirar o ponto e virgula dafrente do extension=php_interbase.dll e salvar

Se o XAMPP não funcionar no windows XP faça a seguinte Gambiarra:

- abrir o c: windows system32 localizar o arquivo gds32.dll e copiar para a pasta xampp\apache\bin substituindo o já existente.

segunda-feira, 18 de julho de 2011

SimpleDateFormat

SimpleDateFormat
Converter data para string ou string para data em Java muitas vezes é uma das dúvidas dos programadores iniciantes. Para realizar estas conversões pode ser utilizada a classe SimpleDateFormat conforme demonstra o exemplo a seguir:

import java.text.SimpleDateFormat;
import java.util.Date;

public class testeDatas {

public static void main(String[] args) {

SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy");
String s = "10/11/2011";
Date d = null;
try {
// Converter a string para data
d = f.parse(s);
// Converter a data para string
s = f.format(d);

// System.out.println(s);

} catch (Exception ex) {
System.out.println(ex.getMessage());
}

}

}

quarta-feira, 1 de junho de 2011

Com usar a Função Trim() e Campos Auto Incremento

Dicas,  Artigo Firebird,  Função TRIM(), Auto Incremento, Insert,  Chave Primária, Generator, Sequence, Firebird , Tabela,  Caracteres  ,
Usando a função TRIM() para remover espaços em branco (ou outros caracteres) no início e fim do valor de um campo do tipo CHAR ou VARCHAR

A função TRIM() do Firebird pode ser usada quando precisamos remover espaços em branco (ou outros caracteres) no início e fim do valor de um campo do tipo CHAR ou VARCHAR. O retorno desta função é um CHAR ou VARCHAR sem os espaços em branco no ínicio e/ou final.

Veja como usar esta função em um comando SQL DML SELECT FROM:

SELECT TRIM(NOME) FROM CLIENTES WHERE ID = 1;



Aqui, se o valor do campo NOME possuir espaços antes e depois, a função TRIM() se encarregará de retirá-los.

É possível usar esta função para remover outros caracteres que não sejam espaços. Suponhamos que o valor do campo NOME seja algo como "##OSMAR J. SILVA##". Os caracteres "#" antes e depois do nome podem ser bda seguinte forma:

SELECT TRIM('#' FROM NOME) FROM CLIENTES WHERE ID = 1;


A função TRIM() pode ser usada em DSQL (Dynamic SQL) e PSQL (Stored procedure and trigger language).



Como criar uma tabela contendo um campo auto-incremento no Firebird

Em algumas situações precisamos criar tabelas que contenham campos auto-incremento. Estes campos são geralmente do tipo inteiro, chave primária e usados para identificar, unicamente, um produto, cliente, pedido, etc.

O Firebird, até sua versão 2.5, não fornece uma forma automática de se criar campos auto-incremento. Para conseguir realizar esta tarefa precisamos usar um gerador GENERATOR ou SEQUENCE. Nesta dica eu mostro passo-a-passo como isso pode ser feito.

Vamos começar da forma mais complicada, ou seja, sem usar nenhuma ferramenta gráfica, apenas o SQL Editor do IBExpert. Para acessá-lo vá em Tools -> SQL Editor. Siga atentamente os passos abaixo:

a) Comece criando a seguinte tabela. Basta copiar o comando DDL CREATE TABLE abaixo, colar no SQL Editor e pressionar F9:

/* criação da tabela CLIENTES */
CREATE TABLE CLIENTES(
ID INTEGER NOT NULL,
NOME VARCHAR(40) NOT NULL,
EMAIL VARCHAR(40) NOT NULL
);


b) O passo seguinte é definir o campo ID como chave primária. Isso pode ser feito com o seguinte comando DDL:

ALTER TABLE CLIENTES ADD CONSTRAINT PK_CLIENTES PRIMARY KEY (ID);


c) Agora que já temos a tabela, chegou a hora de criar o GENERATOR/SEQUENCE. Cole o código a seguir na janela do SQL Editor e pressione F9 (execute uma linha de cada vez):

CREATE SEQUENCE GEN_CLIENTES_ID;
ALTER SEQUENCE GEN_CLIENTES_ID RESTART WITH 0;


Veja que aqui eu estou usando a nova sintáxe de criação de SEQUENCE do Firebird 2.5. Se você estiver usando uma versão mais antiga, a sintáxe correta é (novamente execute uma linha de cada vez):

CREATE GENERATOR GEN_CLIENTES_ID;
SET GENERATOR GEN_CLIENTES_ID TO 0;


d) Estamos quase finalizando. Só precisamos criar um trigger que será disparado antes da inserção de novos registros (BEFORE INSERT). Veja o código:

CREATE TRIGGER TRIGGER_CLIENTES_BI FOR CLIENTES
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
if (NEW.ID is NULL) then NEW.ID = GEN_ID(GEN_CLIENTES_ID, 1);
END;


Este trigger faz com que o valor do campo ID seja sempre auto-incremento, começando em 1. Hora do teste final! Insira alguns registros na tabela usando um comando DML INSERT INTO parecido com o que temos abaixo:

INSERT INTO CLIENTES(NOME, EMAIL) VALUES('OSMAR J. SILVA',
'osmar@arquivodecodigos.net');


Note que o campo ID não é mencionado na query. Isso faz com que seu valor seja enviado como NULL e o trigger se encarregue de gerar o novo valor auto-incremento e atribuí-lo a este campo.

Fonte: http://www.arquivodecodigos.net/principal/

terça-feira, 24 de maio de 2011

Como trocar a coluna do DBGrid de lugar em Tempo de Execução

DBGrid , Tempo Execução, Delphi  , Colunas,  Banco de Dados,  Table, Ordenada,  Projeto ,

Olá, neste artigo mostrarei um forma bastante interessante de trabalhar com as colunas do DBGrid. Faremos a troca de posição das colunas usando o evento onTitleClick do DBGrid.

Quando o usuário clicar em uma coluna esta passará a ser a primeira coluna e a primeira trocará de lugar com a coluna clicada. A primeira coluna poderia ser usada para filtrar e/ou ordenar a tabela e sendo a coluna 0 (zero) fica mais fácil para identificar por qual coluna nossa table está ordenada/filtrada.

Desenhando o projeto

O design para este exemplo é bem compacto. Insira um TTable, um DataSource e um DBGrid. Altere suas propriedades conformes as tabelas abaixo. Sua tela deve se parecer com a Figura 1.

Continue Lendo

quinta-feira, 19 de maio de 2011

Exclusão Segura

Exclusão Segura, Registro  , Exclusão, Rotina, Referencia, Artigo MySql,  Codigo PHP,
Não existe nada pior do que excluir um registro “A” e o registro “B” perder sua referencia. Existem varias formas de evitar esse tipo de erro, nesse artigo é demonstrado uma rotina que é capaz de analisar o registro e verificar se o mesmo está associado a outro evitando perder referencia.

1 - Lógica
  • Verificar todas as tabela do banco de dados
  • Verificar se existe o campo
  • Verificar se o campo contém valor que se deseja excluir
  • Se existir conta mais um e retorna false
  • Se não, excluir o registro com segurança e retorna true
2 – Funções do PHP utilizadas
  • Mysql_connect
  • Mysql_select_db
  • Mysql_num_fields
  • Mysql_query
  • Mysql_fetch_row
  • Mysql_fetch_assoc
  • Mysql_fetch_field
Leia o Artigo Completo

quinta-feira, 5 de maio de 2011

Validação da Chave NF-e VB.Net

Artigo VB.net,  NF-e, Chave, 44 Dígitos, Nota Fiscal Eletrônica, Progrmação, Dicas  ,
Está função mostra como efetuar o cálculo do módulo 11 para a chave da NF-e composta por 44 caracteres, sendo 43 números e o 44 é dígito verificador da chave;

Esta função ajuda ao usuário caso ele tenha que digitar a nota.

A função pode ser chamada quando sai do campo chave ou antes de salvar o dado.

Primeiramente atribui a uma variável o valor do campo chave, removendo os espaços em branco, caso a chave seja composta da seguinte forma (DDDD DDDD DDDD ...);

Dim chave As String = TextBoxChave.Text.Replace(" ", "")

Após verifica se a chave tem 44 caracteres, caso não tenha não é necessário validar os demais campos.

If Len(chave) <> 44 Then

MsgBox("O Número da Chave da nota deve ter 44 Números! ", MsgBoxStyle.Critical)

TextBoxChave.Focus()

Exit Sub

End If

Chamada de função que retorna (True ou False) conforme o resultado do cálculo, passando a chave por parâmetro.

If Not validachavenfe(chave) Then

MsgBox("O Número da Chave da nota é inválida! ", MsgBoxStyle.Critical)

TextBoxChave.Focus()

Exit Sub

End If

Chamada da função, recebendo os 44 dígitos como parâmetro

Private Function validachavenfe(ByVal chave As String)

'Pausa para explicação
'Dim Vetor(4) As Integer Define um array com 5 elementos iniciados com zero
'Dim Vetor As Integer = new Integer(4) {} Define um array com 5 elementos iniciados com zero
'Dim Vetor() As Integer = {1, 2, 3, 4, 5} Define um array com 5 elementos e atribui valores a cada elemento
'Dim Vetor As Integer = new Integer(4) { 0, 1, 2, 3, 4} Define um array com 5 elementos e atribui valores a cada elemento
'Redim Vetor(10) Redimensiona o array Vetor para 11 elementos
'ReDim Preserve Vetor(10) Redimensiona o array Vetor para 11 elementos


Vetor que irá receber os dígitos da chave
Dim Numero(42) As Integer

Vetor com o peso de cada um dos dígitos
Dim pesos() As Integer = {4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2}

Dim soma As Integer = 0

Dim i As Integer

Dim resultado1 As Integer

Atribuindo ao vetor cada valor da chave até o indice 43.

For i = 0 To Numero.Length - 1
Numero(i) = CInt(chave.Substring(i, 1))
Next

Multiplica os valors da chave pelo seu peso e soma o resultado.

For i = 0 To Numero.Length - 1
soma = soma + (Numero(i) * pesos(i))
Next

Efetua o resto da divisão

soma = soma - (11 * (Int(soma / 11)))

Como regra da validação se o resultado for 0 ou 1 o digito verificador tem que ser igual a 0

If soma = 0 Or soma = 1 Then
resultado1 = 0
Else
Se for maior que 1 tem que diminuir de 11;
resultado1 = 11 - soma
End If


Verifica se o resultado é igual ao ultimo digito e retorna true ou false

If resultado1 = CInt(chave.Substring(43, 1)) Then
Return True
Else
Return False
End If

'Fim da Função
End Function

segunda-feira, 2 de maio de 2011

Criar e usar domínios (domain's)

Interbase , Firebird  , Domains, Dominios, Banco de Dados  , Manutenção do Banco


No InterBase e FireBird domínios são como tipos de dados. Tais domínios têm grande semelhança com o conceito de domínio aplicado à matemática, ou seja, um domínio define um conjunto de valores válidos para uma dada situação.

Podemos criar qualquer banco de dados sem fazer uso explícito de domínios. No entanto usar domínios explicitamente pode deixar o banco de dados mais organizado, com regras claras e bem definidas, e ainda conseguir uma economia substancial de mão de obra na construção e manutenção do banco.

Para demonstrar a utilidade dos domínios, vamos criar dois exemplos.

Continue Lendos...

quinta-feira, 31 de março de 2011

Executando um Comando SQL em VB.NET - Compact Framework

Banco  , Variável,  Comando SQL, Conexão,  Read, SqlCeCommand, Compact Framework,  VB.NET
Como executar um comando SQL em VB.NET Compact Framework

Primeiro passo é incluiar a biblioteca
  • Imports System.Data.SqlServerCe
Após dentro do procedimento que deseja executar o comando SQL;

Declare uma variável responsável pelo caminho do BANCO;

  • Dim dir As String = ""
Inicia a variável com o caminho onde esta o banco (neste caso o banco esta no mesmo diretório que a aplicação)
  • dir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
Declare a variável de conexão com o banco, com o caminho completo;
  • Dim string_conexao As String = "Persist Security Info=False; datasource=" & dir & "\NomeDoBanco.sdf"
Declare a variável responsável por abrir e fechar a conexão com o Banco;
  • Dim conexao_db As New SqlCeConnection(string_conexao)
Abra a conexão
  • conexao_db.Open()
Declare a variável responsável por receber o comando SQL;
  • Dim Sql As String = ""
Abra um bloco try para executar o comando SQL;
  • Try
Inicie a variável com o comando SQL desejável;
  • Sql = "SELECT campo1 FROM tabela"
Declare a variável que fará a execução do comando;
  • Dim comando_sql As New SqlCeCommand(Sql.ToString, conexao_db)
Execute o comando de leitura e guarde em uma variável resutado
  • Dim resultado As SqlCeDataReader = comando_sql.ExecuteReader()
Execute a leitura do resultado do SQL;
  • While resultado.Read()
Declare auma variável que receberá o resultado do campo;
  • Dim campo As Integer = 0
Atribua ao campo o valor do resultado ( verifique o indice, e o tipo do campo do banco de dados que dever o mesmo da variável que irá receber )
  • campo = resultado.GetValue(0)
Finaliza o laço de leitura
  • End While
Finaliza o bloco try
  • Catch ex As Exception
  • MsgBox("Erro ao executar o comando! " + ex.Message, MsgBoxStyle.Critical, "Erro")
  • End Try
Finaliza a conexão com o banco
  • conexao_db.Close()

Com esse passo a passo é possivel executar qualquer comando SQL e jogar os valores nas variáveis;

segunda-feira, 21 de fevereiro de 2011

PHP + Oracle

Oracle  , PHP  , Select,  Insert,  Update,  Conexão  , Orientado a Objetos,  Dados
Procurando na net e tentando resolve um problema que tive na empresa achei um artigo muito interessante para utilizar Oracle e PHP. Segue o artigo da revista PHP:


Devido à enorme dificuldade que eu tive pra conseguir fazer um sistema de validação de XML pra atender as regras da ANS, e gravar LOG dessas informações no Oracle utilizando PHP resolvi tentar ajudar outra pessoas, que por vezes desistiram de utilizar o Oracle ou também tem dificuldades.

Antes de entrar nos detalhes da classe de conexão com o BD Oracle, gostaria de agradecer ao colega Carlos Silva, que publicou um artigo aqui mesmo na Revista PHP sobre:

Configurando o PHP para usar com o Oracle - http://www.revistaphp.com.br/artigo.php?id=1

Bem, o primeiro passo foi configurar o PHP para acessar o Oracle, feito isto a próxima pergunta é... como conecto no banco para fazer minhas consultas?

Para isto eu achei um artigo muito legal do Emerson Plácido, http://forum.imasters.uol.com.br/index.php?showtopic=276521, e fiz as minhas adaptações para o meu sistema.

Muitas pessoas costumas fazer um único método para o SELECT e um para UPDATE, DELETE e INSERT, entretanto eu prefiro criar um método para cada um deles. Pois em alguns casos é interessante ter variáveis já predefinias para cada um deles.

Veja o Artigo na Integra