segunda-feira, 6 de fevereiro de 2012

Criando instalador de software juntamento com Firebird utilizando Inno Setup e IsTool

 
Salve galera!
Neste artigo vou demonstrar como é fácil e simples criarmos um instalador padronizado do nosso software. Para tanto iremos utilizar o Inno Setup (http://www.jrsoftware.org/isdl.php) em conjunto com IsTool (http://sourceforge.net/projects/istool/) ambos Free. Não demonstrarei aqui como instalá-los já que a instalação dos mesmos é bem facil e prática (próximo.. próximo…próximo..rs). No momento estou utilizando a versão 5.3.0.1 do IsTool e 5.3.3 do Inno Setup.
Na oportunidade também irei demonstrar como podemos embutir o instalador do Firebird juntamento com o instalador do nosso software.
Agora vamos começar nossos trabalhos.
1 – Crie uma pasta na unidade C ou outra qualquer de sua preferencia com o nome “Instaladores”;
2 – Dentro da pasta criada anteriormente, crie uma sub-pasta com o nome “Instalador + nome do seu software” – no meu caso criei Instalador Comanda;
3 – Copie para dentro da pasta criada no item anterior todos os arquivos que serão necessário à instalação do seu software (executável, DLLs … enfim, todo e qualquer arquivo que seja necessário para o perfeito funcionamento do seu software na máquina do seu Cliente);
4 – Abra o IsTool;
clip_image003 clip_image004
4.1 - Click no menu arquivo depois novo ou então no botão novo da barra de ferramentas, após executar esta ação será aberta a caixa de diálogo “Inno Setup Script Wizard” – veja que o IsTool neste instante invoca o wizard do Inno;
clip_image006
4.2 – Click em Next e na caixa de diálogo que se abrirá informe: Nome da sua aplicação, versão, nome e a url da sua empresa – depois click em Next, conforme tela abaixo;
clip_image008
4.3 – Na próxima caixa de diálogo click no botão Browse e selecione o executável da aplicação que você esta criando o instalador (o mesmo deverá estar dentro da pasta Instalador + nome de seu software, criado no item 2), deixe marcado a opção Allow user to start the application after setup has finished, depois click em Next;
clip_image010
4.4 – Na caixa de diálogo seguinte informe o nome como deve ser criado a opção de menu no windows para sua aplicação, neste exemplo utilizarei o nome da minha empresa \ nome da minha aplicação (Hélio Sistemas\Comanda). Marque \ desmarque as opções desta tela de acordo com sua necessidade, depois click em Next;
clip_image012
4.5 – Na caixa de diálogo seguinte selecione os arquivos de Licença do seu software e de informação(ões) que deverá(rão) ser(em) executado(s) antes/após a instalação do mesmo – para tanto click no botão Browse ao lado de cada uma das caixas de diálogo e depois click em Next;
clip_image014
4.6 – Na caixa de diálogo seguinte selecione o(s) Idioma(s) que deverá(ão) ser(em) incluído(s) no seu instalador e depois click e Next;
clip_image016
4.7 – Na caixa de diálogo seguinte informe o diretório (pasta) onde deverá ser gerado o arquivo do instalador de sua aplicação, o nome do arquivo que será gerado, o icone (caso queira colocar um icone personalizado para o seu instalador) e senha se assim desejar, depois click em Next e por último em Finish.
clip_image018
Após clicar no botão Finish você irá visualizar no painel script do IsTool o script criado pelo Inno Setup até aqui (conforme figura abaixo), estando assim quase pronto o nosso instalador.
clip_image020
Vamos entender um pouco o painel Sections (seções) do IsTool:
O painel Sections nos mostra as diversas seções que compoem o nosso script de instalação e será atraves do mesmo que iremos dar continuidade na criação do instalador de nossa aplicação. A medida que formos dando continuidade a criação do nosso instalador, veremos com mais detalhes algumas das principais sections.
5 – Retomando o trabalho, navegue até a section Tarefa e selecione a mesma, depois na barra de ferramentas click no botão novo item, na caixa de diálogo (novo item) que se abrirá informe: Instalação do Servidor para o nome e a descrição da tarefa, selecione os flags (exclusivo e marcado uma vez) depois click em Ok. Click novamento no botão novo item, na caixa de diálogo (novo item) que se abrirá informe: Instalação de Estação para o nome e a descrição da tarefa, selecione os flags (exclusivo e desmarcado) e depois click em Ok.
clip_image023 clip_image024
As tarefas criadas anteriormente servirá para que possamos informar ao nosso instalador qual(is) arquivo(s) deve(m) ser(em) instalado(s) no momento da instalação do servidor/estação.
6 – Agora navegue até a section Arquivos e Diretórios selecione a mesma (neste momento observe que no Painel da direita Files, já existirá um arquivo, no caso o executável da aplicação a qual estamos criando o instalador), depois na barra de ferramentas click no botão novo item – na caixa de diálogo novo item click nas reticências localizada a direita da caixa de edição Origem e selecione um arquivo (aqui iremos selecionar o arquivo de banco de dados da nossa aplicação) no meu exemplo será o arquivo Comanda.FDB na caixa de edição Dir. destino, selecione {app} e acrescente a \Dados, devendo ficar assim {app}\Dados. Marque os flags Comparar data/hora, Confirmar sobreposição e Nunca desinstalar e click em Ok. Observe que o nosso arquivo será mostrado no painel (Files). Dê um duplo click no nome do arquivo no painel Files, será então exibida a caixa de diálogo propriedades, click então na a aba (tarefas) e marque [Instalação do Servidor] em sequida click no botão Ok – aqui vale uma pequena observação… lembra das tarefas que criamos anteriormente e o que disse de como elas seriam utilizadas, pois bem ai esta a sua primeira serventia.
clip_image027 clip_image028
7 – Repetindo os passos do item anterior (6) insira quantos arquivos se façam necessários serem incluídos na instalação de sua aplicação ativando em cada um os flags que melhor atenda as suas necessidades e também defina em quais tarefas (Instalação do servidor/estação) eles deverão ser adicionados.
Bem até aqui tudo nos conformes… estamos quase concluindo o nosso instalador, porém devem estar perguntando e o Firebird? O Fire nós vamos adicioná-lo seguindo os mesmo passos do item (6) – porém com alguns pequenos detalhes – adicione o executável do instalador do Firebird (aqui eu adicionei o instalador da versão 2.5 - Firebird-2.5.0.26074_1_Win32.exe), porém você deverá adicionar o instalador da versão do Firebird a qual o seu aplicativo utiliza. Agora navegue até a section Executar na instalação, selecione a mesma e depois click no botão novo item – será exibida a caixa de diálogo novo item conforme abaixo.
clip_image030
Na caixa de diálogo novo item, ao lado do nome Arquivo click no combo e veja que será exibida uma lista com todos os arquivos que foram adicionados por nós inclusive o executável do instalador do Firebird – selecione o mesmo e marque os flags Executar maximizado, Pular se arquivo já existir – em Parâmetros digite /SP /SILENT estes parâmetros farão com que a instalação do Firebird não solicite ao usuário se deseja iniciar a instalação e exibirá apenas a barra de progresso da instalação. Deixando o ponteiro do mouse sobre essas flags será exibida uma breve descrição da funcionalidade de cada uma, por isto não irei descrevê-las aqui. Para saber um pouco mais a respeito dos parâmetros de linha de comando que podemos utilizar na instalação do Firebird consulte http://www.firebase.com.br/fb/artigo.php?id=1133 .
Antes de compilar nosso instalador vamos fazer um pequeno ajuste para que a instalação do Firebird seja feita ao final, antes da execução de nossa aplicação. Navegue até a section Executar na instalação e selecione a mesma, em seguida selecione no Painel Filename o arquivo do instalador do Firebird, depois click no botão Mover para baixo – devendo os arquivo ficarem conforme imagem abaixo:
clip_image032
Agora vamos compilar nosso instalador – na barra de ferramentas click no botão Compilar instalador e aguarde o termino da mesma. Se você seguiu todos os passos até aqui corretamente, ao final da compilação irá ocorrer um erro devido aos nome das nossas tarefas que contém caracteres que não são aceitos – conforme imagem abaixo.
clip_image034
Click no botão Close em seguida navegue até a section Tarefas dê um duplo click nas tarefas criadas por nós e renomei-as conforme abaixo:
Nome – Instalação do Servidor – mude para Servidor
Nome – Instalação da Estação – mude para Estacao
Observe que em nome não pode haver caracteres especiais.
Compile novamente o seu instalador, ao final será exibida a mensagem Instalação compilada com sucesso – Testar agora? Click em sim e faça o teste da instalação da sua aplicação.
Esta foi uma pequena introdução do que podemos fazer com o Inno Setup / IsTool – essas poderosas ferramentas tem bem + recursos que os aqui por mim demonstrado e que poderão ser explorados. Tanto o Inno Setup quando o IsTool fornecem diversos exemplos de instaladores que ficam no diretório de instalação dos mesmos em uma pasta com o nome Examples.
Bem, duvidas/sugestões serão sempre bem vindas – apesar de não ser nenhum expert em Inno Setup / IsToll tentarei da melhor forma possível ajudá-los.
-:) –:)

