sábado, 9 de julho de 2011

Criando uma procedure - Inserção em varias tabelas (Pai - Filha)

Criando uma procedure - Inserção em varias tabelas (Pai - Filha)

Criando uma única procedure na qual passará informações cujo armazenamento deverá ser dividido entre as tabelas Cliente, Endereço e Telefone.


CreateProcedure dbo.stp_InsereCliente
@Codigo int,
@Nome VarChar(30),
@Endereco VarChar(30),
@Telefone VarChar(10)as
Begin
Set NoCountOn
Insert Into TabelaCliente(CodCliente, Nome)Values (@Codigo, @Nome)
InsertInto TabelaEnderecoCliente(CodCliente, Endereco)Values (@Codigo, @Endereco)
Insert Into TabelaTelefoneCliente(CodCliente, Telefone)Values (@Codigo, @Telefone)
SetNoCount Off
End
Exec stp_InsereCliente1, 'Pedro','São Paulo','2234-5678'
Exec stp_InsereCliente2, 'Tiago','Rio de Janeiro', '2245-1020'
Exec stp_InsereCliente3, 'João', 'Brasília','2298-9835'
Select* From TabelaCliente
Select* From TabelaEnderecoCliente
Select* From TabelaTelefoneCliente

ou então, podemos criar uma procedure de acordo com a lógida da trigger que estou utilizando logo abaixo:


– Criação da trigger de geração de seqüenciais
CREATE TRIGGER trgSeqIDPessoa ON tblPessoas
INSTEAD OF INSERT
AS
BEGIN
– Obter o maior ID (no caso do primeiro registro retornar zero) DECLARE @IDPessoa INT
SET @IDPessoa = ISNULL((SELECT MAX(IDPessoa) FROM tblPessoas),0)
SET @IDPessoa = @IDPessoa + 1

– Obter o nome da Pessoa
DECLARE @NomePessoa VARCHAR(50)
SET @NomePessoa = (SELECT NomePessoa FROM INSERTED)

– Gravar o registro na tabela de pessoas
INSERT INTO tblPessoas VALUES (@IDPessoa, @NomePessoa)
END




Att,
Leonardo Rocha.

quinta-feira, 7 de julho de 2011

Operadores em C#

Operadores em C#

 Operadores da linguagem:

  • Operadores aritméticos
  • Operadores de atribuição
  • Operadores relacionais
  • Operadores lógicos 

Operadores aritméticos
Em C# temos os seguintes operadores aritméticos:
Operador Descrição
+ (Adição)
- (Subtração)
* (Multiplicação)
/ (Divisão)
% (Resto/Módulo)
Dos cinco operadores citados acima os três primeiros trabalham da maneira que nós já conhecemos (Adição, Subtração e Multiplicação), já o operador de Divisão ‘/’ trabalha de maneira diferente na divisão de um inteiro, por exemplo, quando dividimos 11 por 2 usando esse operador (sendo 11 um inteiro) o resto da divisão é descartado, pois os inteiros não aceitam numeros fracionários, ou seja, o resultado seria 5. Já o operador ‘%’ tem como sua única função pegar o resto de uma divisão usando o mesmo exemplo dividindo 11 por 2 usando o operador ‘%’ modulo o resultado seria 1, já que é o resto da divisão.


using System;
class OperadoresAritmeticos
{
public static void Main ()
{
int soma = 0, diferenca=0, produto=0, resto=0;
double divisao=0; // resultado da divisão
int num1 = 10, num2 = 2;
soma = num1 + num2;
diferenca = num1 - num2;
produto = num1 * num2;
divisao = num1 / num2;
// resto de 3/2
resto = 3 % num2;
Console.WriteLine("num1 = {0}, num2 = {1}", num1, num2);
Console.WriteLine();
Console.WriteLine("Soma de {0} e {1} é {2}", num1, num2, soma);
Console.WriteLine("Diferença de {0} e {1} é {2}", num1, num2, diferenca);
Console.WriteLine("Produto de {0} e {1} é {2}", num1, num2, produto);
Console.WriteLine("Quociente de {0} e {1} é {2}", num1, num2, divisao);
Console.WriteLine();
Console.WriteLine("resto de 3 quando é dividido por {0} é {1}", num2, resto);
}
}
O exemplo acima embora simples faz uso de todos os operadores aritméticos, como você já viu no artigo passado o método ‘WriteLine’ da classe ‘Console’ apenas mostra uma mensagem na tela, veja a seguinte linha de código:
Console.WriteLine("Soma de {0} e {1} é {2}", num1, num2, soma);


