Hunter Mapinfo Network VBA Automation

terça-feira, 27 de abril de 2010 20:00:00 Categories: Access Hunter Mapbasic Mapinfo
Rate this Content 0 Votes

No tutorial anterior, tivemos o nosso primeiro contato com o Mapinfo e o Mapbasic. Tivemos uma breve introdução ao Mapinfo, e também como utilizar o Mapbasic – sua linguagem de programação sem ter o Mapbasic instalado. Embora em breve veremos uma série de programas Mapbasic, hoje vamos aproveitar a oportunidade e ainda não vamos utilizar o Mapbasic propriamente dito, através da interface de seu programa. Alternativamente, vamos aprender um novo conceito que já pode ser aprendido, e que também utilizaremos bastante, não só com o Mapinfo: automação, ou manipulação outras aplicações através do VBA!

 

 

 

Objetivo

A partir das informações dos dados de nossa rede, plotar os dados de Sites e Setores no Mapinfo, da mesma forma que fizemos no tutorial anterior. Desta vez, porém, faremos tudo sem sequer abrir o Mapinfo (pelo menos manualmente).

Observação: Na grande maioria dos tutoriais temos os arquivos relacionados, e que são enviados para os Assinantes.

  • Se você é um Assinante, por favor, verifique em seu e-mail o arquivo Blog_007_Hunter_Mapinfo_Network_VBA_Automation.zip. Utilize o suporte para qualquer dúvida ou problema que encontrar.
  • Se você é um Membro, e tem acesso ao tutorial escrito, aprenderá sempre conceitos muito importantes que com certeza vão lhe ajudar em seus próprios desenvolvimentos. Você comprovará em cada novo tutorial!

 

Estrutura de Arquivos

Como a estrutura do módulo Hunter MI Network já foi criada anteriormente, não há novos diretórios a serem criados – a nossa estrutura de diretórios já está criada.

 

Manipulando outros programas: Automação

Pode até parecer complicado, mas não é. Através do VBA podemos abrir, fazer alterações e fechar outros programas. Vamos ver e utilizar bastante essa funcionalidade, por exemplo, para criar planilhas com gráficos no Excel a partir de um banco de dados.

E quais são as vantagens? Bom, isto ficará mais claro mais adiante. De qualquer forma, vamos tentar perceber essas vantagens através de um exemplo.

Temos os dados de nossa rede em nossa tabela do banco de dados Network. Já vimos quais os comandos do Mapbasic/Mapinfo que precisamos usar, como CreatePoints() e CreateLines(). Então, através de um único código, vamos criar as tabelas Sites.TAB e Sectors.TAB para o Mapinfo. Em outras palavras: vamos dar um único clique e criar nossa rede no Mapinfo!

A forma manual de fazer é abrir o Mapinfo, abrir cada uma das tabelas de dados – Sites e Sectors, criar os pontos para cada uma delas, criando o campo objeto georeferenciado, e no caso dos setores, criar as linhas. Salvar e fechar. Fazendo isso, temos então as tabelas desejadas.

E pelo código, é da mesma forma – só que não precisamos fazer nada manualmente!

Vamos ver então como é?

 

Arquivos do Mapinfo

Antes de aprender como fazer via código, precisamos saber o que vamos criar. Quando você vê um arquivo do tipo DOC, já sabe que é um tipo de arquivo que contém texto, e que pode ser aberto pelo Microsoft Word não é mesmo? Pois bem, o Mapinfo tem uma série de tipos de arquivos, e devemos estar familiarizados com os mesmos.

  • TAB: tipo de arquivo básico, define uma tabela do Mapinfo.
  • MAP: tipo de arquivo que contém as coordenadas dos dados.
  • DAT: tipo de arquivo com os atributos dos dados.
  • ID: um arquivo do tipo índice que contém os links entre os objetos do arquivo MAP e os atributos do arquivo DAT.

Como é de se imaginar, para cada arquivo TAB teremos os arquivos correspondentes MAP, DAT e ID. No caso de Sites: Sites.TAB, Sites.DAT, Sites.MAP e Sites.ID.

Nota: Todos os arquivos só funcionam juntos. Ou seja, não adianta ter apenas o arquivo TAB e apagar um deles: você não conseguirá abrir os dados no Mapinfo. Da mesma forma, se for enviar para alguém, lembre-se de enviar todos.

Existem outros tipos de arquivo que o Mapinfo lê/utiliza (como o IND), mas veremos apenas esses por enquanto.

Vamos terminar falando apenas de um tipo de arquivo que vimos de maneira breve anteriormente – o tipo Workspace.

  • WOR: tipo de arquivo Área de Trabalho, que salva as informações da localização das tabelas e mapas abertos.

