A Oracle já disponibilizou a versão definitiva em Português do OpenOffice 3.3.
Pode fazer o download aqui
Um local de encontro para falar de tudo o que diga respeito a computadores
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.
Esta é uma questão que tenho visto posta em vários foruns e que, portanto, interessará a muitos dos actuais ou futuros utilizadores do Open Office.
Realmente , é normal que depois de atingirmos um determinado nível de programação com o Open Office sejamos nós a desenvolver as aplicações e outros a utilizá-las e não tem nenhum cabimento que, ao abrir uma aplicação, o utilizador seja atirado para o modo de desenho e ter que trabalhar a partir daí.
Aqui chegados, vamos então à forma que costumo utilizar para conseguir este objectivo:
Crio um formulário com os diversos botões que me permitam aceder (atraves de macros, assunto tratado no artigo “Macros para o Base-Open Office”) aos outros formulários ou relatórios
Crio uma macro que associo à abertura do documento e faço abrir o formulário referido no ponto 1
Para criar a macro siga os passos indicados em “Macro para fechar o Openoffice” e crie a seguinte macro:
Sub AutoExec
On Error Goto HandleError
Dim LastFrame As Object
Dim NumFrames As Integer
Static FormDocs As Object
Dim DBDoc As Object
Dim ImpName As String
Dim DataSource As Object
Dim Conn As Object
Dim Args(1) As New com.sun.star.beans.PropertyValue
Dim FormName As String
Dim FormDoc As Object
FormName="fMENU" 'Mude aqui para o Forms de Abertura da Aplicação
ImpName="com.sun.star.comp.dba.ODatabaseDocument"
NumFrames=StarDesktop.Frames.Count
LastFrame=StarDesktop.Frames.getByIndex(NumFrames-1)
If LastFrame.Frames.Count>1 Then
Exit Sub
End If
If Not (LastFrame.Controller.Model.ImplementationName=ImpName) Then
Exit Sub REM not a db doc
End If
DataSource=LastFrame.Controller.DataSource
DBDoc=DataSource.DatabaseDocument
FormDocs=DBDoc.FormDocuments
Conn=DataSource.getConnection("","") REM no user/password
Args(0).Name="ActiveConnection" : Args(0).Value=Conn
if FormDocs.hasByName(FormName) Then
FormDoc=FormDocs.loadComponentFromURL(FormName,"_self",2,Args() )
FormDoc.CurrentController.Frame.ContainerWindow.setFocus()
End If
HandleError:
If Err<>0 Then
Exit Sub
End If
End Sub
Preferimos criar esta macro numa biblioteca a um nível superior pois a mesma irá servir, no futuro, para todas as aplicações criadas no Open Office (se quisermos utilizá-la numa outra máquina podemos sempre exportá-la como ocx) mas a mesma pode ser criada no módulo da aplicação (isso foi testado).
Com a macro criada, abrimos o documento do base onde queremos que a mesma seja utilizada e:
Vamos a Ferramentas → Personalizar e escolhemos o separador Eventos
Escolhemos o evento “Abrir Documento” e em “Atribuir” escolhemos a “Macro” que criámos.
Et Voilá.