quinta-feira, 19 de agosto de 2010

Alterando a forma de login do windows 7

Hoje decidi alterar a forma de login do windows 7 para ficar da mesma forma que o windows XP sem a tela de boas vindas. Fiz algumas pesquisas na net tendo encontrado farto material a respeito, porém foi atraves da dica do amigo Léo (Leh_U) que me passou o link http://www.mydigitallife.info/2010/01/28/revert-and-change-to-xp-classic-logon-screen-on-windows-7-or-vista/, que consegui. Como o artigo esta em inglês, resolvi fazer um pequeno tuturial para poder auxiliar outras pessoas que por ventura desejem fazer o mesmo.

1 – Iniciar executar ou (win + R);

2 – Digite secpol.msc <enter>

3 – Será exibida a tela de edição das Diretivas de Segurança Local do windows 7, navegue até o item (Diretivas locais) e expanda a mesma, dentre as diretivas locais selecione (Opções de segurança);

4 – No painel do lado direito, navegue até (Logon interativo: não exibir o último nome do usuário) e dê um duplo click no mesmo;

5 – Na caixa de dialogo propriedades de Logon interativo que será exibibo, marque o checkbox que esta ao lado de “Habilitado”, depois click em “Aplicar” e depois em “Ok”;

6 – Feche a tela de edição das diretivas de segurança local;