Você deve estar se perguntando o que significa esses ‘{0}, {1} e {2}’, isso serve para nós dizermos ao programa onde se encontra o valor da variavel nessa string, ou seja, ‘{0}’ será substituído por ‘num1’, ‘{1}’ será substituído por ‘num2’ e ‘{2}’ será substituído por ‘soma’.

Operadores de atribuição

Em C# temos os seguintes operadores de atribuição:

Operador Descrição

= (Atribuição simples)
+= (Atribuição aditiva)
-= (Atribuição Subtrativa)
*= (Atribuição Multiplicativa)
/= (Atribuição de divisão)
%= (Atribuição de módulo)
Um operador de atribuição serve justamente para atribuirmos um valor a uma variável, veja:
x = 5;
Ou seja, simplesmente atribuímos o valor 5 a variável x usando o operador de atribuição simples ‘=’.
Outro exemplo:
int num1=10, num2=2;
num1 += num2;
Primeiro atribuímos o valor 10 a variável num1 e o valor 2 a variável num2, na segunda linha atribuímos o valor de num2 a variável num1 com o operador de atribuição ‘+=’, que valor terá num1 agora?
Neste caso ‘num1’ terá o valor atribuído igual a 12, pois seria o mesmo que:
int num1=10, num2=2;
num1 = num1 + num2;
O mesmo é valido para os outros operadores, exemplo:
int num1=10, num2=2;
num1 -= num2;
O que seria o mesmo que:
int num1=10, num2=2;
num1 = num1 - num2;
Neste caso usamos o operador ‘-=’ e o resultado de num1 seria 8, e assim por diante.

Operadores relacionais

Em C# temos os seguintes operadores relacionais:

Operador Descrição

== (Igualdade)
> (Maior)
< (Menor)
<= (Menor igual)
>= (Maior igual)
!= (Diferente)
Uma expressão relacional sempre retorna um valor Booleano, ou seja, verdadeiro ou falso, por exemplo:
Definindo duas variáveis
int num1 = 2, num2 = 5;
Então,
num1 == num2    
    // falso
num1 != num2     
    // verdadeiro
num1 >  num2    // falso
num1 <  num2    // verdadeiro
num1 <= num2  
    // verdadeiro
num1 >= num2 // falso
Importante: Isso mesmo, quando fazemos comparações (relação) para sabermos se dois números são iguais usamos dois (2) sinais de igualdade ‘==’ o que é diferente do operador de atribuição simples ‘=’.

Operadores lógicos

Em C# temos os seguintes operadores lógicos:

Operador Descrição

&& (E)
|| (OU)
Os operadores lógicos são usados para combinar comparações, exemplo:
Definindo duas variáveis
int num1 = 1, num2 = 3;
bool PrimeiroTeste = num1 > 3 && num2 < 10
Neste caso a variável ‘PrimeiroTeste’ será falsa, pois numa expressão onde usamos o operador lógico && (E) as duas expressões relacionais tem que ser verdadeiras, neste caso a primeira é falsa(num1 não é maior que 3) e a segunda é verdadeira (num2 é menor que 10), mas para que a variável PrimeiroTeste seja verdadeira as duas condições tem que ser verdadeira o que não ocorre.
int num1 = 1, num2 = 3;
bool SegundoTeste = num1 > 3 || num2 < 10
Neste caso a variável ‘SegundoTeste’ é verdadeira, pois quando usamos o operador lógico || (OU) basta que uma das comparações seja verdadeira.

Precedência de Operador

