Editar consulta

O Modo de edição de consulta permite criar e editar uma consulta de banco de dados.

Para acessar este comando...

Em uma janela de arquivo de banco de dados, clique no ícone Consultas e escolha Editar - Editar.


note

A maioria dos bancos de dados utiliza consultas para filtrar ou ordenar tabelas de bancos de dados ao exibir registros no computador. As vistas oferecem a mesma funcionalidade que as consultas, mas no lado do servidor. Se o banco de dados estiver em um servidor que ofereça suporte a vistas, você poderá utilizá-las para filtrar os registros no servidor e, assim, acelerar a tempo de exibição.


note

Ao selecionar o comando Criar vista na página da guia Tabelas de um documento de banco de dados, vê-se a janela Edição de vista, que lembra a janela Edição de consulta descrita aqui.


O leiaute da janela de Edição de consulta é armazenada junto com a consulta criada, mas não pode ser armazenada com uma vista criada.

Modo de edição

Para criar uma consulta, clique no ícone Consultas em um documento de banco de dados e, em seguida, clique em Criar consulta no modo de edição.

O painel inferior do modo de edição é onde se define a consulta. Para definir uma consulta, especifique os nomes de campos do banco de dados a incluir e os critérios para exibir os campos. Para reorganizar as colunas no painel inferior da Exibição de edição, arraste o cabeçalho da coluna para um novo local ou selecione a coluna e pressione +Tecla de seta.

Na parte superior da janela do modo de edição, são mostrados os ícones da barra Edição de consulta e da barra Edição.

Caso deseje testar uma consulta, clique duas vezes no nome da consulta no documento de banco de dados. O resultado da consulta será exibido em uma tabela semelhante à da Vista de fonte de dados. Nota: a tabela exibida é apenas temporária.

Chaves no modo de edição de consulta

Chave

Função

F4

Visualizar

F5

Executar consulta

F7

Adicionar tabela ou consulta


Procurar

Quando se abre a edição da consulta pela primeira vez, vê-se uma caixa de diálogo para primeiro selecionar a tabela ou consulta que será a base para sua nova consulta.

Clique duas vezes nos campos para adicioná-los à consulta. Arraste e solte para definir as relações.

note

Ao projetar uma consulta, você não poderá modificar as tabelas selecionadas.


Remover tabelas

Para remover a tabela do modo de edição, clique na borda superior da janela da tabela e abra o menu de contexto. Use o comando Excluir para remover a tabela do modo de edição. Outra opção é pressionar a tecla Delete.

Mover tabela e modificar tamanho de tabela

Você pode redimensionar e dispor as tabelas de acordo com as suas preferências. Para mover as tabelas, arraste a borda superior até a posição desejada. Amplie ou reduza o tamanho no qual a tabela será exibida, posicionando o cursor do mouse sobre uma borda ou sobre um canto e arrastando a tabela até o tamanho desejado.

Relações de tabela

Se houver relações de dados entre um nome de campo em uma tabela e um nome de campo em outra, você poderá usar essas relações para a sua consulta.

Se, por exemplo, tiver uma planilha para artigos identificados por um número de artigo e uma planilha para clientes em que registre todos os artigos que um cliente encomende usando os números de artigo correspondentes, é porque há uma relação entre os dois campos de dados de "número do artigo". Se agora quiser criar uma consulta que retorne todos os artigos que um cliente tenha encomendado, deverá recuperar os dados das duas planilhas. Para fazer isso, é preciso informar o LibreOffice sobre a relação que existe entre os dados das duas planilhas.

Para fazer isso, clique em um nome de campo em uma tabela (por exemplo, o nome de campo "Item-Number" (Número do item) da tabela Customer (Cliente), mantenha pressionado o botão do mouse e, em seguida, arraste o nome do campo para o nome do campo da outra tabela ("Item-Number" - Número do item) da tabela Item). Quando soltar o botão do mouse, aparecerá uma linha conectando os dois campos nas duas janelas. A condição correspondente de o conteúdo dos dois nomes de campos ser idêntico é inserida na consulta SQL resultante.

A criação de uma consulta baseada em várias planilhas relacionadas só é possível quando se usa o LibreOffice como interface de um banco de dados relacional.

note

Não é possível acessar tabelas de diferentes bancos de dados em uma consulta. As consultas que envolvem várias tabelas somente poderão ser criadas dentro de um banco de dados.


