palestrante: jair conde (11)9937 -6962,...

36
Jair Conde (11)9937-6962 [email protected] Pág.: 1 / 36 7/10/2007 Palestras ministradas na 5ª JOTECINFO, UNIP campus: Tatuapé em 04/10/2007 às 09:00 horas e às 20:00 horas. Palestrante: Jair Conde (11)9937-6962, [email protected] Programando com Delphi em Multicamadas com Alta Produtividade e Simplicidade Apostila com o passo a passo de como fazer um programa Delphi em Multicamadas com extrema facilidade e simplicidade. Acompanha este Material: Todos os FONTES dos programas. VÍDEO AULA completa. Vamos ao que interessa: mão na massa, melhor ainda no micro. Estaremos desenvolvendo um programa com Delphi 7 (win32) em multicamadas (nTier). Este sistema se dividirá em 3 partes: Banco de Dados (SGDB) Servidor de Aplicação Aplicação Cliente (usuários) . BANCO DE DADOS: Como Servidor de Banco de Dados SQL, estarei utilizando o Firebird 1.5, que é Free e Open Source. Para Baixar: visite o site: http://www.firebirdsql.org/index.php?op=files&id=engine_154 , utilizaremos a versão: Firebird-1.5.4.4910-0-Win32.exe , seu tamanho para download é de apenas 3mb. O Firebird já está na sua versão 2.0.3 atualmente. Porém por questões de compatibilidade de drivers no Delphi, estaremos utilizando a versão Firebird 1.5.4, que hoje é a mais estável. Para Administrar o Banco de Dados, usarei o IBExpert Personal Edition versão free que é fácil de usar e muito poderoso. Para baixa-lo vá ao seguinte endereço: Fontes do Programa, Baixar em: http://www.galmetal.com.br/conde/setup_personal.exe

Upload: ngotram

Post on 13-Nov-2018

229 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 1 / 36 7/10/2007

Palestras ministradas na 5ª JOTECINFO, UNIP campus: Tatuapé em 04/10/2007 às 09:00 horas e às 20:00 horas. Palestrante: Jair Conde (11)9937-6962, [email protected]

Programando com Delphi em Multicamadas com Alta Produtividade e Simplicidade

Apostila com o passo a passo de como fazer um programa Delphi em Multicamadas com extrema facilidade e simplicidade.

Acompanha este Material: Todos os FONTES dos programas. VÍDEO AULA completa.

Vamos ao que interessa: mão na massa, melhor ainda no micro.

Estaremos desenvolvendo um programa com Delphi 7 (win32) em

multicamadas (nTier).

Este sistema se dividirá em 3 partes: Banco de Dados (SGDB) Servidor de Aplicação Aplicação Cliente (usuários).

BANCO DE DADOS:

Como Servidor de Banco de Dados SQL, estarei utilizando o Firebird 1.5, que é Free e Open Source. Para Baixar: visite o site:

http://www.firebirdsql.org/index.php?op=files&id=engine_154, utilizaremos a versão: Firebird-1.5.4.4910-0-Win32.exe, seu tamanho para download é de apenas 3mb.

O Firebird já está na sua versão 2.0.3 atualmente. Porém por questões de compatibilidade de drivers no Delphi, estaremos utilizando a versão Firebird 1.5.4, que hoje é a mais estável.

Para Administrar o Banco de Dados, usarei o IBExpert Personal Edition versão free que é fácil de usar e muito poderoso. Para baixa-lo vá ao seguinte endereço:

Fontes do Programa, Baixar em: http://www.galmetal.com.br/conde/setup_personal.exe

Page 2: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 2 / 36 7/10/2007

OBS: Todos os programas relacionados, são free, disponibilizei um download para o acompanhamento desta apostila, pois sabemos como é Internet. Coloco o link aqui pra vocês e passados alguns dias; Estes links não existem mais e coisas do tipo, então segue os meus links abaixo: Firebird: http://www.galmetal.com.br/conde/Firebird-1.5.4.4910-0-Win32.exe IBExpert: http://www.galmetal.com.br/conde/setup_personal.exe Fontes: http://www.galmetal.com.br/conde/Fontes_ProjectUNIP_NTier.zip Vídeo Aula: em construção BANCO DE DADOS, Instalando. Instalando o Firebird 1.5.4

Firebird-1.5.4.4910-0-Win32.exe (duplo clique para executar), aparece a seguinte tela: Basta clicar em OK Após clicar em OK, Aparece a tela de boas Vindas do Firebird Clique em Seguinte A tela a seguir é o contrato de licença de uso do Firebird Clique em Aceito E depois em Seguinte

Page 3: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 3 / 36 7/10/2007

Tela do guia de instalação do Firebird Clique em Seguinte Local de instalação do Firebird (pasta / diretório), deixe o padrão e clique em Seguinte