7 – Reinicie o computador e veja o resultado.

Obs.: No artigo fonte de onde tirei esta dica e que posto acima, também ensina como fazer esta mesma alteração via registro do windows, porém aconselho ao menos experientes a não se habilitar a fazer tal procedimento.

-:) Até breve!

sábado, 17 de julho de 2010

Firebird Developers Day 1ª participação

Salve galera!

Após diversas vezes planejar e nunca concretizar, enfim este ano conseguir participar do FDD na sua 7ª edição. Nesta edição foram apresentadas as novidades da versão 2.5 e o que podemos esperar para o 3.0 – Enfim agora é oficial, a partir da versão 3.0 usuários do Firebird não mais serão externos, mais sim parte integrante do BD, aguardarei ansioso por este lançamento que infelizmente nas previsões mais otimistas só daqui a mais um ano teremos provavelmente a primeira versão candidata RC1.

Nesta edição do FDD duas palestras para mim se destacaram, Criando Log utilizando os novos recursos do Fire 2.5 ministrada pelo Carlos Cantu e Controle de versões com Subversion ministrada por Erick Sassé – show – Erick é uma figuraça.

Meus parabens a todos os paletrantes e toda a galera participante que sempre engrandecem este evento maravilhoso.

Galera vocês são demais, até 2011 com o 8º FDD!

