Programando o LibreOffice Base. Parte 2

A parte 2 discutirá o relacionamento entre tabelas e formulários do banco de dados. Em particular, como definir um relacionamento entre duas tabelas e usar "tabelas de referência" como fonte de dados para listas suspensas.

Versões do OpenOffice e LibreOffice para as quais esta mensagem é relevante de 3.0 a 6.2 (a versão atual do LibreOffice). A partir da versão 3.0, o OpenOffice Base tem a capacidade de salvar scripts em um arquivo de banco de dados (com a extensão .odb), o que facilita a distribuição do código de macro OO Basic

Houve alguma confusão com os formulários no OpenOffice Base. O fato é que, no processo de evolução do software de um pacote de escritório para um ambiente de banco de dados, descobriu-se que Formulários, Formulários, Formulários e Formulários não são a mesma coisa. E o formulário não é apenas o formulário. Vou explicar com mais detalhes.

Ao abrir o banco de dados do OpenOffice Base no modo de edição, você vê quatro marcadores no lado esquerdo da tela. Na versão russa, parecerá

  • Tabelas
  • Inquéritos
  • Formulários
  • Relatórios

Nesse sentido, o formulário é um aplicativo separado que é executado em uma janela separada. Também observo que, de fato, é essa a janela na qual a instância do OpenOffice Writer é iniciada.

Nota Como o formulário é realmente uma instância do OpenOffice Writer - você pode criar um aplicativo sem carregar o componente OpenOffice Base - diretamente no OpenOffice Writer.

Cada formulário tem uma coleção de objetos de formulários de formulário. No início, esta coleção está vazia. Apesar disso, você pode abrir e fechar o formulário. E até exibir informações de texto nele. E somente quando você adiciona um novo controle (por exemplo, Button), o sistema criará um objeto Form com o nome padrão Form, se você ainda não tiver criado esse objeto.

É mais conveniente criar novos Formulários a partir do Navegador de Formulários (exibido na paleta como uma bússola), que também podem ser chamados no menu Exibir | Barra de Ferramentas | Navegação de Formulários. Os objetos de formulário são criados no nível superior da coleção de formulários ou subordinados a outro objeto de formulário. Isso não afeta a aparência do formulário, mas pode ser útil ao definir relacionamentos entre tabelas.

Captura de tela
imagem


Aqui devemos observar uma anomalia do objeto Form. Este objeto é principalmente um objeto associado a uma tabela de banco de dados ou a uma consulta SQL. Você pode pensar em Form como um objeto ResultSet (do jeito que realmente é). Por outro lado, o formulário é um contêiner para controles, como FORM em um documento HTML (e isso também é verdade).

Abra o formulário recém-criado no modo de edição (botão direito do mouse | Editar). Crie um novo objeto Form com o nome Form ou outro nome que você desejar. Nesse elemento Form, crie um elemento Form filho.

Cada formulário precisa estar associado a uma tabela, consulta ou consulta SQL existente do banco de dados. No formulário escravo, você pode definir as regras para que os dados filtrados pelo valor dos campos relacionados no formulário principal sejam exibidos como mestre / escravo. Para fazer isso, no editor de propriedades do formulário subordinado, preencha os campos principais do link e as propriedades dos campos subordinados.

Agora, adicionaremos um elemento de controle de tabela a cada um dos formulários, selecionando o formulário apropriado no Navegador de formulários>. O elemento Table Control não está no painel de elementos disponíveis. Para exibir uma lista expandida de elementos, você precisa ativar o botão Mais controles na paleta de elementos. Após adicionar o elemento Table Control, é necessário entrar no modo de edição desse elemento e adicionar as colunas necessárias para a exibição da tabela (botão direito do mouse -> Inserir / Substituir / Excluir Coluna)

O segundo tipo é o tipo de relacionamento frequentemente encontrado na prática entre tabelas (após Mestre / Escravo), e que consideraremos como um tipo de referência. Armazenamos na tabela de dados a chave do objeto GUID, autoincrement, e na tabela exibida exibimos seu nome completo, retirado da tabela vinculada, o “diretório”. Existe um mecanismo conveniente para isso. No visual Table Designer, adicione uma coluna do tipo Caixa de listagem. Se uma coluna do tipo Numérico / Texto já foi criada, na qual a chave é exibida (e não o nome), é possível alterar seu tipo para Caixa de listagem (clique com o botão direito do mouse em | Substituir por | Caixa de listagem). Em seguida, edite a lista de propriedades da coluna. Na guia dados, defina a propriedade Tipo de conteúdo da lista como SQL. A consulta na propriedade List Content deve conter o valor exibido na primeira coluna, e a propriedade Bound Field será o índice da coluna com o campo key (supondo que a primeira coluna tenha o índice 0). Ou seja, na grande maioria das consultas, será 1 para consultas do tipo

SELECT USERNAME, USERID FROM USERS ORDER BY USERNAME 

Até agora, o trabalho foi descrito no modo configurador sem programação. Adicione funcionalidade com macros OO Basic.

Crie um filtro para a tabela do banco de dados pelo valor digitado na caixa de texto. Para fazer isso, escrevemos na linguagem OO Basic um procedimento que processa um evento a partir do teclado.

  Sub TextBox_onKeyUp(oEvent) oDocument = ThisComponent oDocument.LockControllers sText = oEvent.Source.text if Len(sText) > 3 Then oForm = ThisComponent.Drawpage.Forms.getByName("MyForm") oForm.Filter = "USERNAME LIKE '" + sText + "%'" oForm.reload() End If oDocument.UnlockControllers End Sub 

Associamos esse procedimento ao evento Liberado pela chave do campo de texto (na guia Evento da lista de propriedades do elemento). Observe que esse campo de texto deve estar localizado em outro formulário (não no qual o filtro está sobreposto), para que recarregar oForm.reload () não "anule" seu valor atual inserido no teclado.

Para ser continuado.

Source: https://habr.com/ru/post/pt445304/


All Articles