Seleção / Opção de Instalação. Como estamos instalando o Servidor, deixa como está: instalação completa do Servidor. Clique em Seguinte Nome da Pasta no Iniciar Programas do Windows, deixa como está. Clique em Seguinte

Page 4: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 4 / 36 7/10/2007

Aqui temos as opções finais, antes da instalação do servidor Firebird Se a sua tela estiver diferente, pois estou mostrando o padrão, marque como aparece aqui. Clique em Seguinte

Pronto para Instalar o Firebird ?

Agora vamos finalizar nossa instalação Clique em Instalar

Neste ponto, o Firebird já está Instalado e Rodando. Clique em Seguinte Ufahhhhh Terminamos Clique em Concluir Acabou!

Page 5: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 5 / 36 7/10/2007

IBEXPERT PERSONAL EDITION, Instalando setup_personal.exe (duplo clique para executar), aparece a seguinte

tela: Tela de apresentação do IBExpert Clique em Next Tela de Seleção de Ferramentas, selecione apenas o IBExpert. Importante: Todas as Ferramentas estão marcadas por padrão. Desmarque, deixe apenas o IBExpert Clique em Next Tela de licença do IBExpert, Clique eu aceito (I Accept) e depois clique em Next Local de instalação do IBExpert (pasta / diretório), deixe o padrão clique em Next

Page 6: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 6 / 36 7/10/2007

Pronto para Instalar o IBExpert ? Agora vamos finalizar nossa instalação Clique em Install

Neste ponto, o IBExpert já está Instalado. Clique em Finish Pronto, está instalado.

Acabamos de concluir a Instalação do Banco de Dados Firebird e da Ferramenta de Administração de Banco de Dados IBExpert.

A seguir iremos criar uma Base de Dados, e nela, uma Tabela para que

possamos usar no nosso Exemplo Ok!

Page 7: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 7 / 36 7/10/2007

CRIANDO A BASE DE DADOS NO FIREBIRD Para saber se o Firebird está rodando, dê uma olhadinha no Painel de Controle do Windows em “Firebird 1.5 Server Manager”. Se você quiser parar e ou derrubar o Servidor, basta clicar em STOP. Uma vez derrubado o Servidor, para levanta-lo novamente, basta clicar em START. Então vamos começar: CRIANDO AS PASTAS NO WINDOWS PARA ARMAZENAR O EXEMPLO.

Vamos Criar a estrutura de Pastas pra começar, minha sugestão é na Pasta Raiz “C:” vou criar a pasta UNIP e dentro dela 3 sub-pastas, são elas: Dados, Server e Client. A estrutura ficará assim:

Aconselho seguir esta mesma estrutura de pastas, pois daqui para frente estaremos sempre fazendo referências a cada uma delas. E se você resolveu usar outra estrutura, fique atento. Pra que complicar se da pra simplificar? IBEXPERT: Criando a nossa 1ª Base de Dados no Ibexpert. Para carregar o Ibexpert dê um duplo clique no seu ícone no desktop do windows ou em “Iniciar”, “Programas” , e depois em “HK-Software”. Com o Ibexpert carregado, vamos Criar a nossa Base de Dados: Clique em: Database e depois em Create Database:

Page 8: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 8 / 36 7/10/2007

A seguir será apresentada a tela mostrada abaixo. Em Server, vamos deixar como Remote, em Server name: LOCALHOST e em Protocol: TCP/IP, em Database vamos colocar o endereço da pasta onde ficará armazenado nosso Banco de Dados, lembra-se que criamos estas pastas, “C:\UNIP\Dados\BancoDados.fdb”, sendo que “BancoDados.fdb” será o nome do Banco de Dados ok. Em Client Library File, deixe como já vem preenchido ou digite: “C:\Arquivos de programas\Firebird\Firebird_1_5\bin\fbclient.dll” Username: SYSDBA Password: masterkey Page Size: 8192 Charset: WIN1252 SQL Dialect: 3 Em Register Database After Creating, deixando marcado, ele irá fazer o registro da Base de Dados pra nós; Então marque esta opção.

Pronto, basta clicar em OK que o nosso Banco de Dados será criado. Registrando a Base de Dados que acabamos de Criar. Se a opção “Register Database After Creating” estava marcada será apresentada a tela a seguir. Caso contrário, basta clicar em “Database” e depois em “Register Database”.

Em Server Version escolha: Firebird 1.5, em Database Alias vamos colocar UNIP. O Restante vem preenchido e manteremos como está.

Page 9: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 9 / 36 7/10/2007

