segunda-feira, 2 de maio de 2011

Mudanças no Facebook


O Facebook mudou e não avisou ninguém.
O Facebook por defeito mudou para configuração não segura!
Olhe para a barra de endereço URL (na parte de cima da tela).
Se vir "http" em vez de "https", a sua ligação NÃO ESTÁ SEGURA e pode ser HACKEADA.
Clique em Conta - Definições de Conta - Segurança da Conta, marque a opção de navegação segura e guarde.
Faça um grande favor aos seus amigos, alerte-os e peça-lhes para alertarem os seus amigos.

sexta-feira, 25 de março de 2011

Possivel Virus, Malware ou Spyware



ATENÇÃO:

A minha filha recebeu hoje um email em tudo igual ao da imagem acima que retirei da net, exactamente aqui.

Por distracção carregou no link e não foi para lado nenhum, dando impressão que algo se terá instalado no computador, está a correr o anti-vírus e até agora nada foi detectado, mas, por precaução, aconselho a que se receberem um igual, NÃO ABRAM.

É muito tosco, é certo, mas...

terça-feira, 8 de fevereiro de 2011

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.



quarta-feira, 24 de novembro de 2010

Macro para guardar valor de campo ListBox em variável no Base do OpenOffice


Sub Listbox_select
oDoc = thisComponent
oController = oDoc.getCurrentController()
oform =odoc.drawpage.forms.getbyindex(0)
oList = oForm.getByName("produt")
oListCtr = ThisComponent.CurrentController.GetControl(oList)
oTextCtr = oListCtr.SelectedItem
oPosCtr = oListCtr.SelectedItempos'Este é o valor a guardar
msgbox oTextCtr
msgbox oPosCtr
prod=oPostCtr
End Sub

quarta-feira, 6 de outubro de 2010

Maximizar forms no Base do OpenOffice


As seguinte macros, usadas em conjunto, maximizam um forms para full screen.


sub onWhenLoading( oEvent as object )
MaximizeFrame( oEvent.Source.Parent.Parent.CurrentController.Frame)
end sub

Declare Function ShowWindow Lib "user32" _
(ByVal lHwnd As Long, _
ByVal lCmdShow As Long) As Boolean

sub MaximizeFrame( aFrame as object )
dim frame
dim window
dim handle
window = aframe.getContainerWindow()
handle = window.getWindowHandle(dimarray(), 1)
REM 1=WIN32
ShowWindow( handle, 3 )
end sub

A macro "sub onWhenLoading" deve ser linckada ao evento "durante o carregamento" do forms.


terça-feira, 21 de setembro de 2010

Abrir forms ao abrir um documento do Base do OpenOffice




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í.


O mais indicado será que ao utilizador, ao entrar na aplicação , lhe seja logo apresentado um “menu”, para que o mesmo possa, a partir daí, efectuar as suas tarefas.

Aqui chegados, vamos então à forma que costumo utilizar para conseguir este objectivo:

  1. 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

  1. 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).

  1. Com a macro criada, abrimos o documento do base onde queremos que a mesma seja utilizada e:

  2. Vamos a Ferramentas → Personalizar e escolhemos o separador Eventos

  3. Escolhemos o evento “Abrir Documento” e em “Atribuir” escolhemos a “Macro” que criámos.


Et Voilá.