Especificar o tipo de relação

Se clicar duas vezes na linha que conecta dois campos vinculados ou chamar o comando de menu Inserir - Nova relação, poderá especificar o tipo de relação na caixa de diálogo Relações.

Como alternativa, pressione Tab até que linha seja selecionada, e pressione Shift+F10 para exibir o menu de contexto e escolher o comando Editar. Alguns bancos de dados suportam somente um subconjunto de tipos de JOIN possíveis.

Exclusão de relações

Para excluir uma relação entre duas tabelas, clique na linha de conexão e, em seguida, pressione a tecla Delete.

Como alternativa, exclua as entradas correspondentes em Campos envolvidos na caixa de diálogo Relações. Ou, pressione Tab até que o vetor de conexão seja realçado e, em seguida, pressione Shift+F10 para abrir o menu de contexto e selecione o comando Excluir.

Definir a consulta

Selecione condições para definir a consulta. Cada coluna da tabela de edição aceita um campo de dados para a consulta. As condições em uma linha são vinculadas com um E lógico.

Especificar o nome dos campos

Primeiro, selecione todos os nomes de campo a partir das tabelas que deseja adicionar à consulta. É possível fazer isso com o recurso de arrastar e soltar ou por meio de um clique duplo em um nome de campo na janela da tabela. Com o método de arrastar e soltar, use o mouse para arrastar um nome de campo da janela da tabela até a área inferior da janela de edição da consulta. Ao fazer isso, você pode decidir qual coluna na janela de edição de consulta vai receber o campo selecionado. Um nome de campo pode ser selecionado com um clique duplo. Ele será adicionado à próxima coluna livre na janela de edição de consulta.

Excluir nomes de campos

Para remover um nome de campo da consulta, clique no cabeçalho da coluna do campo e escolha o comando Excluir no menu de contexto da coluna.

Salvar a consulta

Use o ícone Salvar na barra Padrão para salvar a consulta. Você verá uma caixa de diálogo que solicita um nome para a consulta. Se o banco de dados suportar esquemas, você também poderá inserir um nome para o esquema.

Esquema

Insira o nome do esquema que é atribuído à consulta ou à vista de tabelas.

Nome da consulta ou nome da vista da tabela

Insira o nome da consulta ou da vista de tabelas.

Filtrar dados

Para filtrar dados para a consulta, defina os critérios desejados na área inferior da janela de edição de consulta. As seguintes opções estão disponíveis:

Campo

Digite o nome do campo de dados referido na consulta. Todas as configurações feitas nas linhas das opções do filtro referem-se a este campo. Se ativar uma célula com um clique do mouse, verá um botão de seta, o que permitirá a seleção de um campo. A opção "Nome da tabela.*" seleciona todos os campos de dados onde o critério especificado será aplicado para todos os campos da tabela.

Alias

Especifica um alias. Esse alias será listado numa consulta, no lugar do nome de campo. Isso possibilita o uso de rótulos de coluna definidos pelo usuário. Por exemplo, se o nome do campo de dados for PtNo e, em vez desse nome, você quiser que apareça PartNum na consulta, insira PartNum como alias.

Numa instrução SQL, os alias são definidos da seguinte maneira:

SELECT coluna AS alias FROM tabela.

Por exemplo:


SELECT "PtNo" AS "PartNum" FROM "Parts"

Tabela

A tabela de banco de dados correspondente do campo de dados selecionado está listada aqui. Se ativar esta célula com um clique do mouse, aparecerá uma seta que permite selecionar uma tabela diferente da consulta atual.

Ordenar

Ao clicar nesta célula, poderá selecionar uma das opções de ordenação: crescente, decrescente ou sem ordenação. Os campos de texto ficarão em ordem alfabética (A–Z) e os campos numéricos, em ordem numérica (0–9). Na maioria dos bancos de dados, os administradores podem definir as opções de ordenação no nível do banco de dados.

Visível

Se marcar a propriedade Visível para um campo de dados, o campo será visível na consulta. Se usar somente um campo de dados para formular uma condição ou fazer um cálculo, não será absolutamente necessário mostrá-la.

Critérios

Especifica os primeiros critérios pelos quais o conteúdos dos dados devem ser filtrados.

ou