É importante que você salve todas as tabelas e mapas que você manipular antes de sair do Mapinfo, mesmo que você salve a Workspace. Isso porque se você apagar a Workspace não implica em perda de dados, pois as tabelas que foram utilizadas permanecem inalteradas. Porém mapas, gráficos, layouts e afins serão perdidos se não forem individualmente salvos. Mas não se preocupe, pois se houver alguma tabela não salva no momento em que você fechar o Mapinfo, o mesmo vai te perguntar através de uma caixa de diálogo, e aí você decide se deseja salvar ou não.

 

Gerando nossos arquivos pelo VBA

Vistos alguns conceitos, vamos partir para a ação, e ver como são gerados os arquivos do tutorial anterior, mas agora de forma automática!

O código está totalmente comentado, e você pode acompanhar pelo mesmo.

A primeira ação importante é criar um Objeto do Mapinfo (mais ou menos como se carregássemos o programa Mapinfo na memória!). Para isso, usamos a função CreateObject, conforme abaixo.

 

Após esse comando ser executado, o Mapinfo já fica na memória. A partir de agora, utilizando a sintaxe objMapinfo.Do podemos executar qualquer comando no Mapinfo.

No caso, a primeira coisa que fazemos é montar a string strSQLCreateTable com a sintaxe para criar a tabela de acordo com os dados que desejamos que ela tenha. E executamos o código.

 

Nota: Para referência da sintaxe de cada um destes comandos, podemos consultar o arquivo de ajuda do Mapbasic, como mostra a figura abaixo. Se você ainda não tem o Mapbasic instalado e não é Assinante, pode encontrar facilmente essas sintaxes utilizando o Google. Para cada um dos comandos é mostrada a sintaxe, e também um exemplo para facilitar o entendimento.

 

Após executarmos esse comando, o nosso arquivo TAB é criado. O arquivo do tipo TAB pode ser aberto com qualquer editor de texto, como por exemplo, o Bloco de Notas.

 

Também já foi criado automaticamente o arquivo DAT, em branco. Embora também possamos utilizar o Bloco de Notas para ver os dados do mesmo, ele não é editável!

 

Observe que até agora criamos a tabela, mas não os dados. Portanto, através de um Recordset do Access – conceito que já vimos anteriormente – montamos a string strSQLInsertINTO contendo os dados de cada registro de nossa tabela e inserimos na tabela que acabamos de criar no Mapinfo, executando o código abaixo.

 

Após percorrermos todo o recordset, e inserirmos todos os dados na tabela do Mapinfo, o nosso arquivo DAT fica completo. Como mencionamos anteriormente, dá pra ver que tem dados, mas não dá para editar.

 

Com a tabela aberta, nos resta agora criar os pontos. Para isso, montamos a string strSQLCreatePoints com a sintaxe adequada, e executamos o código.

 

Após os pontos terem sido criados, temos agora os arquivos do tipo MAP e do tipo ID. Esses também podem ser visualizados pelo Bloco de Notas, mostrando que têm dados, mas não dá pra fazer nada além disso com o mesmo.

 

Para finalizar, salvamos e fechamos a nossa tabela. Para isso, utilizamos os comandos Commit Table e Close Table do Mapbasic.

 

Nota: no comando acima a string strFileName contém o nome da nossa tabela (Sites no momento).

Para o caso da tabela Sites, o trabalho já está pronto. Agora para a tabela Sectors, o processo é praticamente o mesmo. Temos apenas um comando a mais, para criar os setores.

Assim, no caso da tabela Sectors, montamos a string strSQLCreateLines e executamos como mostrado a seguir.

 

Por fim, fechamos o objeto Mapinfo.

 

Área de trabalho

Como vimos rapidamente no tutorial anterior, o tipo de arquivo Área de Trabalho (WOR) contém as informações da nossa Área de Trabalho, como a localização das tabelas. Fica mais fácil entender isso se abrirmos o mesmo utilizando o Bloco de Notas.

Clique com o botão direito no arquivo Mapinfo_Network.wor, localizado na pasta Data deste módulo (MI Network) e escolha Abrir com... Bloco de Notas.

Todas as propriedades da Área de Trabalho podem ser inspecionadas, e são bem intuitivas.

Destaque no momento para as linhas que começam com Open Table (1). Essas linhas indicam quais tabelas devem ser abertas. Observe que não temos o caminho nesse caso, porque salvamos a Área de Trabalho no mesmo diretório onde se encontram as tabelas. Se alguma das tabelas estiver localizada em algum outro local, o caminho completo aparecerá. (Por exemplo “C:\Sites.tab” ‘movermos a tabela Sites para a raiz do C:\).