Uma vez criado e registrado o nosso Banco de Dados, vamos agora criar a nossa tabela, que terá o nome de: CLIENTE, com os seguintes campos: ID_CLIENTE FLOAT NOT NULL, RAZAOSOCIAL VARCHAR (70) NOT NULL, TELEFONE VARCHAR (20), EMAIL VARCHAR (70) OBS: Porque o campo ID_CLIENTE é do tipo Float e não INTEGER? A resposta é simples: porque além de Float comportar uma numeração maior, todo e qualquer SGBD, por exemplo: Oracle, SQL Server, MySql, DB2, Postgree e etc.. com certeza possuem este tipo de campo. Vamos criar a nossa Tabela então. Em Database Explorer você está vendo a Base de Dados UNIP. Basta dar um duplo clique para abrir: Veja na tela abaixo, toda a estrutura montada na Base de Dados UNIP, que ainda não tem nenhuma tabela. Agora vamos criar a nossa tabela “CLIENTE”, Para facilitar, clique com o botão direito do mouse em cima de Tables, que aparecerá um menu de opções. Escolha a opção: New Table, a seguinte tela será apresentada.

Page 10: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 10 / 36 7/10/2007

Preencha a sua tela exatamente como esta, lembra-se dos campos...

ID_CLIENTE FLOAT NOT NULL, RAZAOSOCIAL VARCHAR (70) NOT NULL, TELEFONE VARCHAR (20), EMAIL VARCHAR (70)