Você pode inserir aqui um critério adicional para filtragem em cada linha. Critérios múltiplos em numa única coluna serão interpretados como um OU booleano.

Você também pode usar o menu de contexto dos cabeçalhos da linha na área inferior da janela de edição da consulta para inserir um filtro baseado numa função:

Funções

As funções aqui dependem daquelas fornecidas pelo banco de dados.

Se estiver trabalhando com o banco de dados incorporado HSQL, a caixa de lista na linha Função oferece as seguintes opções:

Opção

SQL

Efeito

Sem função

Nenhuma função será executada.

Média

AVG

Calcula a média aritmética de um campo.

Contagem

COUNT

Determina o número de registros da tabela. Campos vazios podem tanto ser contados (a) ou excluídos (b).

a) COUNT(*): Para contar todos os registros da tabela, passe um asterisco como argumento.

b) COUNT(coluna): Ao passar um nome de campo como argumento, conta somente os registros nos quais o campo especificado contém um valor. Registros cujos campos tem valor NULL (i.e. não contém valores numéricos ou textuais) não são contados.

Máximo

MAX

Determina o valor mais alto de um registro para este campo.

Mínimo

MIN

Determina o valor mais baixo de um registro para este campo.

Soma

SUM

Calcula a soma dos valores dos registros para os campos associados.

Agrupar

GROUP BY

Agrupa os dados da consulta de acordo com o nome de campo selecionado. As funções são executadas de acordo com os grupos especificados. No SQL, essa opção corresponde à cláusula GROUP BY. Quando um critério é adicionado, essa entrada aparece na subcláusula HAVING do SQL.


Você também pode inserir chamadas de função diretamente na instrução SQL. A sintaxe é:

SELECT FUNCTION(coluna) FROM tabela.

Por exemplo, a chamada de função em SQL para calcular uma soma é:


SELECT SUM("Preço") FROM "Artigo".

Exceto pela função Agrupar, as funções acima são chamadas de funções agregadas. São funções que calculam dados para criar resumos dos resultados. Também são possíveis funções adicionais que não estão listadas na caixa de lista. Elas dependem do sistema de banco de dados específico em uso e nas funcionalidades atuais fornecidas pelo driver do Base usado para conectar a este sistema.

Para utilizar outras funções que não estão listadas na caixa de lista, você deve inseri-las manualmente em Campo.

Você também pode atribuir alias a chamadas de função. Se não quiser exibir o texto da consulta no cabeçalho da coluna, insira o nome substituto desejado em Alias.

A função correspondente em uma instrução SQL é:

SELECT FUNCTION() AS alias FROM tabela

Exemplo:


SELECT COUNT(*) AS count FROM "Ítem"
note

Se executar tal função, não poderá inserir colunas adicionais para a consulta que não seja como argumento numa função "Agrupar".


Exemplos

No exemplo a seguir, é executada uma consulta entre duas tabelas: uma tabela "Item" com o campo "Item_No" (No. do item), e uma tabela "Suppliers" (Fornecedores) com o campo "Supplier_Name" (Nome do fornecedor). Além disso, ambas as tabelas possuem um nome de campo comum, "Supplier_No."

As etapas a seguir são necessárias para a criação de uma consulta que contenha todos os fornecedores que entreguem mais de três itens.

  1. Insira as tabelas "Item" e "Suppliers" (Fornecedores) na edição da consulta.

  2. Vincule os campos "Supplier_No" das duas tabelas se ainda não houver uma relação desse tipo.

  3. Clique duas vezes no campo "Item_No" (No_do_item) na tabela "Item". Exiba a linha Função, usando o menu de contexto, e selecione a função de contagem.

  4. Insira >3 como critério e desative o campo Visível.

  5. Clique duas vezes no campo "Supplier_Name" (Fornecedor_Nome) da tabela "Suppliers" (Fornecedores) e escolha a função Agrupar.

  6. Execute a consulta.

Se os campos "price" (para o preço individual de um artigo) e "Supplier_No" (para o fornecedor do artigo) estiverem presentes na tabela "Item", é possível obter o preço médio do item oferecido por um fornecedor com a seguinte consulta:

  1. Insira a tabela "Item" na edição de consulta.

  2. Clique duas vezes nos campos "Price" (Preço) e "Supplier_No" (No_Fornecedor).

  3. Ative a linha Função e selecione a função Média no campo "Price" (Preço).

  4. Também é possível inserir "Média" na linha do nome do alias (sem aspas).

  5. Escolha Agrupar para o campo "Supplier_No" (No_Fornecedor).

  6. Execute a consulta.

