Desenvolvimento - Delphi
Sistema de Cadastro de Logradouros em Delphi
Veja nesse artigo um exemplo da criação de um cadastro de logradouros para ser utilizado por aplicativos que cadastram endereços feito em Delphi 7.
por Marcos Brivio da CostaINTRODUÇÃO
Sempre em nossos programas precisamos cadastrar clientes, fornecedores, funcionários dentre outros que possuem um endereço. Muitas vezes temos diversos clientes ou fornecedores que se estabelecem no mesmo logradouro, então a pergunta: tenho que digitar o mesmo endereço toda vez que for cadastrar um "parceiro de negócios" que se estabelecem no mesmo logradouro? Não, claro que não. A solução é criarmos um cadastro de logradouros e apenas chamá-lo toda vez que precisarmos. Podemos chamá-lo pelo nome ou CEP e ainda ficaremos livres de erros de digitação que provocam erros em relatórios, por exemplo:
Rua Dom Pedro I
R. Dom Pedro I
Isso em alguns agrupamentos poderá gerar um relatório não satisfatório, pois se trata do mesmo logradouro, porém digitado de forma diferente.
CRIANDO O BANCO DE DADOS
Com a facilidade de ferramentas gratuitas existentes na atualidade, não é difícil criar e manter um Banco de Dados: o DBDesigner é um excelente programa gratuito para moldar o banco de dados pode ser obtido no site do desenvolvedor http://www.fabforce.net/dbdesigner4/downloads.php e o MySQL que pode ser baixado http://dev.mysql.com/downloads/mysql/5.0.html e tem disponível uma boa documentação no próprio site, sem contar a facilidade de se implementar consultas e manipular dados através de Web Pages com o uso do PHP.
Caso você não tenha interesse em fazer algum trabalho com Web pages poderá baixar o WAMP do site http://www.wampserver.com/download.php ele instala o servidor Apache, o PHP e MySQL e já deixa tudo configurado.
Em ambos casos será necessário instalar também o connector/ODBC 3.51 que poderá ser baixado em http://dev.mysql.com/downloads/connector/odbc/3.51.html.
Embora modelagem de dados seja algo que dê trabalho e parece que sempre tem alguma coisa para melhorar o meu modelo de banco de dados ficou como o da próxima figura.
Após chegarmos a conclusão do nosso modelo de dados o próprio DBDesigner4 gera os scripts de criação do banco de dados.
Podemos criar as tabelas da seguinte forma:
Abra a console do MySQL:
Nota: No WINDOWS não tem diferença entre maiúsculas e minúsculas.
Digite os scripts (criados pelo DBDesigner) abaixo para criar as tabelas
CRIANDO A CONEXÃO COM O BANCO DE DADOS
Após criar as tabelas temos que criar a conexão entre o Delphi e MySQL. Embora já existam conexões diretas, tal como o Zeos, prefiro usar o conector ODBC. Para isso é necessário instalá-lo e depois em painel de controle -> ferramentas de sistemas -> fontes de Dados ODBC. Clique na aba Fonte de Dados de Sistema -> Adicionar e escolha: MySql e Clique em concluir.
Data Source Name: Logradouros
Description: Base para endereços
Server: LocalHost (se o mysql estiver instalado na própria máquina)
User: Root (seu usuário)
Password: *******
Database: Logradouros
CRIAÇÃO DO APLICATIVO
Neste ponto já estão criadas as tabelas e a conexão com o banco de dados. Agora vamos organizar o nosso trabalho; no HD crie uma pasta chamada "logradouros". Ao iniciar o Delphi, é disponibilizado um projeto, salve-o na pasta logradouros com o nome Logradouros e para a unit1 com o nome de UnPrincipal.
Nota: Os procedimentos a seguir foram feitos em DELPHI 7.
TELA PRINCIPAL
Mude as seguintes Propriedades do Form1:
Name: FrmPrincipal
Caption: Logradouros
WindowState: wsMaximized
Coloque um MainMenu no form principal e crie os seguintes menus:
Cadastro
Tabelas Auxiliares (Control + Seta à Direita)
Países
Estados
Municípios
Zonas
Bairros
-
Tipos de Logradouros
Títulos de Nobreza
Preposição
Logradouros
-
Sair
Ajuda
Sobre...
Feche o editor de Menus.
Click no menu sair e digite:
Close;
Temos agora uma tela inicial bem simples, porém completa para o nosso exemplo.
Dica: A cada implementação significativa é aconselhado que se compile o programa para conferir os códigos e acertá-los, caso haja algum erro.
Vamos agora prepara o acesso ao banco de dados criado anteriormente. Para isso colocaremos um DataModule no nosso projeto.
File -> New -> Data Module
No Object Inspector:
Name: Dm
Coloque um componente ADOConnection ( este componente é responsável pela conexão com o banco de dados).
No Object Inspector:
Name: ADOConexaoPrincipal
ConnectionString: ( Clique nas reticências) e na janela que vai abrir clique em Build.
Isso abrirá uma nova janela, click na aba conexão, depois em atualizar, escolha a fonte de dados logradouro, digite o usuário e a senha e click em testar conexão.
Click em Ok e novamente em Ok.voltando ao object Inspector mude as propriedades Connected para true e PromptLogin para False.
Como a tabela logradouros depende de diversas outras tabelas, teremos que primeiro preparar o cadastro para todas as tabelas pensando sempre nas dependências.
CADASTRO DE PAÍSES
Como a tabela país não possui dependências, começaremos por ela. Na Unit Dm (datamodule) colocaremos mais dois componentes:
ADODataSet da paleta ADO com as seguintes prorpiedades:
Connection: ADOConexaoPrinciapal
CommandText: select * from pais
Name: ADODSPais
Active : True
DataSource da Paleta Data Access.
DataSet: ADODSPais
Name: DsPais
Vamos inserir um novo form no projeto:
File -> New -> Form
No Object Inspector:
Name: FrmCadPaises
Caption: Cadastro de Países
No Evento OnActivate do Form digite:
Dm.ADODSPais.Open;
No evento OnClose do Form digite:
Dm.ADODSPais.Close;
Dm.ADODSPais.CommandText:="select * from pais";
Action:=caFree;
Isto faz com que não haja erros quando abrirmos novamente a janela
Salve a unit: UnCadPaises
Coloque três panel no form
No 1º
Align : AlTop
Coloque nele:
BitButton com Caption: Fechar e Name: BtFechar.
Dê dois clicks nele e digite o seguinte código:
Close;
Edit com Name: EditProcurar e Text: (sem Nada) e logo acima deste um Label com o caption: País
DBNavigator com VisibleButtons: [nbFirst,nbPrior,nbNext,nbLast] datasource: Dm.DsPais
No 3º
Align: AlBotton
No 2º
Align: AlCliente
Coloque nele um BDGrid om as seguintes prorpiedades:
DataSource: Dm.DsPais
Options: [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit]
Na janela do data module dê um clique duplo no ADODSPais, isso fará abrir a janela do field editor.
No field Editor clique com o botão Direito do Mouse e selecione add all fields. Selcione o Nome e sigla e arraste-os para o panel3. Responda YES que será adicionado automaticamente a unit dm ao form.
Voltando ao 3º panel Coloque nele:
05 BitButton:
Caption : Novo - Name: BtNovo
Dê dois clicks nele e digite o seguinte código:
Caption : Alterar - Name: BtAlterar
Dê dois clicks nele e digite o seguinte código:
No evento OnKeyUp do EditProcurar digite o seguinte:
Caption : Excluir - Name: BtExcluir
Dê dois clicks nele e digite o seguinte código:
Caption : Salvar - Name: BtSalvar - Enabled: False
Dê dois clicks nele e digite o seguinte código:
Caption : Cancelar - Name: BtCancelar - Enabled: False
Dê dois clicks nele e digite o seguinte código:
A janela cadastro de Países fica mais ou menos assim:
Na janela principal no menu cadastro -> tabelas Auxiliares -> Países e digite o seguinte código:
A diferença para as próximas tabelas são as dependências que devem ser tratadas com mais atenção. CADASTRO DE ESTADOS
Diferente da tabela Pais, a Tabela estados possui dependência (um estado pertence a um Pais).
Voltando a Unit Dm (datamodule) colocaremos mais um componente:
ADODataSet da paleta ADO
Connection: ADOConexaoPrinciapal
CommandText: select * from Estados
Name: ADODSEstados
Active : True
DataSource da Paleta Data Access.
DataSet: ADODSEstados
Name: DsEstados
Vamos inserir um novo form no projeto:
File -> New -> Form
No Object Inspector:
Name: FrmCadEstados
Caption: Cadastro de Estados
No Evento On Activate do Form digite:
Dm.ADODSPais.Open;
Dm.ADODSEstados.Open;
No evento OnClose do Form digite:
Dm.ADODSPais.Close;
Dm.ADODSEstados.Close;
Dm.ADODSEstados.CommandText:="select * from Estados";
Action:=caFree;
Isto faz com que não haja erros quando abrirmos novamente a janela
Salve a unit: UnCadEstados
Para economizar bastante trabalho selecione, na janela Cadastro de Paises, os três panels, copie e depois cole no Form Cadastro de Estados.
Nota: Quando copiamos os componentes de um form para o outro, levamos junto as propriedades dos mesmos, porém os códigos não serão colados juntos com os componentes.
No panel1 no Botão Fechar.
Dê dois clicks nele e digite o seguinte código:
Close;
Mude o caption do Label1: Estados
Aperte as Teclas Alt+F11 na janela Uses Unit selecione a UnDm.
DBNavigator com VisibleButtons: [nbFirst,nbPrior,nbNext,nbLast] datasource: Dm.DsEstados
No 2º
DBGrid
DataSource: Dm.DsEstados
No data module dê um clique duplo no ADODSEstados, isso fará abrir a janela do field editor.
No field Editor clique com o botão Direito do Mouse e selecione add all fields. Aqui existe um detalhe: quando visualizamos no DBGrid não veremos o nome do país e sim o idpais e isso pode ser incomodo para quem não sabe que 2 é o Brasil. Para acabar com isso acrescentaremos um novo field.
No field Editor clique com o botão direito, no popmenu -> New Field:
Name: NomePais
Type: String
Size: 30
Field Type: Lookup
Key Fields: IdPais
DataSet: ADODSPais
Lookup Keys: idpais
Result Field: nome
Agora selcione o Nome, sigla e nomepais e arraste-os para o panel3. Responda YES que será adicionado automaticamente a unit dm ao form.
Nota: O campo criado foi representado no form por um DBLookupComboBox.
Botão Novo
Dê dois clicks nele e digite o seguinte código:
Botão Alterar
Dê dois clicks nele e digite o seguinte código:
No evento OnKeyUp do EditProcurar digite o seguinte:
Botão Excluir: dê dois clicks nele e digite o seguinte código:
Botão Salvar - Enabled: False - dê dois clicks nele e digite o seguinte código:
Botão Cancelar - Enabled: False - dê dois clicks nele e digite o seguinte código:
A janela cadastro de Estados fica mais ou menos assim:
Na janela principal clique no menu cadastro -> tabelas Auxiliares -> Estados e digite o seguinte código:
CADASTRO DE MUNICÍPIOS
A tabela municípios possui dependência (um município pertence a um estado). Voltando a Unit Dm (data module) colocaremos mais um componente:
ADODataSet da paleta ADO
Connection: ADOConexaoPrinciapal
CommandText: select * from municipios
Name: ADODSMunicipios
Active : True
DataSource da Paleta Data Access.
DataSet: ADODSMunicipios
Name: DsMunicipios
Vamos inserir um novo form no projeto:
File -> New -> Form
No Object Inspector:
Name: FrmCadMunicipios
Caption: Cadastro de Municípios
No Evento On Activate do Form digite:
Dm.ADODSPais.Open;
Dm.ADODSEstados.Open;
Dm.ADODSMunicipios.Open;
No evento OnClose do Form digite:
Dm.ADODSPais.Close;
Dm.ADODSEstados.Close;
Dm.ADODSMunicipios.close;
Dm.ADODSMunicipios.CommandText:="select * from Municipios";
Action:=caFree;
Isto faz com que não haja erros quando abrirmos novamente a janela
Salve a unit: UnCadMunicipios
Para economizar bastante trabalho selecione, na janela Cadastro de Paises, os três panels, copie e depois cole no Form Cadastro de Municipios.
No panel1 no Botão Fechar dê dois clicks nele e digite o seguinte código:
Close;
Aperte as Teclas Alt+F11 na janela Uses Unit selecione a UnDm.
Mude o caption do Label1: Municipios
DBNavigator com VisibleButtons: [nbFirst,nbPrior,nbNext,nbLast] datasource: Dm.DsMunicipios
No 2º
DBGrid
DataSource: Dm.DsMunicipios
Options: [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit]
No data module dê um clique duplo no ADODSMunicipios. No field Editor clique com o botão Direito do Mouse e selecione add all fields clique novamente com o botão Direito do Mouse e selecione New Field.
Criaremos dois novos Campos um para o nome do estado e outro para o nome do pais.
Name: NomeEstado
Type: String
Size: 30
Field Type: Lookup
Key Fields: IdEstado
DataSet: ADODSEstados
Lookup Keys: idEstados
Result Field: nome
Name: NomePais
Type: String
Size: 30
Field Type: Lookup
Key Fields: IdEstados
DataSet: ADODSEstados
Lookup Keys: idEstados
Result Field: nomePais
Agora selecione o Nome, sigla, nomeEstado e nomepais e arraste-os para o panel3. Apague o DBLookupComboBox2 que se refere ao pais e coloque no seu lugar um DBEdit com as seguintes propriedades:
DataSource: Dm.DsMunicipios
DataField: NomePais
Selecione os DBEdit1, DBEdit2 e DBLookupComboBox1 e mude a propriedade ReadOnly para true.
Dê dois cliques no Botão Novo e digite o seguinte código:
Dê dois cliques no Botão Alterar e digite o seguinte código:
No evento OnKeyUp do EditProcurar digite o seguinte:
Botão Excluir: dê dois clicks nele e digite o seguinte código:
Botão Salvar - Enabled: False - dê dois clicks nele e digite o seguinte código:
Botão Cancelar - Enabled: False - dê dois clicks nele e digite o seguinte código:
A janela cadastro de Municípios fica mais ou menos assim:
Na janela principal clique no menu cadastro -> tabelas Auxiliares -> Municípios e digite o seguinte código:
CADASTRO DE ZONAS
Uma Zona pertence a um município, e mesmo que ela tenha o mesmo nome o que as diferenciará é o município a que elas pertencem.
Exemplos:
Zona Norte de São Paulo e Zona Norte do Rio de Janeiro,
Na Unit Dm (data module) colocaremos mais dois componente:
ADODataSet da paleta ADO
Connection: ADOConexaoPrinciapal
CommandText: select * from Zona
Name: ADODSZona
Active : True
DataSource da Paleta Data Access.
DataSet: ADODSZona
Name: DsZona
Vamos inserir um novo form no projeto:
File -> New -> Form
No Object Inspector:
Name: FrmCadZona
Caption: Cadastro de Zona
No Evento On Activate do Form digite:
No evento OnClose do Form digite:
Isto faz com que não haja erros quando abrirmos novamente a janela
Salve a unit: UnCadZonas
Para economizar bastante trabalho selecione, na janela Cadastro de Paises, os três panels, copie e depois cole no Form Cadastro de Zonas.
No panel1 no Botão Fechar dê dois clicks nele e digite o seguinte código:
Close;
Aperte as Teclas Alt+F11 para abrir a janela Use Units e selecione a UnDm.
Mude o caption do Label1: ZOnas
DBNavigator com VisibleButtons: [nbFirst,nbPrior,nbNext,nbLast] datasource: Dm.DsZonas
No 2º
DBGrid
DataSource: Dm.DsZonas
Options:[dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit]
No data module dê um clique duplo no ADODSZonas. No field Editor clique com o botão Direito do Mouse e selecione add all fields clique novamente com o botão Direito do Mouse e selecione New Field.Criaremos Três novos Campos para: nome do Município; nome do estado e; o nome do pais.
Name: NomeMunicipio
Type: String
Size: 30
Field Type: Lookup
Key Fields: IdMunicipios
DataSet: ADODSMunicipios
Lookup Keys: idMunicipios
Result Field: nome
Name: NomeEstado
Type: String
Size: 30
Field Type: Lookup
Key Fields: IdMunicipios
DataSet: ADODSMunicipios
Lookup Keys: idMunicipios
Result Field: nomeEstado
Name: NomePais
Type: String
Size: 30
Field Type: Lookup
Key Fields: IdMunicipios
DataSet: ADODSMunicipios
Lookup Keys: idMunicipios
Result Field: nomePais
Agora selcione o Nome, NomeMunicipios, nomeEstado e nomepais e arraste-os para o panel3.
Apague os DBLookupComboBox que se referem ao Estado e ao pais e coloque em seus lugares dois DBEdit com as seguintes propriedades:
DataSource: Dm.DsZonas
DataField: NomeEstado
DataSource: Dm.DsZonas
DataField: NomePais
Selecione os DBEdit1, DBEdit2, DBEdit3 e DBLookupComboBox1 e mude a propriedade ReadOnly para true.
Dê dois cliques no Botão Novo e digite o seguinte código:
Dê dois cliques no Botão Alterar e digite o seguinte código:
No evento OnKeyUp do EditProcurar digite o seguinte:
Botão Excluir: dê dois clicks nele e digite o seguinte código:
Botão Salvar - Enabled: False - dê dois clicks nele e digite o seguinte código:
Botão Cancelar - Enabled: False - dê dois clicks nele e digite o seguinte código:
A janela cadastro de Zonas fica mais ou menos assim:
Na janela principal clique no menu cadastro -> tabelas Auxiliares -> Zonas e digite o seguinte código:
Vamos agora criar o cadastro de bairros lembrando da dependência, um Bairro pertence a uma Zona e podemos até ter bairros com o mesmo nome em zonas diferentes.
Na Unit Dm (data module) colocaremos mais um componente:
ADODataSet da paleta ADO
Connection: ADOConexaoPrinciapal
CommandText: select * from Bairro
Name: ADODSBairros
Active : True
DataSource da Paleta Data Access.
DataSet: ADODSBairros
Name: DsBairros
Vamos inserir um novo form no projeto:
File -> New -> Form
No Object Inspector:
Name: FrmCadBairro
Caption: Cadastro de Bairros
No Evento On Activate do Form digite:
Dm.ADODSPais.Open;
Dm.ADODSEstados.Open;
Dm.ADODSMunicipios.Open;
Dm.ADODSZonas.Open;
Dm.ADODSBairros.Open;
No evento OnClose do Form digite:
Dm.ADODSPais.Close;
Dm.ADODSEstados.Close;
Dm.ADODSMunicipios.Close;
Dm.ADODSZonas.Close
Dm.ADODSBairros.Close;
Dm.ADODSBairros.CommandText:="select * from Bairro";
Action:=caFree;
Isto faz com que não haja erros quando abrirmos novamente a janela.
Salve a unit: UnCadBairros
Para economizar bastante trabalho selecione, na janela Cadastro de Paises, os três panels, copie e depois cole no Form Cadastro de Bairros.
No panel1 no Botão Fechar dê dois clicks nele e digite o seguinte código:
Close;
Mude o caption do Label1 para Bairros.
DBNavigator com VisibleButtons: [nbFirst,nbPrior,nbNext,nbLast] datasource: Dm.DsBairros
Aperte as Teclas Alt+F11 para abrir a janela Use Units e selecione a UnDm.
No 2º Panel
DBGrid
DataSource: Dm.DsBairros
Options:[dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit]
No data module dê um clique duplo no ADODSBairros. No field Editor clique com o botão Direito do Mouse e selecione add all fields clique novamente com o botão Direito do Mouse e selecione New Field.
Criaremos desta vez quatro novos Campos para:
nome da Zona;
nome do Município;
nome do estado e;
o nome do pais.
Name: NomeZona
Type: String
Size: 30
Field Type: Lookup
Key Fields: IdZona
DataSet: ADODSZonas
Lookup Keys: idZona
Result Field: Descricao
Name: NomeMunicipio
Type: String
Size: 30
Field Type: Lookup
Key Fields: IdZona
DataSet: ADODSZonas
Lookup Keys: idZona
Result Field: nomeMunicipio
Name: NomeEstado
Type: String
Size: 30
Field Type: Lookup
Key Fields: IdZona
DataSet: ADODSZonas
Lookup Keys: idZona
Result Field: nomeEstado
Name: NomePais
Type: String
Size: 30
Field Type: Lookup
Key Fields: IdZona
DataSet: ADODSZonas
Lookup Keys: idZona
Result Field: nomePais
Selcione o Nome, nomeZona, NomeMunicipios, nomeEstado e nomepais e arraste-os para o panel3.
Apague os DBLookupComboBox que se referem ao Estado e ao pais e coloque em seus lugares dois DBEdit com as seguintes propriedades:
DataSource: Dm.DsBairros
DataField: NomeEstado
DataSource: Dm.DsBairros
DataField: NomePais
Selecione os DBEdit1, DBEdit2, DBEdit3, DBLookupComboBox1 e DBLookupComboBox2 e mude a propriedade ReadOnly para true.
Para o DBLookupComboBox2 mude as seguintes prorpiedades:
DataSource: Dm.DsZonas
DataField: NomeMunicipio
ListSource: Dm.DsMunicipios
ListField; Nome
KeyField: IdMunicipios
Dê um duplo Click no DBLookupComboBox2 e insira o seguinte código:
Nota: Sem este código ficariam disponiveis todas as zonas o que irá causar confusão, pois no Rio de Janeiro tem Zona Sul e em São Paulo também.
Dê dois cliques no Botão Novo e digite o seguinte código:
Dê dois cliques no Botão Alterar e digite o seguinte código:
No evento OnKeyUp do EditProcurar digite o seguinte:
Botão Excluir: dê dois clicks nele e digite o seguinte código:
Botão Salvar - Enabled: False - dê dois clicks nele e digite o seguinte código:
Botão Cancelar - Enabled: False - dê dois clicks nele e digite o seguinte código:
A janela cadastro de Bairros fica mais ou menos assim:
Na janela principal clique no menu cadastro -> tabelas Auxiliares -> Zonas e digite o seguinte código:
CADASTRO DE TIPOS DE LOGRADOUROS
Os tipos mais comuns são Rua, Estrada, travessa entre outros. Por se tratar de um conjunto definido poderíamos apenas criar um lista, porém se depois de pronto descobrirmos que faltou um tipo teremos que compilar tudo de novo com a alteração, isso não é um problema grande se estiver com o programa rodando em menos de 10 máquinas. Assim Como a tabela paises, esta tabela não possui dependências.
Voltando a Unit Dm (datamodule) colocaremos mais dois componente:
ADODataSet da paleta ADO
Connection: ADOConexaoPrincipal
CommandText: select * from TipoLogradouro
Name: ADODSTiposLogradouros
Active : True
DataSource da Paleta Data Access.
DataSet: ADODSTiposLogradouros
Name: DsTiposLogradouros
Vamos inserir um novo form no projeto:
File -> New -> Form
No Object Inspector:
Name: FrmCadTiposLogradouros
Caption: Cadastro de Tipos de Logradouros
Tecle Alt+F11 e na janela Use Unit selecione o UnDm
No Evento On Activate do Form digite:
Dm.ADODSTiposLogradouros.Open;
No evento OnClose do Form digite:
Dm.ADODSTiposLogradouros.Close;
Dm.ADODSTiposLogradouros.CommandText:="Select * From TipoLogradouro";
Action:=caFree;
Isto faz com que não haja erros quando abrirmos novamente a janela
Salve a unit: UnCadTipoLogradouros
Coloque três panel no form
No 1º
Align : AlTop
Coloque nele:
BitButton com Caption: Fechar e Name: BtFechar.
Dê dois clicks nele e digite o seguinte código:
Close;
Label com Caption: Tipos de Logradouros
Edit com Name: EditProcurar e Text: (sem Nada)
DBNavigator com VisibleButtons: [nbFirst,nbPrior,nbNext,nbLast] datasource: Dm.DsTiposLogradouros
No 3º
Align: AlBotton
No 2º
Align: AlCliente
Coloque nele um BDGrid om as seguintes prorpiedades:
DataSource: Dm. DsTiposLogradouros
Options: [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit]
Na janela do data module dê um clique duplo no ADODSTiposLogradouros, isso fará abrir a janela do field editor.
No field Editor clique com o botão Direito do Mouse e selecione add all fields. Selcione o Descricao e Abrev e arraste-os para o panel3.
Voltando ao 3º panel Coloque nele:
05 BitButton:
Caption : Novo - Name: BtNovo
Dê dois clicks nele e digite o seguinte código:
Caption : Alterar - Name: BtAlterar
Dê dois clicks nele e digite o seguinte código:
No evento OnKeyUp do EditProcurar digite o seguinte:
Caption : Excluir - Name: BtExcluir
Dê dois clicks nele e digite o seguinte código:
Caption : Salvar - Name: BtSalvar - Enabled: False
Dê dois clicks nele e digite o seguinte código:
Caption : Cancelar - Name: BtCancelar - Enabled: False
Dê dois clicks nele e digite o seguinte código:
A janela cadastro de Tipos de Logradouros fica mais ou menos assim:
Na janela principal no menu cadastro -> tabelas Auxiliares -> Tipos de Logradouros e digite o seguinte código:
CADASTRO DE PREPOSIÇÃO
Voltando a Unit Dm (datamodule) colocaremos mais dois componentes:
ADODataSet da paleta ADO
Connection: ADOConexaoPrincipal
CommandText: select * from prepologradouro
Name: ADODSPrepologradouro
Active : True
DataSource da Paleta Data Access.
DataSet: ADODSPrepologradouro
Name: DsPrepologradouro
Vamos inserir um novo form no projeto:
File -> New -> Form
No Object Inspector:
Name: FrmCadPreposicao
Caption: Cadastro de Preposições
Tecle Alt+F11 e na janela Use Unit selecione o UnDm
No Evento On Activate do Form digite:
No evento OnClose do Form digite:
Isto faz com que não haja erros quando abrirmos novamente a janela
Salve a unit: UnCadPreposicao
Coloque três panel no form
No 1º
Align : AlTop
Coloque nele:
BitButton com Caption: Fechar e Name: BtFechar.
Dê dois clicks nele e digite o seguinte código:
Close;
Label com Caption: Preposição
Edit com Name: EditProcurar e Text: (sem Nada)
DBNavigator com VisibleButtons: [nbFirst,nbPrior,nbNext,nbLast] datasource: Dm.DsPrepoLogradouro
No 3º
Align: AlBotton
No 2º
Align: AlCliente
Coloque nele um BDGrid om as seguintes prorpiedades:
DataSource: Dm.DsPrepoLogradouro
Options: [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit]
Na janela do data module dê um clique duplo no ADODSPrepoLogradouro, isso fará abrir a janela do field editor.
No field Editor clique com o botão Direito do Mouse e selecione add all fields. Selcione o preposicao e arraste-os para o panel3.
Voltando ao 3º panel Coloque nele:
05 BitButton:
Caption : Novo - Name: BtNovo
Dê dois clicks nele e digite o seguinte código:
Caption : Alterar - Name: BtAlterar
Dê dois clicks nele e digite o seguinte código:
No evento OnKeyUp do EditProcurar digite o seguinte:
Caption : Excluir - Name: BtExcluir
Dê dois clicks nele e digite o seguinte código:
Caption : Salvar - Name: BtSalvar - Enabled: False
Dê dois clicks nele e digite o seguinte código:
Caption : Cancelar - Name: BtCancelar - Enabled: False
Dê dois clicks nele e digite o seguinte código:
A janela cadastro de Tipos de Logradouros fica mais ou menos assim:
Na janela principal no menu cadastro -> tabelas Auxiliares -> Tipos de Logradouros e digite o seguinte código:
Voltando a Unit Dm (datamodule) colocaremos mais dois componentes:
ADODataSet da paleta ADO
Connection: ADOConexaoPrincipal
CommandText: select * from Titulologradouro
Name: ADODSTitulologradouro
Active : True
DataSource da Paleta Data Access.
DataSet: ADODSTitulologradouro
Name: DsTitulologradouro
Vamos inserir um novo form no projeto:
File -> New -> Form
No Object Inspector:
Name: FrmCadTitulos
Caption: Cadastro de Títulos de Nobreza
Tecle Alt+F11 e na janela Use Unit selecione o UnDm
No Evento On Activate do Form digite:
Dm. ADODSTitulologradouro.Open;
No evento OnClose do Form digite:
Dm.ADODSTitulologradouro.Close;
Dm.ADODSTitulologradouro.CommandText:="Select * From TutuloLogradouro";
Action:=caFree;
Isto faz com que não haja erros quando abrirmos novamente a janela
Salve a unit: UnCadTitulos
Coloque três panel no form
No 1º
Align : AlTop
Coloque nele:
BitButton com Caption: Fechar e Name: BtFechar.
Dê dois clicks nele e digite o seguinte código:
Close;
Label com Caption: Titulo
Edit com Name: EditProcurar e Text: (sem Nada)
DBNavigator com VisibleButtons: [nbFirst,nbPrior,nbNext,nbLast] datasource: Dm.DsTituloLogradouro
No 3º
Align: AlBotton
No 2º
Align: AlCliente
Coloque nele um BDGrid om as seguintes prorpiedades:
DataSource: Dm.DsTituloLogradouro
Options: [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit]
Na janela do data module dê um clique duplo no ADODSTituloLogradouro, isso fará abrir a janela do field editor.
No field Editor clique com o botão Direito do Mouse e selecione add all fields. Selcione o titulo e Abrev e arraste-os para o panel3.
Voltando ao 3º panel Coloque nele:
05 BitButton:
Caption : Novo - Name: BtNovo
Dê dois clicks nele e digite o seguinte código:
Caption : Alterar - Name: BtAlterar
Dê dois clicks nele e digite o seguinte código:
No evento OnKeyUp do EditProcurar digite o seguinte:
Caption : Excluir - Name: BtExcluir
Dê dois clicks nele e digite o seguinte código:
Caption : Salvar - Name: BtSalvar - Enabled: False
Dê dois clicks nele e digite o seguinte código:
Caption : Cancelar - Name: BtCancelar - Enabled: False
Dê dois clicks nele e digite o seguinte código:
A janela cadastro de Tipos de Logradouros fica mais ou menos assim:
Na janela principal no menu cadastro -> tabelas Auxiliares -> Tipos de Logradouros e digite o seguinte código:
CADASTRO DE LOGRADOUROS
Agora começaremos a preparar o cadastro que tem a finalidade principal deste módulo, o cadastro de logradouros. Como já foram preparadas todas as tabelas auxiliares, não haverá grandes dificuldades para esta, vejamos:
Como sempre, na Unit Dm (datamodule) colocaremos mais dois componentes:
ADODataSet da paleta ADO
Connection: ADOConexaoPrincipal
CommandText: select * from logradouros
Name: ADODSlogradouros
Active : True
DataSource da Paleta Data Access.
DataSet: ADODSLogradouros
Name: DsLogradouros
Aqui são necessários alguns ajustes: para começar teremos que criar alguns campos no ADODSLogradouros. Na janela do Data Module dê dois cliques no ADODSLogradouros, no field Editor tecle Crtl+N para abrir a janela new field:
1º campo
Name: Titulo
Type: String
Size: 30
Field Type: Lookup
Key Field: IdTituloLogradouro
DataSet: ADODSTituloLogradouro
Lookup Keys: idtitulologradouro
Result Field: Titulo
2º campo
Name: Preposicao
Type: String
Size: 5
Field Type: Lookup
Key Field: IdPrepoLogradouro
DataSet: ADODSPrepoLogradouro
Lookup Keys: idPrepologradouro
Result Field: Preposicao
3º campo
Name: TipoLogradouro
Type: String
Size: 15
Field Type: Lookup
Key Field: IdTipoLogradouro
DataSet: ADODSTiposLogradouros
Lookup Keys: idTipologradouro
Result Field: Descricao
4º campo
Name: Bairro
Type: String
Size: 30
Field Type: Lookup
Key Field: IdBairro
DataSet: ADODSBairros
Lookup Keys: idBairro
Result Field: nome
Vamos inserir um novo form no projeto:
File -> New -> Form
No Object Inspector:
Name: FrmCadLogradouros
Caption: Cadastro de Logradouros
Tecle Alt+F11 e na janela Use Unit selecione o UnDm
No Evento On Activate do Form digite:
No evento OnClose do Form digite:
Isto faz com que não haja erros quando abrirmos novamente a janela
Salve a unit: UnCadLogradouros
Coloque três panel no form
No 1º
Align : AlTop
Coloque nele:
BitButton com Caption: Fechar e Name: BtFechar.
Dê dois clicks nele e digite o seguinte código:
Close;
Coloque um RadioGroup com Caption: Procurar por
Columns: 2
Items:
Nome
CEP
ItemIndex: 0 (zero)
Nota: Desta forma poderemos fazer a procura pelo Nome ou pelo CEP.
Edit com Name: EditProcurar e Text: (sem Nada)
DBNavigator com VisibleButtons: [nbFirst,nbPrior,nbNext,nbLast] datasource: Dm.DsLogradouros
No 3º
Align: AlBotton
No 2º
Align: AlCliente
Coloque nele um BDGrid om as seguintes prorpiedades:
DataSource: Dm.DsLogradouros
Options: [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit]
Na janela do data module dê um clique duplo no ADODSTituloLogradouro, isso fará abrir a janela do field editor.
No field Editor clique com o botão Direito do Mouse e selecione add all fields. Selcione nome, CEP, Distancia, titulo, preposição, Tipologradouro e bairro e arraste-os para o panel3.
Voltando ao 3º panel Coloque nele:
05 BitButton:
Caption : Novo - Name: BtNovo
Dê dois clicks nele e digite o seguinte código:
Caption : Alterar - Name: BtAlterar
Dê dois clicks nele e digite o seguinte código:
No evento OnKeyUp do EditProcurar digite o seguinte:
No evento OnClick do RadioGroup digite o seguinte:
Nota:Perceba que a procura atende a uma condição.
Caption : Excluir - Name: BtExcluir
Dê dois clicks nele e digite o seguinte código:
Caption : Salvar - Name: BtSalvar - Enabled: False
Dê dois clicks nele e digite o seguinte código:
Caption : Cancelar - Name: BtCancelar - Enabled: False
Dê dois clicks nele e digite o seguinte código:
A janela cadastro de Logradouros fica mais ou menos assim:
Na janela principal no menu cadastro -> tabelas Auxiliares -> Tipos de Logradouros e digite o seguinte código:
Agora para agilizar a execução do programa vá em Project -> options e na aba Froms deixe apenas o frmPrincipal e a DM no lado Auto-create forms.
O cadastro de logradouros está concluído agora vamos mostrar na tela principal uma utilidade para está aplicação.
No form principal coloque componente panel apague o captionde cada um. A propriedade Align do primeiro para alTop, do segundo para alBotton e do terceiro para alClient.
Coloque no primeiro panel:
RadioGroup
Caption: Procurar Por
Columns: 2
Items:
Nome
CEP
ItemIndex: 0(zero)
Edit:
Name: Procurar
Text: (Sem Nada)
DBNavigator
Datasource: Dm.DsLogradouros
VisibleButtons: [nbFirst,nbPrior,nbNext,nbLast]
No Panel do meio coloque um DBGrid com as seguintes propriedades:
Align: alClient
Datasource: Dm.DsLogradouros
ReadOnly: True
Options: [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit]
No Panel de Baixo Coloque um Memo com Name: MemoEndereco para mostrar a impressão do endereço.
No evento OnClick do RadioGroup1 digite o seguinte:
No evento OnKeyUp do EditProcurar digite o seguinte:
Para facilitar ao final da UnPrincipal antes do Ultimo End( o que vem seguido de ponto) digite a seguinte procedure:
Após digitada a nova procedure deve ser declarada na seção var:
Nota: Este procedimento é padrão para as procedures criadas pelo programador.
No evento OnCellClick do Grid digite o seguinte:
No evento OnClick do DBNavigator digite o mesmo:
A tela principal ficará mais ou menos assim:
Quando Clicarmos num endereço no grid, o memo mostrará uma etiqueta com o endereço.
FINALIZAÇÃO
Embora utilizamos apenas recursos básicos, sem muitas instruções SQL ou outras mais complexas, seguidos os conceitos aqui expressos, podem ser feitos aplicativos com outras finalidades. Espero ter ajudado.
Sempre em nossos programas precisamos cadastrar clientes, fornecedores, funcionários dentre outros que possuem um endereço. Muitas vezes temos diversos clientes ou fornecedores que se estabelecem no mesmo logradouro, então a pergunta: tenho que digitar o mesmo endereço toda vez que for cadastrar um "parceiro de negócios" que se estabelecem no mesmo logradouro? Não, claro que não. A solução é criarmos um cadastro de logradouros e apenas chamá-lo toda vez que precisarmos. Podemos chamá-lo pelo nome ou CEP e ainda ficaremos livres de erros de digitação que provocam erros em relatórios, por exemplo:
Isso em alguns agrupamentos poderá gerar um relatório não satisfatório, pois se trata do mesmo logradouro, porém digitado de forma diferente.
CRIANDO O BANCO DE DADOS
Com a facilidade de ferramentas gratuitas existentes na atualidade, não é difícil criar e manter um Banco de Dados: o DBDesigner é um excelente programa gratuito para moldar o banco de dados pode ser obtido no site do desenvolvedor http://www.fabforce.net/dbdesigner4/downloads.php e o MySQL que pode ser baixado http://dev.mysql.com/downloads/mysql/5.0.html e tem disponível uma boa documentação no próprio site, sem contar a facilidade de se implementar consultas e manipular dados através de Web Pages com o uso do PHP.
Caso você não tenha interesse em fazer algum trabalho com Web pages poderá baixar o WAMP do site http://www.wampserver.com/download.php ele instala o servidor Apache, o PHP e MySQL e já deixa tudo configurado.
Em ambos casos será necessário instalar também o connector/ODBC 3.51 que poderá ser baixado em http://dev.mysql.com/downloads/connector/odbc/3.51.html.
Embora modelagem de dados seja algo que dê trabalho e parece que sempre tem alguma coisa para melhorar o meu modelo de banco de dados ficou como o da próxima figura.
Após chegarmos a conclusão do nosso modelo de dados o próprio DBDesigner4 gera os scripts de criação do banco de dados.
Podemos criar as tabelas da seguinte forma:
Abra a console do MySQL:
Mysql -h localhost -u root -p [enter] ******* (sua senha) [enter] CREATE DATABASE Logradouros; [enter] USE Logradouros; [enter]
Nota: No WINDOWS não tem diferença entre maiúsculas e minúsculas.
Digite os scripts (criados pelo DBDesigner) abaixo para criar as tabelas
CREATE TABLE pais ( idpais INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, nome VARCHAR(30) NULL, sigla CHAR(3) NULL, PRIMARY KEY(idpais)); CREATE TABLE estados ( idestados INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, idpais INTEGER UNSIGNED NOT NULL, nome VARCHAR(40) NULL, sigla CHAR(2) NULL, PRIMARY KEY(idestados), INDEX estados_FKIndex1(idpais)); CREATE TABLE municipios ( idmunicipios INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, idestados INTEGER UNSIGNED NOT NULL, nome VARCHAR(40) NULL, PRIMARY KEY(idmunicipios), INDEX municipios_FKIndex1(idestados)); CREATE TABLE bairro ( idbairro INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, idZona INTEGER UNSIGNED NOT NULL, nome VARCHAR(50) NULL, PRIMARY KEY(idbairro), INDEX bairro_FKIndex1(idZona)); CREATE TABLE prepologradouro ( idprepologradouro INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, preposicao CHAR(5) NULL, PRIMARY KEY(idprepologradouro)); CREATE TABLE tipologradouro ( idtipologradouro INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, descricao VARCHAR(15) NULL, abrev CHAR(1) NULL, PRIMARY KEY(idtipologradouro)); CREATE TABLE titulologradouro ( idtitulologradouro INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, titulo VARCHAR(25) NULL, Abrev CHAR(3) NULL, PRIMARY KEY(idtitulologradouro)); CREATE TABLE Zona ( idZona INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, idmunicipios INTEGER UNSIGNED NOT NULL, descricao VARCHAR(30) NULL, PRIMARY KEY(idZona), INDEX Zona_FKIndex1(idmunicipios)); CREATE TABLE logradouros ( idlogradouros INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, idtitulologradouro INTEGER UNSIGNED NOT NULL, idprepologradouro INTEGER UNSIGNED NOT NULL, idtipologradouro INTEGER UNSIGNED NOT NULL, idbairro INTEGER UNSIGNED NOT NULL, nome VARCHAR(40) NULL, CEP VARCHAR(10) NULL, distancia INTEGER UNSIGNED NULL, PRIMARY KEY(idlogradouros), INDEX logradouros_FKIndex1(idbairro), INDEX logradouros_FKIndex2(idtipologradouro), INDEX logradouros_FKIndex3(idtitulologradouro), INDEX logradouros_FKIndex4(idprepologradouro));
CRIANDO A CONEXÃO COM O BANCO DE DADOS
Após criar as tabelas temos que criar a conexão entre o Delphi e MySQL. Embora já existam conexões diretas, tal como o Zeos, prefiro usar o conector ODBC. Para isso é necessário instalá-lo e depois em painel de controle -> ferramentas de sistemas -> fontes de Dados ODBC. Clique na aba Fonte de Dados de Sistema -> Adicionar e escolha: MySql e Clique em concluir.
Data Source Name: Logradouros
Description: Base para endereços
Server: LocalHost (se o mysql estiver instalado na própria máquina)
User: Root (seu usuário)
Password: *******
Database: Logradouros
CRIAÇÃO DO APLICATIVO
Neste ponto já estão criadas as tabelas e a conexão com o banco de dados. Agora vamos organizar o nosso trabalho; no HD crie uma pasta chamada "logradouros". Ao iniciar o Delphi, é disponibilizado um projeto, salve-o na pasta logradouros com o nome Logradouros e para a unit1 com o nome de UnPrincipal.
Nota: Os procedimentos a seguir foram feitos em DELPHI 7.
TELA PRINCIPAL
Mude as seguintes Propriedades do Form1:
Name: FrmPrincipal
Caption: Logradouros
WindowState: wsMaximized
Coloque um MainMenu no form principal e crie os seguintes menus:
Cadastro
Tabelas Auxiliares (Control + Seta à Direita)
Países
Estados
Municípios
Zonas
Bairros
-
Tipos de Logradouros
Títulos de Nobreza
Preposição
Logradouros
-
Sair
Ajuda
Sobre...
Feche o editor de Menus.
Click no menu sair e digite:
Close;
Temos agora uma tela inicial bem simples, porém completa para o nosso exemplo.
Dica: A cada implementação significativa é aconselhado que se compile o programa para conferir os códigos e acertá-los, caso haja algum erro.
Vamos agora prepara o acesso ao banco de dados criado anteriormente. Para isso colocaremos um DataModule no nosso projeto.
File -> New -> Data Module
No Object Inspector:
Name: Dm
Coloque um componente ADOConnection ( este componente é responsável pela conexão com o banco de dados).
No Object Inspector:
Name: ADOConexaoPrincipal
ConnectionString: ( Clique nas reticências) e na janela que vai abrir clique em Build.
Isso abrirá uma nova janela, click na aba conexão, depois em atualizar, escolha a fonte de dados logradouro, digite o usuário e a senha e click em testar conexão.
Click em Ok e novamente em Ok.voltando ao object Inspector mude as propriedades Connected para true e PromptLogin para False.
Como a tabela logradouros depende de diversas outras tabelas, teremos que primeiro preparar o cadastro para todas as tabelas pensando sempre nas dependências.
CADASTRO DE PAÍSES
Como a tabela país não possui dependências, começaremos por ela. Na Unit Dm (datamodule) colocaremos mais dois componentes:
ADODataSet da paleta ADO com as seguintes prorpiedades:
Connection: ADOConexaoPrinciapal
CommandText: select * from pais
Name: ADODSPais
Active : True
DataSource da Paleta Data Access.
DataSet: ADODSPais
Name: DsPais
Vamos inserir um novo form no projeto:
File -> New -> Form
No Object Inspector:
Name: FrmCadPaises
Caption: Cadastro de Países
No Evento OnActivate do Form digite:
Dm.ADODSPais.Open;
No evento OnClose do Form digite:
Dm.ADODSPais.Close;
Dm.ADODSPais.CommandText:="select * from pais";
Action:=caFree;
Isto faz com que não haja erros quando abrirmos novamente a janela
Salve a unit: UnCadPaises
Coloque três panel no form
No 1º
Align : AlTop
Coloque nele:
BitButton com Caption: Fechar e Name: BtFechar.
Dê dois clicks nele e digite o seguinte código:
Close;
Edit com Name: EditProcurar e Text: (sem Nada) e logo acima deste um Label com o caption: País
DBNavigator com VisibleButtons: [nbFirst,nbPrior,nbNext,nbLast] datasource: Dm.DsPais
No 3º
Align: AlBotton
No 2º
Align: AlCliente
Coloque nele um BDGrid om as seguintes prorpiedades:
DataSource: Dm.DsPais
Options: [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit]
Na janela do data module dê um clique duplo no ADODSPais, isso fará abrir a janela do field editor.
No field Editor clique com o botão Direito do Mouse e selecione add all fields. Selcione o Nome e sigla e arraste-os para o panel3. Responda YES que será adicionado automaticamente a unit dm ao form.
Voltando ao 3º panel Coloque nele:
05 BitButton:
Caption : Novo - Name: BtNovo
Dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=false; Panel2.Enabled:=false; Dm.ADODSPais.Open; Dm.ADODSPais.Append; BtSalvar.Enabled:=True; BtCancelar.Enabled:=True; BtAlterar.Enabled:=False; BtNovo.Enabled:=False; BtExcluir.Enabled:=False; DBEdit2.ReadOnly:=False; DBEdit3.ReadOnly:=False; DBEdit2.SetFocus;
Caption : Alterar - Name: BtAlterar
Dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=false; Panel2.Enabled:=false; Dm.ADODSPais.Open; Dm.ADODSPais.Edit; BtSalvar.Enabled:=True; BtCancelar.Enabled:=True; BtAlterar.Enabled:=False; BtNovo.Enabled:=False; BtExcluir.Enabled:=False; DBEdit2.ReadOnly:=False; DBEdit3.ReadOnly:=False; DBEdit2.SetFocus;
No evento OnKeyUp do EditProcurar digite o seguinte:
Dm.ADODSPais.Close; Dm.ADODSPais.CommandText:="select * from pais where nome LIKE " + #39 + EditProcurar.Text + "%" + #39; Dm.ADODSPais.Open;
Caption : Excluir - Name: BtExcluir
Dê dois clicks nele e digite o seguinte código:
if MessageDlg("Esta Operação não poderá ser desfeita. Prosseguir", mtConfirmation, [mbYes, mbNo],0) = mrYes then begin MessageDlg("Deletado " + Dm.ADODSPais.Fields[1].AsString, mtInformation, [mbOk], 0); Dm.ADODSPais.Delete; end;
Caption : Salvar - Name: BtSalvar - Enabled: False
Dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=True; Panel2.Enabled:=True; Dm.ADODSPais.Post; BtSalvar.Enabled:=false; BtCancelar.Enabled:=false; BtAlterar.Enabled:=true; BtNovo.Enabled:=true; BtExcluir.Enabled:=true; DBEdit2.ReadOnly:=True; DBEdit3.ReadOnly:=True; Dm.ADODSPais.Close; Dm.ADODSPais.CommandText:="select * from pais" ; Dm.ADODSPais.Open;
Caption : Cancelar - Name: BtCancelar - Enabled: False
Dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=True; Panel2.Enabled:=true; Dm.ADODSPais.Cancel; BtSalvar.Enabled:=false; BtCancelar.Enabled:=false; BtAlterar.Enabled:=true; BtNovo.Enabled:=true; BtExcluir.Enabled:=true; DBEdit2.ReadOnly:=True; DBEdit3.ReadOnly:=True; Dm.ADODSPais.Close; Dm.ADODSPais.CommandText:="select * from pais" ; Dm.ADODSPais.Open;
A janela cadastro de Países fica mais ou menos assim:
Na janela principal no menu cadastro -> tabelas Auxiliares -> Países e digite o seguinte código:
FrmCadPaises:=TFrmCadPaises.Create(self); Try FrmCadPaises.ShowModal; Finally FrmCadPaises.Release; End;
A diferença para as próximas tabelas são as dependências que devem ser tratadas com mais atenção. CADASTRO DE ESTADOS
Diferente da tabela Pais, a Tabela estados possui dependência (um estado pertence a um Pais).
Voltando a Unit Dm (datamodule) colocaremos mais um componente:
ADODataSet da paleta ADO
Connection: ADOConexaoPrinciapal
CommandText: select * from Estados
Name: ADODSEstados
Active : True
DataSource da Paleta Data Access.
DataSet: ADODSEstados
Name: DsEstados
Vamos inserir um novo form no projeto:
File -> New -> Form
No Object Inspector:
Name: FrmCadEstados
Caption: Cadastro de Estados
No Evento On Activate do Form digite:
Dm.ADODSPais.Open;
Dm.ADODSEstados.Open;
No evento OnClose do Form digite:
Dm.ADODSPais.Close;
Dm.ADODSEstados.Close;
Dm.ADODSEstados.CommandText:="select * from Estados";
Action:=caFree;
Isto faz com que não haja erros quando abrirmos novamente a janela
Salve a unit: UnCadEstados
Para economizar bastante trabalho selecione, na janela Cadastro de Paises, os três panels, copie e depois cole no Form Cadastro de Estados.
Nota: Quando copiamos os componentes de um form para o outro, levamos junto as propriedades dos mesmos, porém os códigos não serão colados juntos com os componentes.
No panel1 no Botão Fechar.
Dê dois clicks nele e digite o seguinte código:
Close;
Mude o caption do Label1: Estados
Aperte as Teclas Alt+F11 na janela Uses Unit selecione a UnDm.
DBNavigator com VisibleButtons: [nbFirst,nbPrior,nbNext,nbLast] datasource: Dm.DsEstados
No 2º
DBGrid
DataSource: Dm.DsEstados
No data module dê um clique duplo no ADODSEstados, isso fará abrir a janela do field editor.
No field Editor clique com o botão Direito do Mouse e selecione add all fields. Aqui existe um detalhe: quando visualizamos no DBGrid não veremos o nome do país e sim o idpais e isso pode ser incomodo para quem não sabe que 2 é o Brasil. Para acabar com isso acrescentaremos um novo field.
No field Editor clique com o botão direito, no popmenu -> New Field:
Name: NomePais
Type: String
Size: 30
Field Type: Lookup
Key Fields: IdPais
DataSet: ADODSPais
Lookup Keys: idpais
Result Field: nome
Agora selcione o Nome, sigla e nomepais e arraste-os para o panel3. Responda YES que será adicionado automaticamente a unit dm ao form.
Nota: O campo criado foi representado no form por um DBLookupComboBox.
Botão Novo
Dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=false; Panel2.Enabled:=false; Dm.ADODSEstados.Append; BtSalvar.Enabled:=True; BtCancelar.Enabled:=True; BtAlterar.Enabled:=False; BtNovo.Enabled:=False; BtExcluir.Enabled:=False; DBEdit1.ReadOnly:=False; DBEdit2.ReadOnly:=False; DBLookupComboBox1.ReadOnly:=False; DBEdit1.SetFocus;
Botão Alterar
Dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=false; Panel2.Enabled:=false; Dm.ADODSEstados.Edit; BtSalvar.Enabled:=True; BtCancelar.Enabled:=True; BtAlterar.Enabled:=False; BtNovo.Enabled:=False; BtExcluir.Enabled:=False; DBEdit1.ReadOnly:=False; DBEdit2.ReadOnly:=False; DBLookupComboBox1.ReadOnly:=False; DBEdit1.SetFocus;
No evento OnKeyUp do EditProcurar digite o seguinte:
Dm.ADODSEstados.Close; Dm.ADODSEstados.CommandText:="select * from Estados where nome LIKE " + #39 + EditProcurar.Text + "%" + #39; Dm.ADODSEstados.Open;
Botão Excluir: dê dois clicks nele e digite o seguinte código:
if MessageDlg("Esta Operação não poderá ser desfeita. Prosseguir", mtConfirmation, [mbYes, mbNo],0) = mrYes then begin MessageDlg("Deletado " + Dm.ADODSEstados.Fields[2].AsString, mtInformation, [mbOk], 0); Dm.ADODSEstados.Delete; end;
Botão Salvar - Enabled: False - dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=True; Panel2.Enabled:=True; Dm.ADODSEstados.Post; BtSalvar.Enabled:=false; BtCancelar.Enabled:=false; BtAlterar.Enabled:=true; BtNovo.Enabled:=true; BtExcluir.Enabled:=true; DBEdit1.ReadOnly:=True; DBEdit2.ReadOnly:=True; DBLookupComboBox1.ReadOnly:=true; Dm.ADODSEstados.Close; Dm.ADODSEstados.CommandText:="select * from estados" ; Dm.ADODSEstados.Open;
Botão Cancelar - Enabled: False - dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=True; Panel2.Enabled:=True; Dm.ADODSEstados.Cancel; BtSalvar.Enabled:=false; BtCancelar.Enabled:=false; BtAlterar.Enabled:=true; BtNovo.Enabled:=true; BtExcluir.Enabled:=true; DBEdit1.ReadOnly:=True; DBEdit2.ReadOnly:=True; DBLookupComboBox1.ReadOnly:=true; Dm.ADODSEstados.Close; Dm.ADODSEstados.CommandText:="select * from estados" ; Dm.ADODSEstados.Open;
A janela cadastro de Estados fica mais ou menos assim:
Na janela principal clique no menu cadastro -> tabelas Auxiliares -> Estados e digite o seguinte código:
FrmCadEstados:=TFrmCadEstados.Create(self); Try FrmCadEstados.ShowModal; Finally FrmCadEstados.Release; End;
CADASTRO DE MUNICÍPIOS
A tabela municípios possui dependência (um município pertence a um estado). Voltando a Unit Dm (data module) colocaremos mais um componente:
ADODataSet da paleta ADO
Connection: ADOConexaoPrinciapal
CommandText: select * from municipios
Name: ADODSMunicipios
Active : True
DataSource da Paleta Data Access.
DataSet: ADODSMunicipios
Name: DsMunicipios
Vamos inserir um novo form no projeto:
File -> New -> Form
No Object Inspector:
Name: FrmCadMunicipios
Caption: Cadastro de Municípios
No Evento On Activate do Form digite:
Dm.ADODSPais.Open;
Dm.ADODSEstados.Open;
Dm.ADODSMunicipios.Open;
No evento OnClose do Form digite:
Dm.ADODSPais.Close;
Dm.ADODSEstados.Close;
Dm.ADODSMunicipios.close;
Dm.ADODSMunicipios.CommandText:="select * from Municipios";
Action:=caFree;
Isto faz com que não haja erros quando abrirmos novamente a janela
Salve a unit: UnCadMunicipios
Para economizar bastante trabalho selecione, na janela Cadastro de Paises, os três panels, copie e depois cole no Form Cadastro de Municipios.
No panel1 no Botão Fechar dê dois clicks nele e digite o seguinte código:
Close;
Aperte as Teclas Alt+F11 na janela Uses Unit selecione a UnDm.
Mude o caption do Label1: Municipios
DBNavigator com VisibleButtons: [nbFirst,nbPrior,nbNext,nbLast] datasource: Dm.DsMunicipios
No 2º
DBGrid
DataSource: Dm.DsMunicipios
Options: [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit]
No data module dê um clique duplo no ADODSMunicipios. No field Editor clique com o botão Direito do Mouse e selecione add all fields clique novamente com o botão Direito do Mouse e selecione New Field.
Criaremos dois novos Campos um para o nome do estado e outro para o nome do pais.
Name: NomeEstado
Type: String
Size: 30
Field Type: Lookup
Key Fields: IdEstado
DataSet: ADODSEstados
Lookup Keys: idEstados
Result Field: nome
Name: NomePais
Type: String
Size: 30
Field Type: Lookup
Key Fields: IdEstados
DataSet: ADODSEstados
Lookup Keys: idEstados
Result Field: nomePais
Agora selecione o Nome, sigla, nomeEstado e nomepais e arraste-os para o panel3. Apague o DBLookupComboBox2 que se refere ao pais e coloque no seu lugar um DBEdit com as seguintes propriedades:
DataSource: Dm.DsMunicipios
DataField: NomePais
Selecione os DBEdit1, DBEdit2 e DBLookupComboBox1 e mude a propriedade ReadOnly para true.
Dê dois cliques no Botão Novo e digite o seguinte código:
Panel1.Enabled:=false; Panel2.Enabled:=false; Dm.ADODSMunicipios.Append; BtSalvar.Enabled:=True; BtCancelar.Enabled:=True; BtAlterar.Enabled:=False; BtNovo.Enabled:=False; BtExcluir.Enabled:=False; DBEdit1.ReadOnly:=False; DBEdit2.ReadOnly:=False; DBLookupComboBox1.ReadOnly:=False; DBEdit1.SetFocus;
Dê dois cliques no Botão Alterar e digite o seguinte código:
Panel1.Enabled:=false; Panel2.Enabled:=false; Dm.ADODSMunicipios.Edit; BtSalvar.Enabled:=True; BtCancelar.Enabled:=True; BtAlterar.Enabled:=False; BtNovo.Enabled:=False; BtExcluir.Enabled:=False; DBEdit1.ReadOnly:=False; DBEdit2.ReadOnly:=False; DBLookupComboBox1.ReadOnly:=False; DBEdit1.SetFocus;
No evento OnKeyUp do EditProcurar digite o seguinte:
Dm.ADODSMunicipios.Close; Dm.ADODSMunicipios.CommandText:="select * from municipios where nome LIKE " + #39 + EditProcurar.Text + "%" + #39; Dm.ADODSMunicipios.Open;
Botão Excluir: dê dois clicks nele e digite o seguinte código:
if MessageDlg("Esta Operação não poderá ser desfeita. Prosseguir", mtConfirmation, [mbYes, mbNo],0) = mrYes then begin MessageDlg("Deletado " + Dm.ADODSMunicipios.Fields[2].AsString, mtInformation, [mbOk], 0); Dm.ADODSMunicipios.Delete; end;
Botão Salvar - Enabled: False - dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=True; Panel2.Enabled:=True; Dm.ADODSMunicipios.Post; BtSalvar.Enabled:=false; BtCancelar.Enabled:=false; BtAlterar.Enabled:=true; BtNovo.Enabled:=true; BtExcluir.Enabled:=true; DBEdit1.ReadOnly:=True; DBEdit2.ReadOnly:=True; DBLookupComboBox1.ReadOnly:=true; Dm.ADODSMunicipios.Close; Dm.ADODSMunicipios.CommandText:="select * from Municipios" ; Dm.ADODSMunicipios.Open;
Botão Cancelar - Enabled: False - dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=True; Panel2.Enabled:=True; Dm.ADODSMunicipios.Cancel; BtSalvar.Enabled:=false; BtCancelar.Enabled:=false; BtAlterar.Enabled:=true; BtNovo.Enabled:=true; BtExcluir.Enabled:=true; DBEdit1.ReadOnly:=True; DBEdit2.ReadOnly:=True; DBLookupComboBox1.ReadOnly:=true; Dm.ADODSMunicipios.Close; Dm.ADODSMunicipios.CommandText:="select * from Municipios" ; Dm.ADODSMunicipios.Open;
A janela cadastro de Municípios fica mais ou menos assim:
Na janela principal clique no menu cadastro -> tabelas Auxiliares -> Municípios e digite o seguinte código:
FrmCadMunicipios:=TFrmCadMunicipios.Create(self); Try FrmCadMunicipios.ShowModal; Finally FrmCadMunicipios.Release; End;
CADASTRO DE ZONAS
Uma Zona pertence a um município, e mesmo que ela tenha o mesmo nome o que as diferenciará é o município a que elas pertencem.
Exemplos:
Zona Norte de São Paulo e Zona Norte do Rio de Janeiro,
Na Unit Dm (data module) colocaremos mais dois componente:
ADODataSet da paleta ADO
Connection: ADOConexaoPrinciapal
CommandText: select * from Zona
Name: ADODSZona
Active : True
DataSource da Paleta Data Access.
DataSet: ADODSZona
Name: DsZona
Vamos inserir um novo form no projeto:
File -> New -> Form
No Object Inspector:
Name: FrmCadZona
Caption: Cadastro de Zona
No Evento On Activate do Form digite:
Dm.ADODSPais.Open; Dm.ADODSEstados.Open; Dm.ADODSMunicipios.Open; Dm.ADODSZonas.Open;
No evento OnClose do Form digite:
Dm.ADODSPais.Close; Dm.ADODSEstados.Close; Dm.ADODSMunicipios.Close; Dm.ADODSZonas.Close; Dm.ADODSZonas.CommandText:="select * from Zona"; Action:=caFree;
Isto faz com que não haja erros quando abrirmos novamente a janela
Salve a unit: UnCadZonas
Para economizar bastante trabalho selecione, na janela Cadastro de Paises, os três panels, copie e depois cole no Form Cadastro de Zonas.
No panel1 no Botão Fechar dê dois clicks nele e digite o seguinte código:
Close;
Aperte as Teclas Alt+F11 para abrir a janela Use Units e selecione a UnDm.
Mude o caption do Label1: ZOnas
DBNavigator com VisibleButtons: [nbFirst,nbPrior,nbNext,nbLast] datasource: Dm.DsZonas
No 2º
DBGrid
DataSource: Dm.DsZonas
Options:[dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit]
No data module dê um clique duplo no ADODSZonas. No field Editor clique com o botão Direito do Mouse e selecione add all fields clique novamente com o botão Direito do Mouse e selecione New Field.Criaremos Três novos Campos para: nome do Município; nome do estado e; o nome do pais.
Name: NomeMunicipio
Type: String
Size: 30
Field Type: Lookup
Key Fields: IdMunicipios
DataSet: ADODSMunicipios
Lookup Keys: idMunicipios
Result Field: nome
Name: NomeEstado
Type: String
Size: 30
Field Type: Lookup
Key Fields: IdMunicipios
DataSet: ADODSMunicipios
Lookup Keys: idMunicipios
Result Field: nomeEstado
Name: NomePais
Type: String
Size: 30
Field Type: Lookup
Key Fields: IdMunicipios
DataSet: ADODSMunicipios
Lookup Keys: idMunicipios
Result Field: nomePais
Agora selcione o Nome, NomeMunicipios, nomeEstado e nomepais e arraste-os para o panel3.
Apague os DBLookupComboBox que se referem ao Estado e ao pais e coloque em seus lugares dois DBEdit com as seguintes propriedades:
DataSource: Dm.DsZonas
DataField: NomeEstado
DataSource: Dm.DsZonas
DataField: NomePais
Selecione os DBEdit1, DBEdit2, DBEdit3 e DBLookupComboBox1 e mude a propriedade ReadOnly para true.
Dê dois cliques no Botão Novo e digite o seguinte código:
Panel1.Enabled:=false; Panel2.Enabled:=false; Dm.ADODSZonas.Append; BtSalvar.Enabled:=True; BtCancelar.Enabled:=True; BtAlterar.Enabled:=False; BtNovo.Enabled:=False; BtExcluir.Enabled:=False; DBEdit1.ReadOnly:=False; DBLookupComboBox1.ReadOnly:=False; DBEdit1.SetFocus;
Dê dois cliques no Botão Alterar e digite o seguinte código:
Panel1.Enabled:=false; Panel2.Enabled:=false; Dm.ADODSZonas.Edit; BtSalvar.Enabled:=True; BtCancelar.Enabled:=True; BtAlterar.Enabled:=False; BtNovo.Enabled:=False; BtExcluir.Enabled:=False; DBEdit1.ReadOnly:=False; DBLookupComboBox1.ReadOnly:=False; DBEdit1.SetFocus;
No evento OnKeyUp do EditProcurar digite o seguinte:
Dm.ADODSZonas.Close; Dm.ADODSZonas.CommandText:="select * from Zona where descricao LIKE " + #39 + EditProcurar.Text + "%" + #39; Dm.ADODSZonas.Open;
Botão Excluir: dê dois clicks nele e digite o seguinte código:
if MessageDlg("Esta Operação não poderá ser desfeita. Prosseguir", mtConfirmation, [mbYes, mbNo],0) = mrYes then begin MessageDlg("Deletado " + Dm.ADODSZonas.Fields[2].AsString, mtInformation, [mbOk], 0); Dm.ADODSZonas.Delete; end;
Botão Salvar - Enabled: False - dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=True; Panel2.Enabled:=True; Dm.ADODSZonas.Post; BtSalvar.Enabled:=false; BtCancelar.Enabled:=false; BtAlterar.Enabled:=true; BtNovo.Enabled:=true; BtExcluir.Enabled:=true; DBEdit1.ReadOnly:=True; DBLookupComboBox1.ReadOnly:=true; Dm.ADODSZonas.Close; Dm.ADODSZonas.CommandText:="select * from Zona" ; Dm.ADODSZonas.Open;
Botão Cancelar - Enabled: False - dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=True; Panel2.Enabled:=True; Dm.ADODSZonas.Cancel; BtSalvar.Enabled:=false; BtCancelar.Enabled:=false; BtAlterar.Enabled:=true; BtNovo.Enabled:=true; BtExcluir.Enabled:=true; DBEdit1.ReadOnly:=True; DBLookupComboBox1.ReadOnly:=true; Dm.ADODSZonas.Close; Dm.ADODSZonas.CommandText:="select * from Zona" ; Dm.ADODSZonas.Open;
A janela cadastro de Zonas fica mais ou menos assim:
Na janela principal clique no menu cadastro -> tabelas Auxiliares -> Zonas e digite o seguinte código:
FrmCadZonas:=TFrmCadZonas.Create(self); Try FrmCadZonas.ShowModal; Finally FrmCadZonas.Release; End;CADASTRO DE BAIRROS
Vamos agora criar o cadastro de bairros lembrando da dependência, um Bairro pertence a uma Zona e podemos até ter bairros com o mesmo nome em zonas diferentes.
Na Unit Dm (data module) colocaremos mais um componente:
ADODataSet da paleta ADO
Connection: ADOConexaoPrinciapal
CommandText: select * from Bairro
Name: ADODSBairros
Active : True
DataSource da Paleta Data Access.
DataSet: ADODSBairros
Name: DsBairros
Vamos inserir um novo form no projeto:
File -> New -> Form
No Object Inspector:
Name: FrmCadBairro
Caption: Cadastro de Bairros
No Evento On Activate do Form digite:
Dm.ADODSPais.Open;
Dm.ADODSEstados.Open;
Dm.ADODSMunicipios.Open;
Dm.ADODSZonas.Open;
Dm.ADODSBairros.Open;
No evento OnClose do Form digite:
Dm.ADODSPais.Close;
Dm.ADODSEstados.Close;
Dm.ADODSMunicipios.Close;
Dm.ADODSZonas.Close
Dm.ADODSBairros.Close;
Dm.ADODSBairros.CommandText:="select * from Bairro";
Action:=caFree;
Isto faz com que não haja erros quando abrirmos novamente a janela.
Salve a unit: UnCadBairros
Para economizar bastante trabalho selecione, na janela Cadastro de Paises, os três panels, copie e depois cole no Form Cadastro de Bairros.
No panel1 no Botão Fechar dê dois clicks nele e digite o seguinte código:
Close;
Mude o caption do Label1 para Bairros.
DBNavigator com VisibleButtons: [nbFirst,nbPrior,nbNext,nbLast] datasource: Dm.DsBairros
Aperte as Teclas Alt+F11 para abrir a janela Use Units e selecione a UnDm.
No 2º Panel
DBGrid
DataSource: Dm.DsBairros
Options:[dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit]
No data module dê um clique duplo no ADODSBairros. No field Editor clique com o botão Direito do Mouse e selecione add all fields clique novamente com o botão Direito do Mouse e selecione New Field.
Criaremos desta vez quatro novos Campos para:
nome da Zona;
nome do Município;
nome do estado e;
o nome do pais.
Name: NomeZona
Type: String
Size: 30
Field Type: Lookup
Key Fields: IdZona
DataSet: ADODSZonas
Lookup Keys: idZona
Result Field: Descricao
Name: NomeMunicipio
Type: String
Size: 30
Field Type: Lookup
Key Fields: IdZona
DataSet: ADODSZonas
Lookup Keys: idZona
Result Field: nomeMunicipio
Name: NomeEstado
Type: String
Size: 30
Field Type: Lookup
Key Fields: IdZona
DataSet: ADODSZonas
Lookup Keys: idZona
Result Field: nomeEstado
Name: NomePais
Type: String
Size: 30
Field Type: Lookup
Key Fields: IdZona
DataSet: ADODSZonas
Lookup Keys: idZona
Result Field: nomePais
Selcione o Nome, nomeZona, NomeMunicipios, nomeEstado e nomepais e arraste-os para o panel3.
Apague os DBLookupComboBox que se referem ao Estado e ao pais e coloque em seus lugares dois DBEdit com as seguintes propriedades:
DataSource: Dm.DsBairros
DataField: NomeEstado
DataSource: Dm.DsBairros
DataField: NomePais
Selecione os DBEdit1, DBEdit2, DBEdit3, DBLookupComboBox1 e DBLookupComboBox2 e mude a propriedade ReadOnly para true.
Para o DBLookupComboBox2 mude as seguintes prorpiedades:
DataSource: Dm.DsZonas
DataField: NomeMunicipio
ListSource: Dm.DsMunicipios
ListField; Nome
KeyField: IdMunicipios
Dê um duplo Click no DBLookupComboBox2 e insira o seguinte código:
Dm.ADODSZonas.Close; Dm.ADODSZonas.CommandText:="select * from Zona where idmunicipios = " + #39 + dm.ADODSMunicipiosidmunicipios.AsString + #39; Dm.ADODSZonas.Open;
Nota: Sem este código ficariam disponiveis todas as zonas o que irá causar confusão, pois no Rio de Janeiro tem Zona Sul e em São Paulo também.
Dê dois cliques no Botão Novo e digite o seguinte código:
Panel1.Enabled:=false; Panel2.Enabled:=false; Dm.ADODSBairros.Append; BtSalvar.Enabled:=True; BtCancelar.Enabled:=True; BtAlterar.Enabled:=False; BtNovo.Enabled:=False; BtExcluir.Enabled:=False; DBEdit1.ReadOnly:=False; DBLookupComboBox1.ReadOnly:=False; DBLookupComboBox2.ReadOnly:=False; DBEdit1.SetFocus;
Dê dois cliques no Botão Alterar e digite o seguinte código:
Panel1.Enabled:=false; Panel2.Enabled:=false; Dm.ADODSBairros.Edit; BtSalvar.Enabled:=True; BtCancelar.Enabled:=True; BtAlterar.Enabled:=False; BtNovo.Enabled:=False; BtExcluir.Enabled:=False; DBEdit1.ReadOnly:=False; DBLookupComboBox1.ReadOnly:=False; DBLookupComboBox2.ReadOnly:=False; DBEdit1.SetFocus;
No evento OnKeyUp do EditProcurar digite o seguinte:
Dm.ADODSBairros.Close; Dm.ADODSBairros.CommandText:="select * from bairro where nome LIKE " + #39 + EditProcurar.Text + "%" + #39; Dm.ADODSBairros.Open;
Botão Excluir: dê dois clicks nele e digite o seguinte código:
if MessageDlg("Esta Operação não poderá ser desfeita. Prosseguir", mtConfirmation, [mbYes, mbNo],0) = mrYes then begin MessageDlg("Deletado " + Dm.ADODSBairros.Fields[2].AsString, mtInformation, [mbOk], 0); Dm.ADODSBairros.Delete; end;
Botão Salvar - Enabled: False - dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=True; Panel2.Enabled:=True; Dm.ADODSBairros.Post; BtSalvar.Enabled:=false; BtCancelar.Enabled:=false; BtAlterar.Enabled:=true; BtNovo.Enabled:=true; BtExcluir.Enabled:=true; DBEdit1.ReadOnly:=True; DBLookupComboBox1.ReadOnly:=true; DBLookupComboBox2.ReadOnly:=True; Dm.ADODSBairros.Close; Dm.ADODSBairros.CommandText:="select * from Bairro" ; Dm.ADODSBairros.Open;
Botão Cancelar - Enabled: False - dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=True; Panel2.Enabled:=True; Dm.ADODSBairros.Cancel; BtSalvar.Enabled:=false; BtCancelar.Enabled:=false; BtAlterar.Enabled:=true; BtNovo.Enabled:=true; BtExcluir.Enabled:=true; DBEdit1.ReadOnly:=True; DBLookupComboBox1.ReadOnly:=true; DBLookupComboBox2.ReadOnly:=True; Dm.ADODSBairros.Close; Dm.ADODSBairros.CommandText:="select * from Bairro" ; Dm.ADODSBairros.Open;
A janela cadastro de Bairros fica mais ou menos assim:
Na janela principal clique no menu cadastro -> tabelas Auxiliares -> Zonas e digite o seguinte código:
FrmCadBairros:=TFrmCadBairros.Create(self); Try FrmCadBairros.ShowModal; Finally FrmCadBairros.Release; End;
CADASTRO DE TIPOS DE LOGRADOUROS
Os tipos mais comuns são Rua, Estrada, travessa entre outros. Por se tratar de um conjunto definido poderíamos apenas criar um lista, porém se depois de pronto descobrirmos que faltou um tipo teremos que compilar tudo de novo com a alteração, isso não é um problema grande se estiver com o programa rodando em menos de 10 máquinas. Assim Como a tabela paises, esta tabela não possui dependências.
Voltando a Unit Dm (datamodule) colocaremos mais dois componente:
ADODataSet da paleta ADO
Connection: ADOConexaoPrincipal
CommandText: select * from TipoLogradouro
Name: ADODSTiposLogradouros
Active : True
DataSource da Paleta Data Access.
DataSet: ADODSTiposLogradouros
Name: DsTiposLogradouros
Vamos inserir um novo form no projeto:
File -> New -> Form
No Object Inspector:
Name: FrmCadTiposLogradouros
Caption: Cadastro de Tipos de Logradouros
Tecle Alt+F11 e na janela Use Unit selecione o UnDm
No Evento On Activate do Form digite:
Dm.ADODSTiposLogradouros.Open;
No evento OnClose do Form digite:
Dm.ADODSTiposLogradouros.Close;
Dm.ADODSTiposLogradouros.CommandText:="Select * From TipoLogradouro";
Action:=caFree;
Isto faz com que não haja erros quando abrirmos novamente a janela
Salve a unit: UnCadTipoLogradouros
Coloque três panel no form
No 1º
Align : AlTop
Coloque nele:
BitButton com Caption: Fechar e Name: BtFechar.
Dê dois clicks nele e digite o seguinte código:
Close;
Label com Caption: Tipos de Logradouros
Edit com Name: EditProcurar e Text: (sem Nada)
DBNavigator com VisibleButtons: [nbFirst,nbPrior,nbNext,nbLast] datasource: Dm.DsTiposLogradouros
No 3º
Align: AlBotton
No 2º
Align: AlCliente
Coloque nele um BDGrid om as seguintes prorpiedades:
DataSource: Dm. DsTiposLogradouros
Options: [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit]
Na janela do data module dê um clique duplo no ADODSTiposLogradouros, isso fará abrir a janela do field editor.
No field Editor clique com o botão Direito do Mouse e selecione add all fields. Selcione o Descricao e Abrev e arraste-os para o panel3.
Voltando ao 3º panel Coloque nele:
05 BitButton:
Caption : Novo - Name: BtNovo
Dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=false; Panel2.Enabled:=false; Dm.ADODSTiposLogradouros.Open; Dm.ADODSTiposLogradouros.Append; BtSalvar.Enabled:=True; BtCancelar.Enabled:=True; BtAlterar.Enabled:=False; BtNovo.Enabled:=False; BtExcluir.Enabled:=False; DBEdit1.ReadOnly:=False; DBEdit2.ReadOnly:=False; DBEdit1.SetFocus;
Caption : Alterar - Name: BtAlterar
Dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=false; Panel2.Enabled:=false; Dm.ADODSTiposLogradouros.Open; Dm.ADODSTiposLogradouros.Edit; BtSalvar.Enabled:=True; BtCancelar.Enabled:=True; BtAlterar.Enabled:=False; BtNovo.Enabled:=False; BtExcluir.Enabled:=False; DBEdit1.ReadOnly:=False; DBEdit2.ReadOnly:=False; DBEdit1.SetFocus;
No evento OnKeyUp do EditProcurar digite o seguinte:
Dm.ADODSTiposLogradouros.Close; Dm.ADODSTiposLogradouros.CommandText:="select * from Tipologradouro where descricao LIKE " + #39 + EditProcurar.Text + "%" + #39; Dm.ADODSTiposLogradouros.Open;
Caption : Excluir - Name: BtExcluir
Dê dois clicks nele e digite o seguinte código:
if MessageDlg("Esta Operação não poderá ser desfeita. Prosseguir", mtConfirmation, [mbYes, mbNo],0) = mrYes then begin MessageDlg("Deletado " + Dm.ADODSTiposLogradouros.Fields[1].AsString, mtInformation, [mbOk], 0); Dm.ADODSTiposLogradouros.Delete; end;
Caption : Salvar - Name: BtSalvar - Enabled: False
Dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=True; Panel2.Enabled:=True; Dm.ADODSTiposLogradouros.Post; BtSalvar.Enabled:=false; BtCancelar.Enabled:=false; BtAlterar.Enabled:=true; BtNovo.Enabled:=true; BtExcluir.Enabled:=true; DBEdit1.ReadOnly:=True; DBEdit2.ReadOnly:=True; Dm.ADODSTiposLogradouros.Close; Dm.ADODSTiposLogradouros.CommandText:="select * from TipoLogradouro" ; Dm.ADODSTiposLogradouros.Open;
Caption : Cancelar - Name: BtCancelar - Enabled: False
Dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=True; Panel2.Enabled:=True; Dm.ADODSTiposLogradouros.Cancel; BtSalvar.Enabled:=false; BtCancelar.Enabled:=false; BtAlterar.Enabled:=true; BtNovo.Enabled:=true; BtExcluir.Enabled:=true; DBEdit1.ReadOnly:=True; DBEdit2.ReadOnly:=True; Dm.ADODSTiposLogradouros.Close; Dm.ADODSTiposLogradouros.CommandText:="select * from TipoLogradouro" ; Dm.ADODSTiposLogradouros.Open;
A janela cadastro de Tipos de Logradouros fica mais ou menos assim:
Na janela principal no menu cadastro -> tabelas Auxiliares -> Tipos de Logradouros e digite o seguinte código:
FrmCadTipoLogradouros:=TFrmCadTipoLogradouros.Create(self); Try FrmCadTipoLogradouros.ShowModal; Finally FrmCadTipoLogradouros.Release; End
CADASTRO DE PREPOSIÇÃO
Voltando a Unit Dm (datamodule) colocaremos mais dois componentes:
ADODataSet da paleta ADO
Connection: ADOConexaoPrincipal
CommandText: select * from prepologradouro
Name: ADODSPrepologradouro
Active : True
DataSource da Paleta Data Access.
DataSet: ADODSPrepologradouro
Name: DsPrepologradouro
Vamos inserir um novo form no projeto:
File -> New -> Form
No Object Inspector:
Name: FrmCadPreposicao
Caption: Cadastro de Preposições
Tecle Alt+F11 e na janela Use Unit selecione o UnDm
No Evento On Activate do Form digite:
Dm.ADODSPrepoLogradouro.Open;
No evento OnClose do Form digite:
Dm.ADODSPrepoLogradouro.Close; Dm.ADODSPrepoLogradouro.CommandText:="Select * From PrepoLogradouro"; Action:=caFree;
Isto faz com que não haja erros quando abrirmos novamente a janela
Salve a unit: UnCadPreposicao
Coloque três panel no form
No 1º
Align : AlTop
Coloque nele:
BitButton com Caption: Fechar e Name: BtFechar.
Dê dois clicks nele e digite o seguinte código:
Close;
Label com Caption: Preposição
Edit com Name: EditProcurar e Text: (sem Nada)
DBNavigator com VisibleButtons: [nbFirst,nbPrior,nbNext,nbLast] datasource: Dm.DsPrepoLogradouro
No 3º
Align: AlBotton
No 2º
Align: AlCliente
Coloque nele um BDGrid om as seguintes prorpiedades:
DataSource: Dm.DsPrepoLogradouro
Options: [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit]
Na janela do data module dê um clique duplo no ADODSPrepoLogradouro, isso fará abrir a janela do field editor.
No field Editor clique com o botão Direito do Mouse e selecione add all fields. Selcione o preposicao e arraste-os para o panel3.
Voltando ao 3º panel Coloque nele:
05 BitButton:
Caption : Novo - Name: BtNovo
Dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=false; Panel2.Enabled:=false; Dm.ADODSPrepoLogradouro.Open; Dm.ADODSPrepoLogradouro.Append; BtSalvar.Enabled:=True; BtCancelar.Enabled:=True; BtAlterar.Enabled:=False; BtNovo.Enabled:=False; BtExcluir.Enabled:=False; DBEdit1.ReadOnly:=False; DBEdit1.SetFocus;
Caption : Alterar - Name: BtAlterar
Dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=false; Panel2.Enabled:=false; Dm.ADODSPrepoLogradouro.Open; Dm.ADODSPrepoLogradouro.Edit; BtSalvar.Enabled:=True; BtCancelar.Enabled:=True; BtAlterar.Enabled:=False; BtNovo.Enabled:=False; BtExcluir.Enabled:=False; DBEdit1.ReadOnly:=False; DBEdit1.SetFocus;
No evento OnKeyUp do EditProcurar digite o seguinte:
Dm.ADODSPrepoLogradouro.Close; Dm.ADODSPrepoLogradouro.CommandText:="select * from Prepologradouro where preposicao LIKE " + #39 + EditProcurar.Text + "%" + #39; Dm.ADODSPrepoLogradouro.Open;
Caption : Excluir - Name: BtExcluir
Dê dois clicks nele e digite o seguinte código:
if MessageDlg("Esta Operação não poderá ser desfeita. Prosseguir", mtConfirmation, [mbYes, mbNo],0) = mrYes then begin MessageDlg("Deletado " + Dm.ADODSPrepoLogradouro.Fields[1].AsString, mtInformation, [mbOk], 0); Dm.ADODSPrepoLogradouro.Delete; end;
Caption : Salvar - Name: BtSalvar - Enabled: False
Dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=True; Panel2.Enabled:=True; Dm.ADODSPrepoLogradouro.Post; BtSalvar.Enabled:=false; BtCancelar.Enabled:=false; BtAlterar.Enabled:=true; BtNovo.Enabled:=true; BtExcluir.Enabled:=true; DBEdit1.ReadOnly:=True; Dm.ADODSPrepoLogradouro.Close; Dm.ADODSPrepoLogradouro.CommandText:="select * from PrepoLogradouro" ; Dm.ADODSPrepoLogradouro.Open;
Caption : Cancelar - Name: BtCancelar - Enabled: False
Dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=True; Panel2.Enabled:=True; Dm.ADODSPrepoLogradouro.Cancel; BtSalvar.Enabled:=false; BtCancelar.Enabled:=false; BtAlterar.Enabled:=true; BtNovo.Enabled:=true; BtExcluir.Enabled:=true; DBEdit1.ReadOnly:=True; Dm.ADODSPrepoLogradouro.Close; Dm.ADODSPrepoLogradouro.CommandText:="select * from PrepoLogradouro" ; Dm.ADODSPrepoLogradouro.Open;
A janela cadastro de Tipos de Logradouros fica mais ou menos assim:
Na janela principal no menu cadastro -> tabelas Auxiliares -> Tipos de Logradouros e digite o seguinte código:
FrmCadPreposicao:=TFrmCadPreposicao.Create(self); Try FrmCadPreposicao.ShowModal; Finally FrmCadPreposicao.Release; EndCADASTRO DE TITULOS DE NOBREZA
Voltando a Unit Dm (datamodule) colocaremos mais dois componentes:
ADODataSet da paleta ADO
Connection: ADOConexaoPrincipal
CommandText: select * from Titulologradouro
Name: ADODSTitulologradouro
Active : True
DataSource da Paleta Data Access.
DataSet: ADODSTitulologradouro
Name: DsTitulologradouro
Vamos inserir um novo form no projeto:
File -> New -> Form
No Object Inspector:
Name: FrmCadTitulos
Caption: Cadastro de Títulos de Nobreza
Tecle Alt+F11 e na janela Use Unit selecione o UnDm
No Evento On Activate do Form digite:
Dm. ADODSTitulologradouro.Open;
No evento OnClose do Form digite:
Dm.ADODSTitulologradouro.Close;
Dm.ADODSTitulologradouro.CommandText:="Select * From TutuloLogradouro";
Action:=caFree;
Isto faz com que não haja erros quando abrirmos novamente a janela
Salve a unit: UnCadTitulos
Coloque três panel no form
No 1º
Align : AlTop
Coloque nele:
BitButton com Caption: Fechar e Name: BtFechar.
Dê dois clicks nele e digite o seguinte código:
Close;
Label com Caption: Titulo
Edit com Name: EditProcurar e Text: (sem Nada)
DBNavigator com VisibleButtons: [nbFirst,nbPrior,nbNext,nbLast] datasource: Dm.DsTituloLogradouro
No 3º
Align: AlBotton
No 2º
Align: AlCliente
Coloque nele um BDGrid om as seguintes prorpiedades:
DataSource: Dm.DsTituloLogradouro
Options: [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit]
Na janela do data module dê um clique duplo no ADODSTituloLogradouro, isso fará abrir a janela do field editor.
No field Editor clique com o botão Direito do Mouse e selecione add all fields. Selcione o titulo e Abrev e arraste-os para o panel3.
Voltando ao 3º panel Coloque nele:
05 BitButton:
Caption : Novo - Name: BtNovo
Dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=false; Panel2.Enabled:=false; Dm.ADODSTituloLogradouro.Open; Dm.ADODSTituloLogradouro.Append; BtSalvar.Enabled:=True; BtCancelar.Enabled:=True; BtAlterar.Enabled:=False; BtNovo.Enabled:=False; BtExcluir.Enabled:=False; DBEdit1.ReadOnly:=False; DBEdit2.ReadOnly:=False; DBEdit1.SetFocus;
Caption : Alterar - Name: BtAlterar
Dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=false; Panel2.Enabled:=false; Dm.ADODSTituloLogradouro.Open; Dm.ADODSTituloLogradouro.Edit; BtSalvar.Enabled:=True; BtCancelar.Enabled:=True; BtAlterar.Enabled:=False; BtNovo.Enabled:=False; BtExcluir.Enabled:=False; DBEdit1.ReadOnly:=False; DBEdit2.ReadOnly:=False; DBEdit1.SetFocus;
No evento OnKeyUp do EditProcurar digite o seguinte:
Dm.ADODSTituloLogradouro.Close; Dm.ADODSTituloLogradouro.CommandText:="select * from TituloLogradouro where titulo LIKE " + #39 + EditProcurar.Text + "%" + #39; Dm.ADODSTituloLogradouro.Open;
Caption : Excluir - Name: BtExcluir
Dê dois clicks nele e digite o seguinte código:
if MessageDlg("Esta Operação não poderá ser desfeita. Prosseguir", mtConfirmation, [mbYes, mbNo],0) = mrYes then begin MessageDlg("Deletado " + Dm.ADODSTituloLogradouro.Fields[1].AsString, mtInformation, [mbOk], 0); Dm.ADODSTituloLogradouro.Delete; end;
Caption : Salvar - Name: BtSalvar - Enabled: False
Dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=True; Panel2.Enabled:=True; Dm.ADODSTituloLogradouro.Post; BtSalvar.Enabled:=false; BtCancelar.Enabled:=false; BtAlterar.Enabled:=true; BtNovo.Enabled:=true; BtExcluir.Enabled:=true; DBEdit1.ReadOnly:=True; DBEdit2.ReadOnly:=True; Dm.ADODSTituloLogradouro.Close; Dm.ADODSTituloLogradouro.CommandText:="select * from tituloLogradouro" ; Dm.ADODSTituloLogradouro.Open;
Caption : Cancelar - Name: BtCancelar - Enabled: False
Dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=True; Panel2.Enabled:=True; Dm.ADODSTituloLogradouro.Cancel; BtSalvar.Enabled:=false; BtCancelar.Enabled:=false; BtAlterar.Enabled:=true; BtNovo.Enabled:=true; BtExcluir.Enabled:=true; DBEdit1.ReadOnly:=True; DBEdit2.ReadOnly:=True; Dm.ADODSTituloLogradouro.Close; Dm.ADODSTituloLogradouro.CommandText:="select * from tituloLogradouro" ; Dm.ADODSTituloLogradouro.Open;
A janela cadastro de Tipos de Logradouros fica mais ou menos assim:
Na janela principal no menu cadastro -> tabelas Auxiliares -> Tipos de Logradouros e digite o seguinte código:
FrmCadTitulos:=TFrmCadTitulos.Create(self); Try FrmCadTitulos.ShowModal; Finally FrmCadTitulos.Release; End
CADASTRO DE LOGRADOUROS
Agora começaremos a preparar o cadastro que tem a finalidade principal deste módulo, o cadastro de logradouros. Como já foram preparadas todas as tabelas auxiliares, não haverá grandes dificuldades para esta, vejamos:
Como sempre, na Unit Dm (datamodule) colocaremos mais dois componentes:
ADODataSet da paleta ADO
Connection: ADOConexaoPrincipal
CommandText: select * from logradouros
Name: ADODSlogradouros
Active : True
DataSource da Paleta Data Access.
DataSet: ADODSLogradouros
Name: DsLogradouros
Aqui são necessários alguns ajustes: para começar teremos que criar alguns campos no ADODSLogradouros. Na janela do Data Module dê dois cliques no ADODSLogradouros, no field Editor tecle Crtl+N para abrir a janela new field:
1º campo
Name: Titulo
Type: String
Size: 30
Field Type: Lookup
Key Field: IdTituloLogradouro
DataSet: ADODSTituloLogradouro
Lookup Keys: idtitulologradouro
Result Field: Titulo
2º campo
Name: Preposicao
Type: String
Size: 5
Field Type: Lookup
Key Field: IdPrepoLogradouro
DataSet: ADODSPrepoLogradouro
Lookup Keys: idPrepologradouro
Result Field: Preposicao
3º campo
Name: TipoLogradouro
Type: String
Size: 15
Field Type: Lookup
Key Field: IdTipoLogradouro
DataSet: ADODSTiposLogradouros
Lookup Keys: idTipologradouro
Result Field: Descricao
4º campo
Name: Bairro
Type: String
Size: 30
Field Type: Lookup
Key Field: IdBairro
DataSet: ADODSBairros
Lookup Keys: idBairro
Result Field: nome
Vamos inserir um novo form no projeto:
File -> New -> Form
No Object Inspector:
Name: FrmCadLogradouros
Caption: Cadastro de Logradouros
Tecle Alt+F11 e na janela Use Unit selecione o UnDm
No Evento On Activate do Form digite:
Dm.ADODSPais.Open; Dm.ADODSEstados.Open; Dm.ADODSMunicipios.Open; Dm.ADODSZonas.Open; Dm.ADODSBairros.Open; Dm.ADODSPrepoLogradouro.Open; Dm.ADODSTiposLogradouros.Open; Dm.ADODSTituloLogradouro.Open; Dm.ADODSlogradouros.Open;
No evento OnClose do Form digite:
Dm.ADODSPais.Close; Dm.ADODSEstados.Close; Dm.ADODSMunicipios.Close; Dm.ADODSZonas.Close Dm.ADODSBairros.Close; Dm.ADODSPrepoLogradouro.Close; Dm.ADODSTiposLogradouros.Close; Dm.ADODSTituloLogradouro.Close; Dm.ADODSlogradouros.Close; Dm.ADODSlogradouros.CommandText:="Select * From Logradouros"; Action:=caFree;
Isto faz com que não haja erros quando abrirmos novamente a janela
Salve a unit: UnCadLogradouros
Coloque três panel no form
No 1º
Align : AlTop
Coloque nele:
BitButton com Caption: Fechar e Name: BtFechar.
Dê dois clicks nele e digite o seguinte código:
Close;
Coloque um RadioGroup com Caption: Procurar por
Columns: 2
Items:
Nome
CEP
ItemIndex: 0 (zero)
Nota: Desta forma poderemos fazer a procura pelo Nome ou pelo CEP.
Edit com Name: EditProcurar e Text: (sem Nada)
DBNavigator com VisibleButtons: [nbFirst,nbPrior,nbNext,nbLast] datasource: Dm.DsLogradouros
No 3º
Align: AlBotton
No 2º
Align: AlCliente
Coloque nele um BDGrid om as seguintes prorpiedades:
DataSource: Dm.DsLogradouros
Options: [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit]
Na janela do data module dê um clique duplo no ADODSTituloLogradouro, isso fará abrir a janela do field editor.
No field Editor clique com o botão Direito do Mouse e selecione add all fields. Selcione nome, CEP, Distancia, titulo, preposição, Tipologradouro e bairro e arraste-os para o panel3.
Voltando ao 3º panel Coloque nele:
05 BitButton:
Caption : Novo - Name: BtNovo
Dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=false; Panel2.Enabled:=false; Dm.ADODSLogradouros.Open; Dm.ADODSLogradouros.Append; BtSalvar.Enabled:=True; BtCancelar.Enabled:=True; BtAlterar.Enabled:=False; BtNovo.Enabled:=False; BtExcluir.Enabled:=False; DBEdit1.ReadOnly:=False; DBEdit2.ReadOnly:=False; DBEdit3.ReadOnly:=False; DBLookupComboBox1.ReadOnly:=False; DBLookupComboBox2.ReadOnly:=False; DBLookupComboBox3.ReadOnly:=False; DBLookupComboBox4.ReadOnly:=False; DBLookupComboBox3.SetFocus;
Caption : Alterar - Name: BtAlterar
Dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=false; Panel2.Enabled:=false; Dm.ADODSLogradouros.Open; Dm.ADODSLogradouros.Edit; BtSalvar.Enabled:=True; BtCancelar.Enabled:=True; BtAlterar.Enabled:=False; BtNovo.Enabled:=False; BtExcluir.Enabled:=False; DBEdit1.ReadOnly:=False; DBEdit2.ReadOnly:=False; DBEdit3.ReadOnly:=False; DBLookupComboBox1.ReadOnly:=False; DBLookupComboBox2.ReadOnly:=False; DBLookupComboBox3.ReadOnly:=False; DBLookupComboBox4.ReadOnly:=False; DBLookupComboBox3.SetFocus;
No evento OnKeyUp do EditProcurar digite o seguinte:
If RadioGroup1.ItemIndex = 0 Then Begin Dm.ADODSLogradouros.Close; Dm.ADODSLogradouros.CommandText:="select * from Logradouros where nome LIKE " + #39 + EditProcurar.Text + "%" + #39; Dm.ADODSLogradouros.Open; End; If RadioGroup1.ItemIndex = 1 Then Begin Dm.ADODSLogradouros.Close; Dm.ADODSLogradouros.CommandText:="select * from Logradouros where CEP LIKE " + #39 + EditProcurar.Text + "%" + #39; Dm.ADODSLogradouros.Open; End;
No evento OnClick do RadioGroup digite o seguinte:
Dm.ADODSLogradouros.Close; Dm.ADODSLogradouros.CommandText:="select * from Logradouros" ; Dm.ADODSLogradouros.Open; EditProcurar.Text:=""; EditProcurar.SetFocus;
Nota:Perceba que a procura atende a uma condição.
Caption : Excluir - Name: BtExcluir
Dê dois clicks nele e digite o seguinte código:
if MessageDlg("Esta Operação não poderá ser desfeita. Prosseguir", mtConfirmation, [mbYes, mbNo],0) = mrYes then begin MessageDlg("Deletado " + Dm.ADODSLogradourosnome.AsString, mtInformation, [mbOk], 0); Dm.ADODSLogradouros.Delete; end;
Caption : Salvar - Name: BtSalvar - Enabled: False
Dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=True; Panel2.Enabled:=True; Dm.ADODSLogradouros.Post; BtSalvar.Enabled:=false; BtCancelar.Enabled:=false; BtAlterar.Enabled:=true; BtNovo.Enabled:=true; BtExcluir.Enabled:=true; DBEdit1.ReadOnly:=True; DBEdit2.ReadOnly:=True; DBEdit3.ReadOnly:=True; DBLookupComboBox1.ReadOnly:=True; DBLookupComboBox2.ReadOnly:=True; DBLookupComboBox3.ReadOnly:=True; DBLookupComboBox4.ReadOnly:=True; Dm.ADODSLogradouros.Close; Dm.ADODSLogradouros.CommandText:="select * from Logradouros" ; Dm.ADODSLogradouros.Open;
Caption : Cancelar - Name: BtCancelar - Enabled: False
Dê dois clicks nele e digite o seguinte código:
Panel1.Enabled:=True; Panel2.Enabled:=True; Dm.ADODSLogradouros.Cancel; BtSalvar.Enabled:=false; BtCancelar.Enabled:=false; BtAlterar.Enabled:=true; BtNovo.Enabled:=true; BtExcluir.Enabled:=true; DBEdit1.ReadOnly:=True; DBEdit2.ReadOnly:=True; DBEdit3.ReadOnly:=True; DBLookupComboBox1.ReadOnly:=True; DBLookupComboBox2.ReadOnly:=True; DBLookupComboBox3.ReadOnly:=True; DBLookupComboBox4.ReadOnly:=True; Dm.ADODSLogradouros.Close; Dm.ADODSLogradouros.CommandText:="select * from Logradouros" ; Dm.ADODSLogradouros.Open;
A janela cadastro de Logradouros fica mais ou menos assim:
Na janela principal no menu cadastro -> tabelas Auxiliares -> Tipos de Logradouros e digite o seguinte código:
FrmCadLogradouros:=TFrmCadLogradouros.Create(self); Try FrmCadLogradouros.ShowModal; Finally FrmCadLogradouros.Release; End;
Agora para agilizar a execução do programa vá em Project -> options e na aba Froms deixe apenas o frmPrincipal e a DM no lado Auto-create forms.
O cadastro de logradouros está concluído agora vamos mostrar na tela principal uma utilidade para está aplicação.
No form principal coloque componente panel apague o captionde cada um. A propriedade Align do primeiro para alTop, do segundo para alBotton e do terceiro para alClient.
Coloque no primeiro panel:
RadioGroup
Caption: Procurar Por
Columns: 2
Items:
Nome
CEP
ItemIndex: 0(zero)
Edit:
Name: Procurar
Text: (Sem Nada)
DBNavigator
Datasource: Dm.DsLogradouros
VisibleButtons: [nbFirst,nbPrior,nbNext,nbLast]
No Panel do meio coloque um DBGrid com as seguintes propriedades:
Align: alClient
Datasource: Dm.DsLogradouros
ReadOnly: True
Options: [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit]
No Panel de Baixo Coloque um Memo com Name: MemoEndereco para mostrar a impressão do endereço.
No evento OnClick do RadioGroup1 digite o seguinte:
Dm.ADODSLogradouros.Close; Dm.ADODSLogradouros.CommandText:="select * from Logradouros" ; Dm.ADODSLogradouros.Open; EditProcurar.Text:=""; EditProcurar.SetFocus;
No evento OnKeyUp do EditProcurar digite o seguinte:
If RadioGroup1.ItemIndex = 0 Then Begin Dm.ADODSLogradouros.Close; Dm.ADODSLogradouros.CommandText:="select * from Logradouros where nome LIKE " + #39 + EditProcurar.Text + "%" + #39; Dm.ADODSLogradouros.Open; End; If RadioGroup1.ItemIndex = 1 Then Begin Dm.ADODSLogradouros.Close; Dm.ADODSLogradouros.CommandText:="select * from Logradouros where CEP LIKE " + #39 + EditProcurar.Text + "%" + #39; Dm.ADODSLogradouros.Open; End;
Para facilitar ao final da UnPrincipal antes do Ultimo End( o que vem seguido de ponto) digite a seguinte procedure:
Procedure MontaEtiqueta(); Var Endereco : String; localiza : String; MemCEP : String; begin {Limpa A Anterior} FrmPrincipal.memoendereco.Clear; Endereco:=Trim(dm.ADODSLogradourosTipoLogradouro.AsString)+" "; If length(Dm.ADODSLogradourosTitulo.AsString)> 0 then Endereco:=Endereco+Trim(dm.ADODSLogradourosTitulo.AsString)+" "; if length(Dm.ADODSLogradourosPreposicao.AsString)> 0 Then Endereco:=Endereco+Trim(dm.ADODSLogradourosPreposicao.AsString)+" "; if length(Dm.ADODSLogradourosCEP.AsString)> 0 Then MemCEP:=dm.ADODSLogradourosCEP.AsString; dm.ADODSBairros.open; dm.ADODSBairros.Filter:="idbairro = "+ quotedstr(dm.ADODSLogradourosidbairro.AsString); dm.ADODSBairros.Filtered:=True; dm.ADODSEstados.open; dm.ADODSEstados.Filter:="nome = "+ quotedstr(dm.ADODSBairrosNomeEstado.AsString); dm.ADODSEstados.Filtered:=True; localiza:=dm.ADODSLogradourosBairro.AsString +" - "; localiza:=localiza + Dm.ADODSBairrosNomeMunicipio.AsString + " - " + Dm.ADODSEstadossigla.AsString; FrmPrincipal.memoEndereco.Lines.Add( endereco + dm.ADODSLogradourosnome.AsString); FrmPrincipal.memoEndereco.Lines.Add( localiza ); FrmPrincipal.memoEndereco.Lines.add( MemCEP ); dm.ADODSBairros.Filtered:=False; dm.ADODSEstados.Filtered:=False; End;
Após digitada a nova procedure deve ser declarada na seção var:
var FrmPrincipal: TFrmPrincipal; Procedure MontaEtiqueta(); implementation uses UnCadPaises, UnCadEstados, UnCadMunicipios, UnCadZonas, UnCadBairros, UnCadTiposLogradouros, UnCadPreposicao, UnCadTitulos, UnDm, UnCadLogrdouros; {$R *.dfm}
Nota: Este procedimento é padrão para as procedures criadas pelo programador.
No evento OnCellClick do Grid digite o seguinte:
MontaEtiqueta();
No evento OnClick do DBNavigator digite o mesmo:
MontaEtiqueta();
A tela principal ficará mais ou menos assim:
Quando Clicarmos num endereço no grid, o memo mostrará uma etiqueta com o endereço.
FINALIZAÇÃO
Embora utilizamos apenas recursos básicos, sem muitas instruções SQL ou outras mais complexas, seguidos os conceitos aqui expressos, podem ser feitos aplicativos com outras finalidades. Espero ter ajudado.