Nome da Tabela Veja que a Chave Primária “Primary Key” é o campo “ID_CLIENTE”, e não se esqueça de marcar os campos que não podem ficar em branco ou seja sem preenchimento “Not Null”. (para cria a Primary Key “PK”, duplo clique onde a seta aponta. Estando tudo preenchido como mostrado na tela acima clique em “Compile ” para que a Tabela seja gerada. A Seguir clique em Commit para gravar. Veja que ele mostra os comandos SQL que serão executados para a criação da tabela CLIENTE. Veja a tela a seguir Para incluir clientes, basta clicar em Data e pronto, você já esta em modo de edição dos registros / campos. Finalizamos a primeira parte.

Page 11: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 11 / 36 7/10/2007

CRIANDO O SERVIDOR DE APLICAÇÃO

A partir de agora estaremos programando no Delphi. Eu estou utilizando a versão 7 do Delphi Enterprise, pois a versão Professional não tem os componentes DataSnap que estaremos utilizando. Vale a pena salientar que este exemplo funciona em todas as versões do Delphi até a 2007 que é a atua l até este momento.

Estou partindo do princípio que você tem conhecimentos básicos de

programação no Delphi. Abra o Delphi e inicie uma nova aplicação (File, New, Application). No Formulário que aparece (F12 mostra Form) , deixe-o o mais parecido com este:

Caption do Formulário

Neste Form utilizei os Seguintes componentes TLabel: Caption: Servidor de Aplicação – UNIP, name: lblCabecalho TLabel: Caption:nº de Conexões, name: lblConexao1 TLabel: Caption:000, name: lblConexao2 TLabel: Caption:Data, name: lblData1 TLabel: Caption:Data, name: lblData2 TLabel: Caption:Hora, name: lblHora1 TLabel: Caption:Hora, name: lblHora2 TBitBtn: Caption:Derrubar Servidor, name: btnDerrubar

TLabel está na paleta: Standard TBitBtn está na paleta: Additional Renomeie o Formulário para: frmPrincipal Salve tudo (Save All) em c:\UNIP\Server Salve a Unit1 como: Principal. Salve o Projeto (Project1) salve como: UNIP_Server

Page 12: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 12 / 36 7/10/2007

SQLConnection Agora com o frmPrincipal na Tela, vamos colocar nele o componente SQLConnection da paleta dbExpress: Na sua Propriedade Name, mude para: SQLConn, também mude a sua Priedade LoginPrompt para False, assim ele não solicita a senha para se conectar, uma vez que já a preenchemos, lembra-se: masterkey. Dê um duplo clique no SQLConn que ele abrirá a tela mostrada a seguir:

Clique no sinal de mais ( + ) que aparecerá uma pequena tela. Em Driver Name, escolha Interbase e em Connection Name digite: UNIP

Sua tela ficará assim Agora onde vê Database, digite:

localhost:c:\UNIP\Dados\BancoDados.fdb, que é o endereço do nosso banco de dados, lembra-se? Todo o restante já está configurado corretamente. Para testar a conexão, clique em Test Connection e veja se está conectando.

Page 13: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 13 / 36 7/10/2007

Criando o Remote Data Module “RDM” Agora vamos criar o nosso Remote Data Module “RDM”, clique em File, New, Other, e na paleta Multitier selecione “Remote Data Module”, veja a tela a seguir: Em seguida será exibida outra tela, onde informaremos o nome do RDM. CoClass Name: DM Instancing: Multiple Instance Threading Model: Single

Clique em OK para prosseguir, que o nosso RDM será criado com o nome de DM, veja a tela a seguir Agora vamos salvar nosso RDM

clique em File, Save, e dê o seguinte nome para ele: DataMod. (Importante: não se esqueça de salva-lo em C:\UNIP\Server) Acessando a Tabela de CLIENTE do Banco de Dados Para acessarmos a tabela Cliente do Banco de Dados, clique na paleta dbExpress do Delphi e selecione o componente: SQLDataSet,

Agora basta clicar dentro do RDM e pronto Importante: Clique em File e depois em Use Unit... ou (Alt+F11), faremos isso para que o RDM possa enxergar o frmPrincipal, pois é nele que colocamos o componente SQLConnection. Sendo este componente o responsável pela conexão com a Base de Dados. Escolha Principal quando for apresentada a tela e clique em OK.

Page 14: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 14 / 36 7/10/2007

Agora vamos acertar as propriedades do SQLDataSet, Clique no SQLDataSet e depois em Object Inspector, deixe deste jeito:

select ID_CLIENTE, RAZAOSOCIAL, TELEFONE, EMAIL from CLIENTE Clique na seta apontada para baixo que aparecerá e escolha: frmPrincipal.SQLConn. Para testar se realmente está fazendo a conexão, basta mudar a propriedade Active para True, se aceitar é porque está conectando.

Agora só falta colocar o DataSetProvider da paleta DataAcess, Em seguida vamos acertar a suas propriedades, em DataSet Escolhe: sqlCliente (é o nosso SQLDataSet) e em Name digite: dspCliente, veja como ficou o DataSetProvider. Pronto, terminamos de configurar o nosso Servidor de Aplicação; Salve tudo e Rode (F9) o Servidor de Aplicação. Importante: Antes de Salvar tudo, verifique se o SQLCliente está com a propriedade Active com False e propriedade Connected do SQLConn no frmPrinicipal está com False. Toda conexão no Servidor de Aplicação deve estar sempre fechada, pois ele fará as conexões por demanda do Client. Então vamos lá, uma vez verificado que está tudo desconectado (False), Salve tudo de novo e rode o programa (F9) ou clique em “Run” e depois em “Run”

novamente. Ou neste ícone: . Nosso Servidor de Aplicação está pronto e registrado no Windows. Alias registrar o servidor é tão simples que você nem se deu conta. Basta executá-lo e pronto. Já está registrado. Isso mesmo: Rodou, registrou. Esse registro se faz necessário, pois a seguir estaremos construindo a nossa aplicação Client que precisará achar o Servidor de Aplicação. O Servidor de Aplicação está pronto, mas bem rudimentar, pois ainda não estamos tratando nada nele. Deixaremos isso mais para frente ok.

Page 15: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 15 / 36 7/10/2007

BSS - BORLAND SOCKET SERVER

Acabamos de construir a nossa aplicação servidora; Então antes de começarmos a construção da aplicação Client, vamos falar um pouco do BSS.

O BSS (Borland Socket Server) como o próprio nome diz, é um

Socket, ele se encarrega de fazer a comunicação entre a aplicação Server e Client, faz o mesmo papel do IIS (Internet Information Server) do Windows, com algumas vantagens expetaculares, cito algumas:

Consome pouca memória em execução menos de 5 mb de ram, é pequeno de tamanho, apenas 663kb, vem com fonte, pois é feito no Delphi. Roda como aplicação ou Serviço. Fácil de monitorar e derrubar usuários conectados.

Resumindo, basta dar um duplo clique nele e pronto já está rodando. Não bastasse tudo isso, é quase zero para configurar, se você quiser

mudar a porta padrão: 211 é só digitar a porta desejada e pronto. Vantagens e mais vantagens.

Nome do executável do BSS é “scktsrvr.exe” Onde encontrar o BSS?

Como acabei de mencionar, ele é um programa feito em Delphi e vem com o Fonte.

Por padrão está localizado dentro do diretório de Instalação Delphi, na subpasta ..\\Source\Vcl.

Seu caminho completo no Windows em Português Brasil é: C:\Arquivos

de programas\Borland\Delphi7\Source\Vcl Executando o BSS

1) Executando o BSS como Aplicação Basta apenas executar o BSS “scktsvr.exe” (duplo clique) que ele já

está rodando.

Vamos colocar a porta de comunicação que estou utilizando neste exemplo: 3060.

Para isso dê um duplo clique no seu ícone que está localizado na Barra de Tarefas do Windows ao lado do Relógio

Page 16: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 16 / 36 7/10/2007

Feito isso a tela do BSS é aberta

A Agora vamos colocar a Porta que estamos utilizando neste exemplo. Em Listen on Port digite: 3060 e pronto.

2) Executando o BSS como Serviço do Windows É muito Simples, basta digitar: scktsrvr.exe -install Isso mesmo, pronto seu BSS já esta sendo executado como um serviço do Windows. Desinstalando o BSS como Serviço do Windows, digite: scktsrvr.exe -uninstall e pronto.

Page 17: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 17 / 36 7/10/2007