E também para as linhas Set Map Layer (2), que altera os atributos padrão dos gráficos.

 

Observe que a Área de Trabalho define as propriedades de todos os elementos através de sintaxes como Global Pen (1,2,0) Brush (2,16777215,16777215) Symbol (35,0,12), etc. Nesse caso, são as propriedades padrão de cada elemento, pois simplesmente salvamos essa Área de Trabalho no tutorial anterior, sem fazer nenhuma alteração.

Então vamos fazer o seguinte: abrir as duas tabelas – primeiro abrir a tabela Sectors e em seguida a tabela Sites, e fazer algumas alterações através da interface do programa Mapinfo para ver como fica a nossa nova Área de Trabalho.

Primeiro, vamos alterar o símbolo padrão dos sites para um pequeno círculo preenchido de azul. Clique com o botão direito no Mapa, e Escolha Controle de Camadas (1).

 

Na janela do Controle de Camadas, vamos alterar o Símbolo dos Sites para um círculo preenchido com a cor Vermelha. Então, primeiro selecione essa camada (1), clique no botão Display (2), marque a opção Style Override (3) e clique no botão com uma estrela (4). Em Cor escolha a Vermelha (5), e em Símbolo escolha o círculo (6). Para terminar, clique no botão OK de cada janela aberta. Só não clique ainda no botão OK da janela do Controle de Camadas.

 

Então, ainda na janela do Controle de Camadas, vamos alterar a Linha dos Setores para a cor Azul e a espessura para 4. Então, primeiro selecione essa camada (1), clique no botão Display (2), marque a opção Style Override (3) e clique no botão com um X (4). Em Cor escolha o Azul (5) e em Espessura (6) escolha 4.

 

Para terminar, clique no botão OK de cada janela aberta, inclusive da janela do Controle de Camadas, pois acabamos nossas edições.

O resultado então é mostrado a seguir.

 

Só um detalhe: como abrimos primeiro a tabela Sectors e depois a tabela Sites, esta é a ordem em que as camadas apareceram. Então, só para finalizar, selecione a camada Sites e clique no botão Acima (1), fazendo com que a mesma apareça em primeiro lugar. Dica: você pode também arrastar a camada para cima.

 

Agora sim, veja como ficou muito mais apresentável a nossa Área de Trabalho.

 

Para concluir este item sobre Área de Trabalho no Mapinfo, salve esta nova Área de Trabalho como Hunter_MI_Network.wor, no diretório Data deste módulo.

Abra este arquivo com o Bloco de Notas, e perceba as diferenças. Veja como eram os atributos padrão antes: Global Pen (1,2,0) Brush (2,16777215,16777215) Symbol (35,0,12) Line (1,2,0) Font ("Arial",0,9,0).

Para os Sites, alteramos o símbolo padrão para um Círculo (34) Vermelho (16711680).

  • Original: Symbol (35,0,12)
  • Novo: Symbol (34,16711680,12)

Para os Setores, alteramos a linha padrão para uma linha Azul (255) de Espessura 4 (4).

  • Original: Line (1,2,0)
  • Novo: Line (4,2,255)

Finalizando, as alterações que fizemos na Área de Trabalho foram gravadas no arquivo WOR. Podemos editar esse arquivo – desde que saibamos exatamente o que estamos fazendo – e obter o mesmo resultado. Como exemplo, abra o arquivo WOR com o Bloco de Notas, e altere a sentença Line (4,2,255) para Line (7,2,65280). Veja o resultado.

 

Conclusão

Neste tutorial aprendemos que podemos referenciar outros programas através do VBA e executar as nossas alterações. No caso, aproveitando os conceitos do tutorial anterior, criamos duas tabelas do Mapinfo através dos dados armazenados na nossa tabela do Access, e criamos pontos para uma (Sites) e linhas de setores para outra (Sectors). Essa automação será usada em outros tutoriais, e apresenta diversas vantagens, como por exemplo gerar os dados de saída sem praticamente intervenção nenhuma.

Também conhecemos alguns novos conceitos do Mapinfo, e aprendemos que os arquivos do tipo Área de Trabalho podem ser editados através de um editor de texto como o Bloco de Notas.

Embora nesse caso específico a automação do Access-Mapinfo tenha sido suficiente, a utilização de programas compilados com o Mapbasic também são muito importantes, principalmente quando trabalharmos com dados usando a interface do Mapinfo. Esses programas executáveis do Mapbasic serão vistos em breve.

Esperamos que você tenha gostado. Tire suas eventuais dúvidas postando seus comentários no Blog ou através do nosso Suporte através do Chat ou E-mail.

Até nosso próximo encontro, e lembre-se: O seu sucesso é o nosso sucesso!