Os seguintes símbolos e comandos de menu de contexto estão disponíveis:

Funções

Exibe ou oculta uma linha para a seleção das funções.

Nome da tabela

Exibe ou oculta a linha do nome da tabela.

Nome do alias

Exibe ou oculta a linha do nome do alias.

Valores distintos

Busca somente valores distintos da consulta. Aplica-se em múltiplos registros que podem conter dados que aparecem várias vezes nos campos selecionados. Se o comando Valores distintos estiver ativo, apenas um registro será exibido na consulta (DISTINCT). Caso contrário, todos os registros que corresponderem aos critérios de consulta serão exibidos (ALL).

Por exemplo, se houver várias ocorrências do nome "Silva" no banco de dados de endereços, você poderá escolher o comando Valores distintos para especificar na consulta que o nome "Silva" ocorrerá apenas uma vez.

Para uma consulta que envolva vários campos, a combinação de valores de todos os campos deve ser exclusiva, de modo que o resultado possa ser formado a partir de um registro específico. Por exemplo, você tem "Smith em Chicago" uma vez no catálogo de endereços e "Smith em Londres" duas vezes. Com o comando Valores distintos, a consulta usará os dois campos, "last name" (sobrenome) e "city" (cidade), e retornará o resultado "Smith em Chicago" uma vez e "Smith em Londres" uma vez.

No SQL, esse comando corresponde ao predicado DISTINCT.

Limite

Permite limitar o número máximo de registros retornados por uma consulta.

Se adicionar um Limite, obterá no máximo, o número de linhas que especificar. Senão, serão obtidos todos os registros que correspondam com o critério da consulta.

Formular condições de filtro

Durante a formulação de condições de filtro, vários operadores e comandos encontram-se disponíveis. Além dos operadores relacionais, existem comandos específicos à SQL que consultam o conteúdo dos campos do banco de dados. Se usar esses comandos na sintaxe do LibreOffice, o LibreOffice os converterá automaticamente na sintaxe SQL correspondente por um analisador interno. Também é possível inserir o comando SQL diretamente e evitar o analisador interno. As tabelas a seguir oferecem uma visão geral dos operadores e comandos:

Operador

Significado

Condição é satisfeita se...

=

igual a

... o conteúdo do campo for idêntico ao da expressão indicada.

O operador = não será exibido nos campos de consulta. Se inserir um valor sem operador, o operador = será adotado automaticamente.

<>

não é igual a

... o conteúdo do campo não corresponder à expressão especificada.

>

maior que

... o conteúdo do campo for maior que o da expressão especificada.

<

menor que

... o conteúdo do campo for menor que a expressão especificada.

>=

maior que ou igual a

... o conteúdo do campo é maior que ou igual à expressão especificada.

<=

menor que ou igual a

... o conteúdo do campo é menor que ou igual à expressão especificada.


Comando do LibreOffice

Comando SQL

Significado

Condição é satisfeita se...

IS EMPTY

IS NULL

é nulo

... o campo não contém dados. Para campos Yes/No (Sim/Não) com três estados possíveis, este comando consulta automaticamente o estado indeterminado (nem Sim nem Não).

IS NOT EMPTY

IS NOT NULL

não é vazio

... o campo não está vazio, i.e. contém dados.

LIKE

espaço reservado (*) para qualquer número de caracteres

espaço reservado (?) para exatamente um caractere

LIKE

espaço reservado (%) para qualquer número de caracteres

Espaço reservado (_) para exatamente um caractere

é um elemento de

... o campo de dados contém a expressão indicada. O espaço reservado (*) indica se a expressão x ocorre no início (x*), no fim (*x) ou dentro do campo (*x*). Você pode inserir como espaço reservado nas consultas SQL o caractere % SQL ou o conhecido espaço reservado para sistema de arquivos (*) da interface do LibreOffice.

O espaço reservado (*) ou (%) representa qualquer número de caracteres. O ponto de interrogação (?) na interface do LibreOffice e o sublinhado (_) nas consultas SQL representam exatamente um caractere.

NOT LIKE

NOT LIKE

Não é um elemento de

