• Nenhum resultado encontrado

Fontes de Dados

No documento Introdução Ao OpenOffice.org Basic (páginas 98-102)

Antes de podermos usar um banco de dados, precisamos registrar a fonte de dados no OpenOffice.org. Pela interface gráfica esta tarefa é executada no diálogo Administração das Fontes de Dados (Menu Ferramentas / Fonte de Dados). Neste diálogo, notamos que uma fonte de dados contém quatro tipos básicos de informações:

a) Geral – sobre os aspectos da conexão com o banco de dados; b) Tabelas – quais tabelas serão utilizadas;

c) Consultas – os comandos SQL disponíveis;

d) Vínculos – ligações com documentos do OpenOffice.org, por exemplo formulários.

Os principais serviços e interfaces da API do OpenOffice.org, relacionados com banco de dados estão agrupados nos módulos:

Versão 2 Banco de Dados

Vejamos alguns serviços, relacionados com as fontes de dados. O ponto de entrada é o contexto de banco de dados, representado pelo serviço com.sun.star.sdb.DatabaseContext. Para criar um objeto DatabaseContext, chamamos a função createUnoService ( ):

oContexto = createUnoService ( “com.sun.star.sdb.DatabaseContext” )

Podemos obter as fontes de dados registradas, usando os métodos relacionados com as interfaces XNameAccess e XEnumeration, eis alguns deles:

hasByName ( sNome As String ) As Boolean getByName ( sNome As String ) As Variant getElementNames ( ) As String ( )

hasElements ( ) As Boolean hasMoreElements ( ) As Boolean nextElement ( ) As Variant

Lembre-se que, antes de usar os métodos de XEnumeration, uma enumeração deve ser criada com uma chamada ao método createEnumeration ( ).

Já temos as ferramentas necessárias para escrever um exemplo. Vamos exibir os nomes das fontes de dados registradas em nosso contexto de banco de dados. Digite a Sub

contextoBancoDados, abaixo, e execute para ver o resultado.

Sub contextoBancoDados '

Dim oContexto As Variant Dim sNomes() As String '

' cria o contexto de banco de dados

oContexto = createUnoService("com.sun.star.sdb.DatabaseContext") If oContexto.hasElements() Then

' obtem os nomes das fontes de dados sNomes = oContexto.getElementNames() ' exibe os nomes das fontes de dados sMsg = ""

For i = LBound(sNomes) to UBound(sNomes) sMsg = sMsg + sNomes(i) + Chr$(13) Next i

MsgBox sMsg Else

MsgBox "Nenhuma fonte registrada" End If

'

End Sub

Outro serviço da linha de frente é com.sun.star.sdb.DataSource, que representa um objeto fonte de dados. Ele tem várias propriedades e oferece diversas interfaces.

Antes de adicionar uma nova fonte de dados ao contexto, precisamos criar um objeto DataSource. Isto pode ser feito de duas maneiras:

oFonte = oDataContext.createInstance ( ) ' em desuso

oFonte = createUnoService ( “com.sun.star.sdb.DataSource” )

Para obter, apagar ou registrar uma fonte de dados no contexto de banco de dados, devemos usar os métodos da interface com.sun.star.uno.XNamingService do objeto DatabaseContext. getRegisteredObject ( sNome As String ) As < com.sun.star.uno.XInterface >

retorna o objeto fonte de dados com o nome sNome

registerObject ( sNome As String, oFonte As < com.sun.star.uno.XInterface >) registra o objeto oFonte como uma fonte de dados com o nome sNome

revokeObject ( sNome As String )

revoga a fonte de dados com o nome sNome

Eis algumas das propriedades do serviço com.sun.star.sdb.DataSource:

Propriedade Descrição

Name Nome da fonte de dados

URL URL do banco de dados (sdbc:subprotocolo:subname

ou jdbc ...)

User Nome de login do usuário

Password Senha do usuário

IsPasswordRequired Se True, uma senha será necessária IsReadOnly Se True, acesso somente para leitura

Vamos retomar o nosso exemplo e acrescentar código para adicionar uma nova fonte de dados ao contexto de banco de dados. Acrescente o código abaixo na Sub contextoBancoDados, execute a macro e verifique, através de Ferramentas – Fonte de Dados, se a nova fonte foi criada.

' ADICIONA UMA NOVA FONTE DE DADOS Dim oFonte As Variant

' cria uma instancia de fonte de dados

oFonte = createUnoService("com.sun.star.sdb.DataSource") ' oFonte = oContexto.createInstance()

' testa se a fonte já está registrada If oContexto.hasByName("Minha_Fonte") Then MsgBox "Minha_Fonte já registrada!" Exit Sub

Else

' registra a nova fonte no contexto

oContexto.registerObject("Minha_Fonte", oFonte)

' define a propriedade URL >>>> ALTERE PARA O SEU SISTEMA <<<< oFonte.setPropertyValue("URL", _

"sdbc:dbase:file:///D:/NAD/OPENOFFICE/BDados") End If

Versão 2 Banco de Dados

O objeto DataSource suporta algumas interfaces relacionadas com os tipos básicos de informações da fonte de dados, seguem as principais:

A interface com.sun.star.util.XFlushable, relacionada com o fluxo de dados entre o objeto e o banco de dados, contendo os métodos:

flush ( )

encaminha os dados do objeto conectado para o banco de dados addFlushListener ( )

removeFlushListener ( )

adiciona e remove “listeners” para o evento “flushed”

A interface com.sun.star.sdb.XQueryDefinitionsSupplier, com o método: getQueryDefinitions ( ) As < com.sun.star.container.XNameAccess > retorna o recipiente com as consultas definidas numa fonte de dados.

Através da interface com.sun.star.sdb.XBookmarksSupplier, podemos obter os vínculos dos documentos associados a uma fonte de dados, com uma chamada ao método:

getBookmarks ( ) As < com.sun.star.container.XNameAccess >

retorna uma coleção de cadeias com a localização dos documentos vinculados.

Vamos obter a nossa recém-criada fonte de dados e fazer algumas verificações. Crie a sub- rotina Sub infoFonteDados e execute, observando a saída.

Sub infoFonteDados '

Dim oContexto As Variant Dim oFonte As Variant Dim oConsultas As Object Dim oVinculos As Object Dim sNomes() As String '

' cria o contexto de banco de dados

oContexto = createUnoService("com.sun.star.sdb.DatabaseContext") ' obtem o objeto fonte de dados

oFonte = oContexto.getRegisteredObject("Minha_Fonte") '

' obtem a propriedade TableFilter sMsg = "Tabelas: " + Chr$(10) sNomes = oFonte.getPropertyValue("TableFilter") If UBound(sNomes) > 0 Then For i = 0 To UBound(sNomes) sMsg = sMsg + sNomes (i) + Chr$(10) Next i MsgBox sMsg Else

MsgBox "Nenhuma Tabela para visualizar" End If

'

' verifica consultas

oConsultas = oFonte.getQueryDefinitions() If oConsultas.getCount() > 0 Then

Else

MsgBox "Nenhuma consulta definida." End If

'

' verifica vínculos

oVinculos = oFonte.getBookmarks() If oVinculos.getCount() > 0 Then

MsgBox Str$(oVinculos.getCount()) + " vínculos definidos" Else

MsgBox "Nenhum vínculo definido." End If

'

End Sub

Note que as tabelas a serem visualizadas pela fonte de dados é uma propriedade de DataSource, enquanto as consultas e vínculos são obtidos através de métodos específicos.

No documento Introdução Ao OpenOffice.org Basic (páginas 98-102)