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 Costa



INTRODUÇÃ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:
    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;
      End
     
    CADASTRO 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.
  • Marcos Brivio da Costa

    Marcos Brivio da Costa