Monitorando os usuários conectados ao Servidor de Aplicação Abra o BSS (duplo clique) que está sendo executado na Barra de Tarefas do Windows ao lado do Relógio: Clique na paleta Users Neste local, você pode visualizar todos os usuários conectados ao Servidor de Aplicação, o endereço de IP, data e horas que se conectou. Você também pode derrubar qualquer usuário conectado, selecione o usuário, clique em Connections e depois em Disconnect

Tudo o que você precisa saber sobre o BSS (Borland Socket Server) já foi mostrado aqui. O BSS é extremamente simples e roda no Windows 9x, ME, NT, Pro, XP e Vista. Mas como serviço não roda em algumas versões do Windows. Vamos a construção da nossa aplicação Client.

Page 18: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 18 / 36 7/10/2007

CRIANDO A PLICAÇÃO CLIENTE Abra o Delphi e inicie uma nova aplicação (File, New, Application).

Com a tela acima sendo mostrada pressione a tecla de função (F12) ou clique em View e depois em Toggle Form/Unit, isso fará com que você veja a Unit mostrada na tela acima e ou veja o Form mostrado abaixo

Renomeando. Clique no Form e na sua propriedade Caption digite: Client - UNIP e na propriedade Name digite frmPrincipal.

Page 19: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 19 / 36 7/10/2007

Importante: Salve tudo na pasta C:\UNIP\Client Salvando Tudo na Pasta Client. Clique no menu do Delphi em File, Save All, salve a Unit1 com o seguinte nome: Principal, e quando pedir para salvar o projeto que aparece com o seguinte nome: Project1 salve-o com o seguinte nome: Client_Unit. Criando o Data Module do Client Clique no menu em: File , New, e escolha o Opção: Data Module. Veja na tela a seguir

Nesta tela está sendo mostrado o Data Module “DM” que acabamos de criar. Vamos na propriedade Name e digite: DM.

Salve com o seguinte nome: DataMod. Não se esqueça de salvar em C:\UNIP\Client. Importante: Após ter salvado tudo, teremos que acertar como será carregado o nosso aplicativo Client. O primeiro formulário a ser carregado tem que ser o DataMod “DM”, mas por padrão o Delphi carregará em primeiro lugar o frmPrincipal. Então vamos mudar isso. Clique em Project e depois em Options ou (Shift+Ctrl+F11)

Page 20: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 20 / 36 7/10/2007

Feito isso aparecera a seguinte tela Clique em “DM” e o arraste pra cima, entes de “frmPrincipal”. Deixe assim

Page 21: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 21 / 36 7/10/2007

Colocando os Componentes no Data Module “DM”. Na paleta DataSnap, clique em Socket Connection e depois dentro do Data Module “DM”, pronto já colocamos o componente que será o responsável pela conexão entre o Servidor de Aplicação e o Cliente. Agora vamos configurar as suas propriedades.

Clique no componente SocketConnection1 e no Object Inspector, mude a sua propriedade Name para: SocketConn, Host para 127.0.0.1 ou localhost (ambos são a mesma coisa) Port digite: 3060 Clique em ServerName e escolha o servidor: UNIP_Server.DM. Lembra-se quando eu pedi para não mudar os nomes de arquivos e ou pastas, está ai um dos grandes motivos para tal. Se você seguiu a risca não terá problemas.

Verificando se o Cliente está se conectando ao Servidor.

Veja na tela anterior a propriedade Connectec, basta colocar como

True. Se a conexão obteve êxito, com certeza o servidor foi carregado e está sendo mostrado na sua tela neste momento.

Isso mesmo, basta chamar uma conexão que o Servidor de Aplicação abre, e Fechar a conexão para que o Servidor de Aplicação se Feche também.

Quer ter a certeza do que estou falando, é simples, na propriedade Connected do SocketConn, deixe-a como False que o Servidor de Aplicação será fechado.

Page 22: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 22 / 36 7/10/2007

Colocando os componentes de para acessar a Tabela Cliente. Clique na paleta Data Access. Depois em ClientDataSet. Em seguida clique dentro do Data Module “DM”

Aproveitando que já estamos na paleta Data Access, clique agora no

componente DataSource e depois no Data Module “DM”. Pronto, já estamos com todos os componentes necessários para fazer

acesso a tabela Cliente. Vamos configurar então nossos componentes começando pelo

ClientDataSet.

Page 23: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 23 / 36 7/10/2007