quarta-feira, 16 de setembro de 2009

Clonando um HD na VirtuaBox

1 - Copie e renomei o disco existente;
2 - Mova o disco criado anteriormente para pasta
    C:\Arquivos de Programas\Sun\xVM VirtualBox
3 - Execute o prompt de comando do windows como Administrador
4 - Entre no diretorio C:\Arquivos de Programas\Sun\xVM VirtualBox
5 - Execute o seguinte comando:
    vBoxManage internalcommands sethduuid "seu_disco.vdi"
Se tudo ocorrer normalmente será exibido a mensagem UUID Changed to: ....

domingo, 29 de junho de 2008

BOOTMGR is compressed

Este erro ocorre na inicialização do windows por motivos até o presente momento desconhecidos. No meu caso eu fui compactar a unidade para liberar espaço e logo após efetuar a compactação e reiniciar a máquina fui surpreendido com a mesma. Bem, após muitas horas de pesquisa na net onde encontrei farto material de outras pessoas reportando este erro mais nada de solução, encontrei uma dica a qual me livrou de ter que perder mais tempo ainda formatando e reinstalando todos os programas. Como é uma experiência nada agradável, aqui irei descrever quais os passos a serem seguidos nesta situação:

1 - Coloque o DVD do windows vista no drive e dê boot na máquina atráves do mesmo;

2 - Na primeira tela click em avançar;

3 - Na tela seguinte click na opção Reparar o Computador;

4 - Será detectada a instalação do vista, sendo exibida uma caixa de dialogo com as informações da mesma. Click em avançar;

5 - Na próxima tela click na opção Prompt de Comando;

6 - Na janela que se abrirá (prompt do DOS) digite:

Bootrec/Fixboot - tecle <enter> e aguarde a confirmação da operação bem sucedida;

Bootrec/fixmbr - tecle <enter> e aguarde novamente a confirmação.

Pronto! Se tudo correu bem até aqui agora é só reiniciar seu computador e seu sistema iniciará normalmente.

segunda-feira, 9 de junho de 2008

VIEW - Tabela Virtual

VIEW é uma tabela única derivada de outras tabelas. Essas outras tabelas podem ser tabelas de base ou outras VIEWS existentes. Uma VIEW não existe na forma física; ela pode ser considerada uma tabela virtual, em contraste com tabelas de base, cujos registros são efetivamente armazenados no banco de dados. Podemos imaginar uma VIEW como um modo de especificar uma consulta à qual precisamos com frequência.

O comando para criação de uma VIEW é CREATE VIEW. Uma VIEW é composta do nome de uma tabela, uma lista de nomes de atributos e uma consulta para especificar seu conteúdo. Se um atributo for uma função do banco de dados como SUM, AVG, COUNT, MAX, etc. ou uma operação aritmética você deve especificar um nome para identificar os atributos, senão é opcional.

Exemplo - tabelas de base:

Create Table COLABORADOR (

id_colaborador integer not null,

id_supervisor integer,

id_depto integer,

nomer varchar(50),

sexo varchar(1),

data_nascimento date,

salario numeric(15,4),

constraint pk_colaborador primary key (id_colaborador),

constraint fk_colab_supervisor foreign key (id_supervisor) references colaborador (id_colaborador),

constraint fk_colab_departamento foreign key (id_depto) references departamento (id_depto) on update cascade)

);

Create Table DEPARTAMENTO (

id_depto integer not null,

id_gerente integer not null,

nome_depto varchar(30),

constraint pk_departamento primary key (id_depto),

constraint fk_depto_gerente foreign key (id_gerente) references colaborador (id_colaborador) on update cascade)

);

