quinta-feira, 27 de janeiro de 2011

Testando o Base do OpenOffice 3.3 RC10

Vinha utilizando o seguinte código para obviar ao facto de o “Base” não possuir querys de update, delete e insert:


Sub Contabiliza

Dim DatabaseContext As Object

Dim DataSource As Object

Dim Connection As Object

Dim Statement As Object

Dim ResultSet As Object

'Inicia o processo de contabilização

Msgbox "A iniciar o processo de Contabilização"

'Limpa todos os movimentos contabilisticos

DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")

DataSource = DatabaseContext.getByName("contabilidade")

Connection = DataSource.GetConnection("","")

Statement = Connection.createStatement()

ResultSet = Statement.executeQuery("DELETE FROM ""tMOVIMENTOS_CONTA"";")

'Contabiliza os movimentos a Débito

DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")

DataSource = DatabaseContext.getByName("contabilidade")

Connection = DataSource.GetConnection("","")

Statement = Connection.createStatement()

ResultSet = Statement.executeQuery("INSERT INTO ""tMOVIMENTOS_CONTA""(""ID_MOV"",""COD_CONTA"",""DATA_MOV"",""DESC_MOV"",""DEBITO"",""CREDITO"")SELECT ""ID_MOV"",""CONTA_DEB"" AS ""COD_CONTA"",""DATA_MOV"",""DESC_MOV"",""VALOR"" as ""DEBITO"",0 AS ""CREDITO"" FROM ""tMOVIMENTOS"";")

'Contabiliza os movimentos a Crédito

DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")

DataSource = DatabaseContext.getByName("contabilidade")

Connection = DataSource.GetConnection("","")

Statement = Connection.createStatement()

ResultSet = Statement.executeQuery("INSERT INTO ""tMOVIMENTOS_CONTA""(""ID_MOV"",""COD_CONTA"",""DATA_MOV"",""DESC_MOV"",""DEBITO"",""CREDITO"")SELECT ""ID_MOV"",""CONTA_CRED"" AS ""COD_CONTA"",""DATA_MOV"",""DESC_MOV"",0 as ""DEBITO"",""VALOR"" AS ""CREDITO"" FROM ""tMOVIMENTOS"";")

Msgbox "Processo de contabilização concluído"

End Sub


O mesmo funcionou perfeitamente com a base de dados aberta até à versão 3.2.1


Nos testes que tenho efectuado com a RC10 da versão 3.3, vinha dando o seguinte erro na linha

“DataSource = DatabaseContext.getByName("contabilidade")”:

Erro de execução de basic

Ocorreu um erro de excepção

Type:com.sun.start.container.nosuchelentexception

Message:contabilidade”

Acontecia que, na mesma linha, se substituisse “contabilidade” por uma base de dados não aberta, o erro deixava de ocorrer, o que me levava a crer que o erro apenas ocorria quando estava a agir dentro da propria base de dados.

Alteração surgida com a implementação da versão 3.3? Quase de certeza!

Assim sendo, pensei:

  • Será que alguem me pode ajudar a encontrar o código correcto para proceder às mesmas operações?

Então decidi recorrer aos foruns que conheço e com a ajuda do RPG ( aqui ) consegui encontrar o código correcto para efectuar os comandos pretendidos na base de dados aberta e que é o seguinte:


'Limpa todos os movimentos contabilisticos
Connection=thisdatabasedocument.CurrentController.activeconnection
Statement = Connection.createStatement()
ResultSet = Statement.executeQuery("DELETE FROM ""tMOVIMENTOS_CONTA"";")


E tudo funcionou perfeitamente!

Por isso aqui fica, para quem sinta o mesmo problema e, como eu, encontre dificuldades em encontrar respostas em português.