Vamos configurar as propriedades do ClientDataSet. Clique no ClientDataSet e depois vá no Ojbect Inspector Na propriedade Name, digite: cdsCliente Na propriedade RemoteServer, clique, vai mostrar o Socket Connection que está no frmPrincipal com o nome “SocketConn”. Na propriedade ProviderName, escolha: dspCliente. Neste momento o Servidor de Aplicação começa a rodar, pois o dspCliente que é o DataSetProvider, está lá do outro lado, no Servidor de Aplicação. Vamos testar para ver se está fazendo a conexão, mudando a propriedade Active para True. Bem agora nos resta puxar os Fields “campos” do cdsCliente “ClientDataSet” Dê um duplo clique no cdsCliente ou em cima dele clique com o botão direito do mouse e escolha a opção “Fields Editor”. Com o Fields Editor aberto, clique como o botão direito do mouse e escolha Add all fields,

A

após clicar em Add all fields, todos os Fields “campos” do cdsCliente são incluídos.

A

A Pronto mais uma etapa concluída, agora falta pouco.

Page 24: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 24 / 36 7/10/2007

Configurando o Data Source. Clique em DataSource1, e vá ao Object Inspector, configure a sua propriedade Name para: dsCliente, e a propriedade DataSet escolha cdsCliente.

Toda a parte de configuração dos componentes de acesso está

concluida, agora vamos construir do usuário para, Consultar, Incluir, Alterar e Excluir Cliente.

Construindo a tela de dados / manutenção do cadastro de Clientes. Clique na paleta Principal do projeto Pressione (F12) ou clique em Toggle Form/Unit, isso fará com que você veja a Unit e ou Form. Queremos ver o Form nesse Momento. O frmPrincipal precisa fazer referência / chamar o DM “Data Module”. Clique em File , Use Unit... ou ALT+11, e adicione o DataMod.

Deixe a sua tela do frmPrincipal o mais parecido possível com essa aqui Montei esta tela abrindo o Fields Editor do cdsCliente, marcando todos os campos e arrastando para o Form do frmPrincipal e pronto. Compontes utilizados: 4 Label e 4 DBEdit, estando todos os DBEdit’s com a propriedade DataSource: DM.dsCliente, e a propriedade DataField ligada ao respectivo campo da Tabela do Cliente.

Page 25: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 25 / 36 7/10/2007

Acertando as propriedades das Label’s Label1, name: lblID, Caption: ID Label2, name: lblRazao, Caption: Razão Social Label3, name: lblFone, Caption: Telefone Label4, name: lblEmail, Caption: eMail Acertando as propriedades dos DBEdit’s DBEdit1, name: dbeID, DataSource: DM.dsCliente, DataField: ID_CLIENTE DBEdit2, name: dbeRazao, DataSource: DM.dsCliente, DataField: RAZAOSOCIAL DBEdit3, name: dbeFone, DataSource: DM.dsCliente, DataField: TELEFONE DBEdit4, name: dbeEmail, DataSource: DM.dsCliente, DataField: EMAIL. Agora vamos adicionar um novo componente: DBNavigator da paleta Data Controls do Delphi. Como ele na tela vamos configurar as suas propriedades, em DataSource coloque: DM.dsCliente e em Name digite: dbnCliente. A seguir clique em VisibleButtons e deixe como mostrado Somente os 4 primeiros com True, todo o restante com False. Sua tela deverá estar parecida com essa nesse momento

DBNavigator depois de configurado. Pode rodar que o seu Client já está funcionando 100%. Importante: Sempre deixe o SocketConn com a propriedade Connected em False.

Page 26: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 26 / 36 7/10/2007

Vamos agora inserir alguns Botões no nosso Formulário “frmPrincipal”, serão 6 no total. Button1, name: btnIncluir, Caption: Incluir Button2, name: btnAlterar, Caption: Alterar Button3, name: btnExcluir, Caption: Excluir Button4, name: btnAtualizar, Caption: Atualizar. Button5, name: btnSalvar, Caption: Salvar. Button6, name: btnCancelar, Caption: Cancelar. Sua tela deverá estar parecida com essa

Os 6 botões incluídos no Form. Em File, Use Unit, acrescente o “DataMod” ao frmPrincipal se ainda não o fez. No Evento OnCreate do Formulário, dê um duplo clique nele e acrescente as duas linhas de código abaixo

Page 27: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 27 / 36 7/10/2007

1ª Parte) Programando os botões do frmPrincipal Vá para a DataMod, e carregue o Form (F12), clique no dsCliente, em Object Inspector, clique na paleta Events, e no evento OnStateChange, dê um duplo clique para gerar o método e digitarmos as seguintes linhas de código:

O que fizemos aqui? A explicação é deveras simples meu caro (risos).

Estamos no Evento que verifica a mudança de Estado do Data Source do Cliente. Então criei uma variável “lFlag”que apanha seu estado.

Se está Incluindo ou Editando um cliente seu estado é False, caso contrário é True.

Se o usuário estiver Incluindo ou Editando um determinado cliente, não posso deixar que ele clique nos Botões: Incluir, Alterar, Excluir ou nos Botões do DBNavigator “dbnCliente”, deixando ativo apenas os Botões: Salvar e Cancelar.