Create Table PROJETO (

id_projeto integer not null,

id_depto integer not null,

nome_projeto varchar(30),

constraint pk_projeto primary key (id_projeto),

constraint fk_projeto_depto foreign key (id_depto) references departamento (id_depto) on update cascade)

);

Create Table COLABORADOR_PROJETO (

id_colaborador integer not null,

id_projeto integer not null,

horas float not null default 0.00,

constraint pk_colab_projeto primary key (id_colaborador, id_projeto),

constraint fk_cp_colaborador foreign key (id_colaborador) references colaborador (id_colaborador) on update cascade,

constraint fk_cp_projeto foreign key (id_projeto) references projeto (id_projeto) on update cascade)

);

E a partir delas criar a seguinte view:

Create View PROJETOS_COLABORADOR

as Select c.id_colaborador,

c.nome,

p.nome_projeto,

d.nome_depto,

cp.horas

From Colaborador_Projeto cp

Join Colaborador c on (c.id_colaborador = cp_id_coladorador)

Join Projeto p on (p.id_projeto = cp.id_projeto)

Join Departamento d on (d.id_depto = p.id_projeto)

Uma VIEW está sempre atualizada, já que quando alterarmos os registros nas tabelas de base das quais a VIEW é definida, a VIEW deve automaticamente refletir essas alterações. Desta forma, uma VIEW não efetua nenhuma ação na hora de sua criação, e sim na hora que especificamos uma consulta. Sendo de responsabilidade do SGDB e não do usuário assegurar que a VIEW esteja sempre atualizada.

  • Uma VIEW com uma única tabela definidora é atualizável se os atributos contiverem a chave primária da relação de base, porque mapeará cada registro resultante para um único registro da tabela de base;
  • VIEWS definidas em múltiplas tabelas utilizando junções geralmente não são atualizáveis;
  • VIEWS definidas com o uso de funções de agregação e de agrupamento não são atualizáveis.

Amigos, este artigo é uma pequena mostra do poder das VIEWS e para aqueles que queiram ter um maior conhecimento, aconselho a leitura de uma bibliografia específica para o SGDB utilizado - para o nosso bom Firebird recomendo os livros "Firebird Essencial" (capítulo 14) e "Firebird - O Banco de Dados do Novo Milênio" (capítulo 13), ambos de autoria de Carlos Cantu.

Referência:

Navathe, Elmasri, Sistemas de Banco de Dados - Fundamentos e Aplicações, Rio de Janeiro, 2000, Ed. LTC, 3ª Ed., 837p.

terça-feira, 3 de junho de 2008

Utilizando Stored Procedure (SP) no Firebird

O uso de Stored Procedures é muito útil em um ambiente cliente/servidor em função de fatores como desempenho, redução do tráfego de informações pela rede, agilidade e segurança. Neste artigo vamos explorar o poder das SPs, inicialmente definirei Stored Procedure, os tipos suportados pelo Firebird, sua estrutura e por fim criaremos uma SP e analisaremos a mesma linha a linha.

Stored Procedure (SP) é, na sua essência, um programa PSQL, que é armazenada em um banco de dados Firebird. A stored procedure é composta pelos comandos SQL, variáveis1 e comandos de fluxo lógico. As SPs podem receber (caso existam) e retornar (caso a SP retorne valores) valores através de parâmetros de entrada e saída.

O Firebird suporta dois tipos de SPs: executáveis que retornam no máximo um registro e as selecionáveis que podem retornar vários registros. As SPs selecionáveis se comportam como “tabelas virtuais - views“ do banco, já que podem ser utilizadas como fonte de dados em selects. As SPs selecionáveis são um extraordinário recurso nos fornecido pelo Firebird e que eu em particular uso e abuso das mesmas para me auxiliar na confecção de relatórios.

As SPs são executas em um determinado momento, através de chamadas de execução específica, acionada pelo desenvolvedor ou pela aplicação no momento desejado.