Quando falamos de operadores aritméticos, alguns operadores têm precedência sobre outros, veja:
int X = 25 – 7 * 2;
A expressão acima tem duas respostas dependendo do modo que se faça à conta, por exemplo, 25 - 7 = 18, 18 * 2 = 36, x = 36. Ou, 7*2 = 14, 25-14 = 11, x = 11.
Qual resposta é correta??
Neste caso a segunda, ou seja, x = 11, pois o operador de multiplicação ‘*’ tem precedência sobre o operador de subtração ‘-’, assim o calculo de multiplicação é feito primeiro.
Mas e se eu quisesse que a subtração fosse feita primeiro?
Simples, para resolver esse ‘problema’ usamos os parênteses, assim:
int X = (25 – 7) * 2;
Agora sim o resultado seria 36, pois o que esta dentro dos parênteses é calculado primeiro e depois com o resultado desse calculo é calculado o resto da expressão.

Incremento e Decremento

Incrementar um número ou variável significa adicionar 1 ao valor atual, da mesma forma que subtrair 1 de um número ou variável se da o nome de Decremento.
Em C# temos o seguinte:

Operador Descrição

++ (Incremento)
-- (Decremento)
Exemplo:
int X = 1;
X++;
Aqui estamos atribuindo o valor 1 a variável X e depois na linha seguinte incrementando 1 a mesma variável, ou seja, nesse momento X vale 2.
O mesmo é válido para o Decremento, veja:
X--;
Se antes X valia 2 agora vale 1, pois usamos o operador de decremento assim tirando 1 da variável.

Prefixo e Sufixo

Tanto o operador de incremento quanto o operador de decremento tem duas formas de serem aplicados: prefixo e sufixo.
Prefixo à O operador é digitado antes do nome da variável
Ex:
int X = ++Y;
Sufixo à O operador é digitado depois do nome da variável
Ex:
int X = Y++;
O que ocorre é que quando estamos atribuindo um valor a uma variável usando prefixo, ou seja, algo do tipo <variavel1> = ++<variavel2> você esta dizendo para que a variável2 seja incrementada e logo depois seja atribuído o seu valor a variável1.
Exemplo:
int x = ++y;
Vamos imaginar que a variável y vale 2 e que a variável x vale 0 (zero), como estamos usando o prefixo neste caso a variável y será incrementa em 1, ou seja, agora y vale 3 e logo em seguida o valor de y é atribuído a variável x que agora também vale 3.
No caso de usarmos o sufixo primeiro o valor de y seria passado para a variável x, ou seja, x valeria 2 e em seguida y seria incrementado assim y agora vale 3.



Att,
Leonardo Rocha

terça-feira, 5 de julho de 2011

Script para Inserção no banco de dados - Tables Cidade e UF

Script para Inserção no banco de dados - Tables Cidade e UF



Atendendo a necessidade de muitos desenvolvedores, que é ter um banco com todas as cidades e estados do Brasil, vou postar aqui um banco MySQL que tenho ajustado e formatado com todas essas informações.

São 2 tabelas, uma delas com todos os 26 estados + distrito federal, tendo o nome do estado e abreviação (sigla), a outra tabela, que é bem maior, onde estão cadastradas todas as cidades brasileiras, nesta tabela, estão as seguintes informações, nome da cidade, sigla do estado, e código do estado relativo a tabela anterior dos estados. Esta tabela de cidades, tem além das quase 5600 cidades brasileiras, possui junto distritos, e localidades, totalizando 9715 registros.
Espero que seja util a todos !!!

Click aqui para fazer download.





Leonardo Rocha.

quarta-feira, 15 de junho de 2011

CONFIGURAÇÃO SVN

CONFIGURANDO O SVN NO WINDOWS.

Como usar O TortoiseSVN Para criação de repositorios e manutenção do mesmo no Ruwindows



  • 2 – Depois de baixado e instalado terá de reiniciar o windows para podermos começar o trabalho.


  • 3 – Após reiniciado, vamos criar a nossa pasta local que servirá de repositório
3.1-Abra o windows explorer, botão direito do mouse, nova pasta:
3.2-De a pasta o nome de RepositorioSVN por exmplo:
            