... o campo não contém dados com a expressão especificada.

BETWEEN x AND y

BETWEEN x AND y

incluso no intervalo [x,y]

... o campo contém um valor entre os valores x e y.

NOT BETWEEN x AND y

NOT BETWEEN x AND y

Não está no intervalo [x,y]

... o campo contém um valor que não está entre os valores x e y.

IN (a; b; c...)

Observe que os ponto e vírgula são usados como separadores em todas as listas de valores!

IN (a, b, c...)

contém a, b, c...

... o nome de campo contém uma das expressões especificadas a, b, c,... É possível especificar qualquer número de expressões, e o resultado da consulta é determinado por um operador booleano OU. As expressões a, b, c... podem ser tanto números como caracteres

NOT IN (a; b; c...)

NOT IN (a, b, c...)

não contém a, b, c...

... o campo não contém uma das expressões especificadas: a, b, c,...

= TRUE

= TRUE

tem o valor True (Verdadeiro)

... o nome do campo tiver o valor True (Verdadeiro).

= FALSE

= FALSE

tem o valor False (falso)

... o valor do campo de dados é false (falso).


Exemplos

='Ms.'

retorna os nomes de campo que contêm "Ms."

<'2001-01-10'

retorna as datas ocorridas antes de 10 de janeiro de 2001

LIKE 'g?ve'

retorna registros com conteúdo de campos tipo "give" e "gave".

LIKE 'S*'

retorna registros com conteúdo de campo tal como "Sun".

BETWEEN 10 AND 20

retorna registros de campos com o conteúdo de campo entre os valores 10 e 20. (Os campos podem ser de texto ou numéricos.).

IN (1; 3; 5; 7)

retorna os registros com os valores 1, 3, 5, 7. Se o nome de campo contém um número de item, por exemplo, você poderá criar uma consulta que retorne o item que contém o número especificado.

NOT IN ('Silva')

retorna os registros que não contêm "Silva".


Sequência Escape Like: {escape 'escape-character'}

Exemplo:


SELECT * FROM Item WHERE ItemName LIKE 'The *%' {escape '*'}

O exemplo fornecerá todas as entradas onde o nome do item começa com 'The *'. Isso significa que você também pode procurar caracteres que seriam interpretados como espaços reservados, tais como *, ?, _, % ou o ponto.

Sequência de escape Junção externa: {oj outer-join}

Exemplo:


SELECT Article.* FROM {oj item LEFT OUTER JOIN orders ON item.no=orders.ANR}

Consultar campos de texto

Para consultar o conteúdo de um campo de texto, é necessário incluir a expressão entre aspas simples. A distinção entre letras em maiúsculas e minúsculas depende do banco de dados em uso. LIKE, por definição, faz distinção entre maiúsculas e minúsculas (embora alguns bancos de dados não interpretam isto estritamente).

Consultar campos de data

Os campos de data são representados como #Date# para os identificar como tal. As datas, horas e constantes de data e hora (literais) utilizadas nas condições podem ser do tipo SQL Escape Syntax ou SQL2.

Elemento do tipo Data

Sintaxe SQL Escape #1 - pode estar obsoleta

Sintaxe SQL Escape #2

Sintaxe SQL2

Data

{D'YYYY-MM-DD'}

{d 'YYYY-MM-DD'}

'YYYY-MM-DD'

Hora

{D'HH:MM:SS'}

{t 'HH:MI:SS[.SS]'}

'HH:MI:SS[.SS]'

Data/Hora

{D'YYYY-MM-DD HH:MM:SS'}

{ts 'YYYY-MM-DD HH:MI:SS[.SS]'}

'YYYY-MM-DD HH:MI:SS[.SS]'


Exemplo:


SELECT {d '1999-12-31'} FROM world.years

Exemplo:


SELECT * FROM mytable WHERE years='1999-12-31'

Todas as expressões de data (literais de data) devem ser envolvidas por aspas simples. (Consulte o manual de referência para uma base de dados e conector particular empregados)

Consulta a campos Yes/No (Sim/Não)

Para consultar campos Yes/No (Sim/Não), use a seguinte sintaxe para as tabelas dBASE:

Status

Critério de consulta

Exemplo

Sim

para tabelas do dBASE: diferente de qualquer valor fornecido