Estrutura e criação de uma SP – O comando para criação de uma SP é o Create Procedure. Uma SP tem duas partes: cabeçalho e corpo. No cabeçalho, temos a definição do nome da SP, parâmetros de entrada (caso existam) e parâmetros de saída (caso a SP retorne valores). O corpo contém declarações de variáveis e comandos a serem executados.

Create Procedure Minha_Primeira_SP (

Param1 tipo, --- lista de parâmetros de entrada -----

Param2 tipo)

Returns (

Valor1 tipo, --- lista de valores de saída -----

Valor2 tipo)

As

Declare variable var1 tipo; ---- lista de variáveis -----

Declare variable var2 tipo;

Begin

(Corpo da SP – comandos)

End

Vamos agora ver na prática a criação de uma SP que funciona como um gerador de códigos para tabelas – (tipo um generetor);

1 CREATE PROCEDURE NOVO_CODIGO (

2 tabela varchar(30))

3 returns (

4 proximo_codigo integer)

5 as

6 declare variable codigo_atual integer;

7 begin

8 --Recupera o valor atual do código

9 select id_atual from controle_id c

10 where (c.tabela = :tabela)

11 into :codigo_atual;

12 --Verifica se o valor do código é nulo

13 if (:codigo_atual is null) then

14 begin

15 proximo_codigo = 1;

16 insert into controle_id (tabela, id_atual)

17 values (:tabela, :proximo_codigo);

18 end

19 else

20 begin

21 proximo_codigo = codigo_atual + 1;

22 update controle_id set id_atual = :proximo_codigo

23 where (tabela = :tabela);

24 end

25 suspend;

26 end

Agora vamos analisar nossa SP, linha a linha.

Linha 1 – Criamos a SP com o nome Novo_Codigo, bastante sugestivo -:) para a finalidade da mesma;

Linha 2 – Definimos o parâmetro de entrada com seu respectivo tipo, que deverá ser informado para sua execução;

Linha 3 – Returns( ) – define que os valores ali contidos serão retornados pela SP;

Linha 4 – A variável com o seu respectivo tipo, que será o nosso valor de retorno;

Linha 6 – Declaração de uma variável com seu respectivo tipo que será utilizada no processamento da SP;

Linhas 7 e 26 – Begin/End (bastante conhecidos nosso -:) - um bloco que limita uma seqüência de comandos e instruções) - define o inicio e fim de nossa SP;

Linhas 8 e 12 – Comentários;

Linhas 9 a 11 – Fazemos uso de um select para recuperarmos da tabela que será passada por parâmetro para SP o valor do campo id_atual da tabela controle_id e inserimos o valor retornado na variável codigo_atual;

Linhas 13 a 24 – Verificamos se o valor retornado é nulo e caso verdadeiro atribuímos a nossa variável de retorno (proximo_codigo) o valor 1 e inserimos um novo registro na tabela Controle_Id senão atribuímos a nossa variável de retorno (proximo_codigo) o valor do código_atual + 1 e atualizamos o registro da tabela Controle_Id;

Linha 25 – Instrução SUSPEND, suspenderá a execução da procedure e retornará o valor de saída.

Bem amigos, neste artigo tivemos uma breve introdução a este extraordinário recurso que o Firebird nos disponibiliza as Stored Procedures, porém ainda temos muito, mais muito mesmo o que explorar. Num próximo artigo demonstrarei um pouco mais do que podemos fazer utilizando SP, onde iremos usar um loop para podermos resgatar n-registros, tratar valores enfim... usar um pouco mais do poder das SPs.

Referências:

  1. Cantu, Carlos Henrique, Firebird Essencial, Rio de Janeiro, Ed. Ciência Moderna, 2005, 308p.
  2. Cantu, Carlos Henrique, Firebird 2.0 – O Banco de Dados do Novo Milênio, Ed. Ciência Moderna, 2006, 304p.
1 - Os tipos dessas variáveis podem ser qualquer tipo nativo suportado pelo Firebird, exceto array e blob.