Caso o usuário só esteja consultando o(s) cliente(s), não posso deixá-lo clicar nos Botões: Salvar ou Cancelar.

É tudo isso que a rotina (método ou procedimento) listada acima faz.

2ª Parte) Programando os botões do frmPrincipal

Vá para o frmPrincipal, e carregue o Form (F12), dê um clique no Botão Incluir, e no seu Evento OnClick digite a única linha de código:

Page 28: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 28 / 36 7/10/2007

No Botão Alterar, faça a mesma coisa, clique nele e no seu evento OnClick dê um duplo clique e digite o código:

Botão Excluir, Evento OnClick, digite:

Botão Atualizar, Evento OnClick, digite:

Botão Salvar, Evento OnClick, digite:

Botão Cancelar, Evento OnClick, digite:

Page 29: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 29 / 36 7/10/2007

INCREMENTANDO ALGUMAS FUNÇÕES NO SERVIDOR DE APLICAÇÃO Lembra-se das Label’s do Servidor que deixamos lá sem nenhuma função. Vamos criar os métodos para cada uma delas agora começando pela Label: lblConexao2. Que está com o valor ou Caption igual 000.

Este será o método mais complexo, o restante será simples.

Mas não se assustem, não

há muito segredo.

Aqui faremos com que esta Label assuma o número / quantidade de usuários conectados ao servidor OnLine. Implementando o Método da lblConexao2. Antes de qua lquer coisa, coloque no frmPrincipal o componente Timer da paleta System..

Page 30: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 30 / 36 7/10/2007

Implementando e Criando o Evento OnTimer Vamos implementar o Evento / método OnTimer do componente Timer que acabamos de colocar no frmPrincipal. Para isto basta dar um duplo clique nele e pronto, pois este é o seu único Evento. Digite apenas essa linha de código.

Não se preocupe quando o Delphi informar que não existe a variável PConn, pois a criaremos a seguir. Criando a Variável Privada (Private) PConn. Vá à seção Private da Unit frmPrincipal e digite a seguinte linha de código.

Criando os Métodos que Incrementam e Decrementam Usuários OnLine. Vá à seção Public da Unit frmPrincipal e digite estas 2 linhas de código.

Acabamos de criar 2 Métodos, o método CriaConexao para incrementar o Nº de usuários e o método FechaConexao para decrementar. Agora vamos implementá-los, para isso basta que você esteja com o cursor do mouse em cima de qualquer um dos 2 métodos e presione (Ctrl+C). E aqui estão os métodos. Para o Método CriaConexao, digite essa linha de código Para o Método FechaConexao, digite essa linha de código Está quase acabando, só falta agora inicializar a Variável PConn.

Page 31: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 31 / 36 7/10/2007

Inicializando a Variável PConn

A Variável privada PConn, é do tipo Integer (nº Inteiro), e será encarregada de contar a quantidade de usuários Online, ou seja conectados ao Servidor de Aplicação certo.

Até aqui tudo bem, pois já a criamos, declaramos os métodos para incrementá-la e decrementá-la. Mas ainda falta alguma coisa...

Falta Inicializá-la, isso mesmo, ela tem que começar com algum valor. Vamos lá então.

Implementando e Criando o evento OnCreate do frmPrincipal. Vá ao evento / método OnCreate do frmPrincipal, dê um duplo clique e acrescente a seguinte linha:

Agora só resta fazermos uso dos métodos CriaConexao e

FechaConexao, pois estão criados, mas não são chamados por nenhuma rotina.

Page 32: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 32 / 36 7/10/2007

Criando os métodos que farão uso do CriaConexao e FechaConexão.

Para a criação dos métodos que farão uso das rotinas (procedures) que criam e fecham as conexões, vá para a Unit DataMod “DM”, carregue o seu formulário do (F12),

Uma vez que você clicou no formulário do DataMod, dê um duplo clique no Evento OnCreate e duplo clique no Evento OnDestroy. Pronto já criamos e implementamos os 2 eventos. Agora vamos digitar as linhas de código dos mesmos, veja a seguir: Linha de código do evento OnCreate.

Linha de código do evento OnDestroy. O que fizemos aqui foi: Quando o nosso Remote Data Module é criado, chamamos o Método CriaConexao via RemoteDataModuleCreate, e olhando a implementação do CriaConexao no frmPrincipal, vemos que ele apenas incrementa em mais um (+ 1) a quantidade de usuários conectados ao servidor. Já o método RemoteDataModuleDestroy, chama o método FechaConexao, que faz exatamente ao contrário do anterior, ou seja decrementa (-1).

Page 33: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 33 / 36 7/10/2007

Executando a Aplicação do Cliente “Client_UNIP.exe” Vamos rodar a nossa aplicação Client.

Veja que a função que conta a quantidade de usuários conectados ao servidor já está funcionando.

Faça um teste, carregue várias vezes à aplicação cliente e veja o