=1 retorna todos os registros em que o campo Yes/No (Sim/Não) possui o status "Yes" (Sim) ou "On" (Ativado) (selecionados em preto),

Não

.

=0 retorna todos os registros para os quais o campo Yes/No (Sim/Não) possua o status "No" (Não) ou "Off" (Desativado) (sem seleção).

Nulo

IS NULL

IS NULL retorna todos os registros para os quais o campo Yes/No (Sim/Não) não possua os estados Yes ou No (Sim ou Não) (selecionados em cinza).


note

A sintaxe depende do sistema de banco de dados usado. Você também deve observar que os campos Yes/No (Sim/Não) podem ser definidos de forma diferente (somente dois estados, em vez de três).


Consultas com parâmetros

As consultas parametrizadas permite ao usuário inserir valores durante a execução. Estes valores são utilizados nos critérios para selecionar os registros a serem exibidos. Cada valor tem um parâmetro associado a ele, que solicitado ao usuário quando a consulta é executada.

Os nomes de parâmetros são precedidos por dois pontos em ambos modos de Edição e de SQL de uma consulta. Isso pode utilizado sempre quando um valor pode aparecer. Se o mesmo valor aparecer mais de uma vez na consulta, o mesmo nome de parâmetro é utilizado.

No caso mais simples, onde o usuário insere um valor que verifica uma igualdade, o nome do parâmetro precedido de dois pontos é inserido na linha do Critério. No modo SQL isto deve ser digitado como WHERE "Campo" = :Nome_do_parametro

warning

Os nomes de parâmetros não devem conter qualquer dos caracteres <space>`!"$%^*()+={}[]@'~#<>?/,. Não podem ter os mesmos nomes de campos ou palavras reservadas do SQL. Eles podem ter os mesmos nomes que os alias.


tip

Uma construção útil para selecionar registros com base em partes do conteúdo de campos de texto é adicionar colunas ocultas com LIKE '%/'||:Parte_do_campo || '%'" como critério. Isso vai selecionar registros com correspondência exata. Se desejar um teste insensível à caixa, uma solução é usar LOWER (Nome_do_campo) como campo e LIKE LOWER ( '%' || :Parte _do_campo || '%' ) como critério. Observe que os espaços no critério são importantes; se forem deixados de fora, o analisador SQL interpreta o critério inteiro como cadeia a corresponder. No modo SQL isso deveria ser digitados como LOWER ( "Nome_do_campo" ) LIKE LOWER ( '%' || :Parte_do_campo || '%' ).


Consultas parametrizadas podem ser utilizadas como fonte de dados para subformulários, para permitir ao usuário restringir os registros exibidos.

Entrada de parâmetros

A caixa de diálogo Entrada de parâmetros pede ao usuário para inserir os valores dos parâmetros. Insira um valor para cada parâmetro de consulta e confirme clicando em OK ou pressionando Enter.

Os valores inseridos pelo usuário podem consistir de qualquer caracteres permitidos pelo SQL para o critério relevante; isto pode depender do sistema de banco de dados utilizado.

tip

O usuário pode utilizar os caracteres curinga do SQL "%" (cadeia arbitrária) ou "_" (caractere arbitrário singular) como parte do valor para buscar registros com critérios mais complexos.


Modo SQL

SQL significa "Structured Query Language" (linguagem de consulta estruturada) e descreve instruções para atualização e administração de bancos de dados relacionais.

No LibreOffice, você não precisa de conhecimento de SQL para a maioria das consultas, já que não é necessário inserir o código SQL. Se criar uma consulta na edição de consulta, o LibreOffice converte automaticamente suas instruções na sintaxe SQL correspondente. Se, com a ajuda do botão Ativar/Desativar modo de edição, você mudar para o modo SQL, pode ver os comandos SQL de uma consulta que tenha sido criada.

Você pode formular sua consulta diretamente no código SQL. No entanto, observe que a sintaxe especial depende do sistema de banco de dados usado.

Se inserir manualmente o código SQL, poderá criar consultas específicas a SQL que não sejam suportadas pela interface gráfica da Edição de consulta. Essas consultas precisam ser executadas no modo SQL nativo.

Ao clicar no ícone Executar comando SQL diretamente no modo SQL, você pode formular uma consulta que não é processada pelo LibreOffice mas enviada diretamente ao motor do banco de dados.

♥ Doe para nosso projeto! ♥