4 – Vamos agora configurar a nossa pasta como repositorio, mais antes, já que instalamos o pack para linguá portuguesa vamos alter a configuração para português:

  •             4.1-Clique com o botão direito do mause em cima da pasta, escolha a opção TortoiseSVN depois a opção setings:
4.2-Aparecerá a tela abaixo:
4.3-Na guia Language: (em destaque vermelho) selecione Português:




5 – Configurando nossa pasta como repositorio local:

  • 5.1-Clique com o botão direito do mouse na pasta que criamos anteriormente, depois em TortoiseSVN, depois em “Criar repositório aqui...”



  • 5.2-Aparecerá uma tela perguntando o tipo de repositório, vamos deixar a que já está marcada “Sistema de Arquivos Nativo (FSFS)”
Após confirmar o tipo de repositório, aparecerá a tela abaixo confirmando a criação do repositório:

Pronto, nosso repositório está criado, so que não iremos trabalhar nessa pasta pois os repositórios SVN guardam os seus arquivos em um formato proprietário que não podemos usar, para trabalharmos nós precisamos fazer uma outra pasta para “obter” os arquivos do repositório, para isso fazemos o seguinte:
5.3-Criamos outra pasta (procedimento 3.1), de a ela um nome como “PastaDeTrabalho”
5.4-Vamos “linkar” essa pasta com o nosso repositório para obter os arquivos:
- Clique com o botão direito na pasta de trabalho e escolha SVN Obter:


- Aparecerá a tela abaixo:
- Nessa tela é que vamos linkar o nosso repositório, no campo URL do repositório colocamos o endereço do repositório criado  anteriormente. (esse endereço pode ser copiado do windows explorer, no caso acima a pasta está em : C:\TrabalhoTutorial\RepositorioSVN). Para adicionar no campo URL é necessário colocar antes do endereço o formato file:///. No caso acima ficará assim: file:///C:/TrabalhoTutorial/RepositorioSVN








Existem várias opções no TortoiseSVN para a manipulação de pastas/arquivos, podemos voltar uma versão anterior do documento, comparar duas versões, alterar o nome do arquivo/pasta (lembre-se, altere o nome apenas pelo Tortoise, caso seja feito diretamente pelo Windows pode prejudicar o envio do docmento).


O TortoiseSVN apresenta várias outras opções como ilustrado abaixo:



  •  .Exibir Histórico => Exibe o histórico do documento/pasta em questão, os dias e horários em que foram submetidas e a versão atual.
  • .Repo-Browser => Abre uma janela de navegação no repositório.
  • .Verificar Alterações => Verifica se há alguma alteração entre o arquivo atual e o arquivo que está no repositório (essencial quando mais de uma pessoa trabalha com o mesmo arquivo).
  • .Gráfico de Revisões => Mostra um grafico com os nós de alterações executados.
  • .Atualizar para Revisão => Atualiza o arquivo para umaoutra versão pra revisão do mesmo.
  • .Renomear => Permite renomear o arquivo.
  • .Excluir => Exclui o arquivo
  • .Obter Trava => Trava o arquivo em questão para que outros não possam abri-lo.
  • .Ramo/Rótulo=>Cria uma cópia do arquivo para um outro trabalho/alteração, permitindo alterações diferentes em um mesmo arquivo, após um ramo ser adicionado ele mostra na opção gráfico de revisões vários ramos em forma de arvore permitindo visões diferentes de um mesmo arquivo
  • .Altera um Ramo/Rotulo => Altera Ramo/Rotulo.
  • .Combinar => Combina dois ramos/rotulos diferentes.
  • .Responsabilidades => Mostra as alterações de uma versão para outra com o respectivo usuário que alterou o arquivo.
  • .Criar correção => Cria um ponto de correção para o arquivo.
  • .Propriedades =>Adiciona/mostra as propriedades do arquivo.
  • .Ajuda => Inicia a Ajuda do TortoiseSVN (muito útil, contem qualquer informação necessaria para a criação e manipulação de subverse).
  • .Preferências => Altera as preferências do TortoiseSVN, como idioma, aparência e outros.
  • .Sobre => Mostra informações do TortoiseSVN, como a versão instalada.




Att,
Leonardo Rocha.