contador sendo incrementado. Agora vá fechando as aplicações clientes abertas e veja que a

quantidades de usuários conectados ao servidor vai sendo decrementada.

Veja no exemplo acima. Eu executei 3 vezes a aplicação Client. simulando 3 usuários conectados ao servidor. Vejam que ainda falta colocarmos a Data, a Hora e implementar o método do Botão btnDerrubar “Derrubar Servidor”`.

Page 34: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 34 / 36 7/10/2007

IMPLEMENTANDO OS MÉTODOS DATA e HORA Vá ao evento OnTimer do Timer1, que já implementamos e acrescente estas duas linhas de código IMPLEMENTANDO O MÉTODO “btnDerrubar” DERRUBAR SERVIDOR Clique no btnDerrubar, a seguir dê um duplo clique nele ou vá ao seu evento “OnClick”e digite a seguinte linha.

Com a linha de código acima, estamos informando ao sistema que queremos finalizar a aplicação.

Veja agora o servidor sendo executado com todas as implentações que

acabamos de realizar.

Page 35: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 35 / 36 7/10/2007

CONCLUSÕES FINAIS

Como vocês podem ver, não há grandes segredos em se montar uma aplicação em multicamadas.

Nosso exemplo foi bem simples, prático, rápido e funcional. Só para que se tenha uma idéia do que estou falando, da para desenvolvê-lo por inteiro, passando pela confecção do Banco de Dados, Tabela, Server e Client em menos de 20 minutos de trabalho.

E não estou aqui falando de desenvolvedores muito experientes em programação multicamadas com Delphi. DO QUE NÃO FALEI NESTE EXEMPLO! Muita coisa ficou de fora, por exemplo, não se faz um Select do SQL sem condições tipo “where”, não configuramos as propriedades ProviderFlags do SQLDataSet, que são 4: pfInUpdate, pfInWhere, pfInKey, pfInHidden, Do mesmo modo não tratei da propriedade UpdateMode do DataSetProvider. Reconcile Error do ClientDataSet, também ficou de fora.

Só estes três exemplos citados acima, merecem um tutorial para cada

um deles, pois são peças fundamentais no desenvolvimento em Delphi, e sendo nosso caso multicamadas, merecem ainda mais atenção.

Type Library: isso é muito importante, sem ela não há multicamadas e

ficou de fora.

Também não falei de Tratamento de Exceções, Transações, dentre muitas outras coisas importantes que ficaram de fora.

Essa apostila / tutorial, não tem o intuito de abranger tudo isso. Propus-

me aqui a mostrar o caminho das pedras de um sistema em multicamadas. Mostrando pra vocês que não há nada de tão especial, complexo ou

coisas do gênero. Surgindo necessidade de mais informações, predisponho-me a criar

materiais para tal.

Page 36: Palestrante: Jair Conde (11)9937 -6962, jairconde@gmailnoginfo.com.br/arquivos/Palestra_5a_JOTECINFO_UNIP.pdf · Jair Conde (11)9937-6962 jairconde@gmail.com Pág.: 1 / 36 7/10/2007

Jair Conde (11)9937-6962

[email protected]

Pág.: 36 / 36 7/10/2007

AGRADECIMENTOS Agradeço muito ao Professor Marcelo Nogueira pela oportunidade que me concedeu em palestrar na UNIP, campus Tatuapé. Com quem tenho aprendido muito sobre qualidade de software na CTA, onde ministra aulas, tento vários cursos voltados à área de software. Ao Bruno Lichot, hoje na CodeGear que é o maior evangelista e divulgador dessa maravilhosa ferramenta Delphi e do BSS (Borland Socket Server). Com ele aprendi muito. Ao Laércio Guerço Rodrigues da Digidata do Rio de Janeiro, hoje o mantenedor do site http://www.clubedelphi.com.br. Com quem aprendi muito, devo a ele a minha virada de programador Delphi com Paradox para a multicamadas. Aos meus 5 cachorros, que são os únicos seres vivos que me aturam: Tuka Nervosinha, Vick Safado, Belinha Mascote, Bob Triste e o Billy Chorão, mais conhecido como Bibiquinho. Faltou falar de Cris, minha namorada, coitada dela, pois não é fácil carregar uma cruz que pesa aproximadamente uns 80 kilos, que é o meu peso. THE END

Como vocês podem notar os agradecimentos estão no final quando deveriam estar no começo.

Não há Índice dentre outras coisas de uma boa apostila. Porém creio

que o seu conteúdo é claro, objetivo, direto e didático. Na verdade é um passo a passo, por isso não me preocupei em criar

índice, sem falar do pouco tempo montar este material. Mas prometo revisar e reeditar tudo aqui com mais esmero. Acompanha esta apostila os códigos fonte da aplicação completa, o

banco de dados, além da vídeo que estou fazendo.