[Risolto] Errore Macro

Discussioni sulle caratteristiche di database
Rispondi
Dr.Cuga
Messaggi: 8
Iscritto il: domenica 11 aprile 2010, 22:06

[Risolto] Errore Macro

Messaggio da Dr.Cuga »

ricevo questo errore eseguendo una macro associata ad un tasto che dovrebbe chiudere il form "Menu" ed il programma:

---
errore di runtime basic
si é verificata un'eccezzione
type: com.sum.star.container.NoSuchElementException
message:.
---

e viene indicato questo rigo della macro:

---
oForm = oForms.GetByName ("Menu")
---

la macro l'ho presa da un'esempio trovato in internet che con il database di esempio scaricato funziona perfettamente. io ho solo cambiato il nome del form.

qualcuno ha la soluzione? grazie anticipate

Moderazione: aggiunto [Risolto] al titolo.
Avatar utente
xergio
Messaggi: 315
Iscritto il: lunedì 15 marzo 2010, 21:54
Località: Arzignano (Vicenza)
Contatta:

Re: Errore Macro

Messaggio da xergio »

Questo errore vuol dire che il nome passato è errato.
Controlla bene il nome, eventualmente usa MRI oppure XRAY per testare la correttezza di quello che fai (sono entrambe sul sito delle extension).
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
---
Sergio Corato
LibO 6.x su Ubuntu 18.04 / OOo 4.x su Windows XP/10 (VirtualBox)
https://efatto.it
Dr.Cuga
Messaggi: 8
Iscritto il: domenica 11 aprile 2010, 22:06

Re: Errore Macro

Messaggio da Dr.Cuga »

MRI l'ho trovato, XRAY no. comunque mi é un po ostico il funzionamento di MRI. il nome che passo e cioé "Menu" é assolutamente esatto perché nn ho nessun altro form...
Windows XP SP3
OpenOffice.org v3.2
Avatar utente
xergio
Messaggi: 315
Iscritto il: lunedì 15 marzo 2010, 21:54
Località: Arzignano (Vicenza)
Contatta:

Re: Errore Macro

Messaggio da xergio »

Prova con
oForms.ElementsName
e vedi cosa c'è.
Per non dover fare un programmino per analizzare l'array (ElementsName) usa MRI. E' sufficiente andare su addons -> MRI
quindi seleziona
DrawPages -> Forms
e ti trovi allo stesso punto di oForms.

Oppure usa
MRI oForms
direttamente all'interno dell'istruzione Basic.
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
---
Sergio Corato
LibO 6.x su Ubuntu 18.04 / OOo 4.x su Windows XP/10 (VirtualBox)
https://efatto.it
Dr.Cuga
Messaggi: 8
Iscritto il: domenica 11 aprile 2010, 22:06

Re: Errore Macro

Messaggio da Dr.Cuga »

se cambio con ElementsName mi dice metodo nn trovato... poi nn mi spiego perché l'AUTOEXEC funziona con "Menu" infatti il form parte in automatico e
oForm = oForms.GetByName("Menu") nn funziona. ritorna un'errore anche "oDatabase = fnGetOpenDatabase(sdatabaseName)" -> l'argomento nn é opzionale
Windows XP SP3
OpenOffice.org v3.2
Avatar utente
xergio
Messaggi: 315
Iscritto il: lunedì 15 marzo 2010, 21:54
Località: Arzignano (Vicenza)
Contatta:

Re: Errore Macro

Messaggio da xergio »

Prova a postare il documento che hai modificato, con le macro salvate all'interno.
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
---
Sergio Corato
LibO 6.x su Ubuntu 18.04 / OOo 4.x su Windows XP/10 (VirtualBox)
https://efatto.it
Dr.Cuga
Messaggi: 8
Iscritto il: domenica 11 aprile 2010, 22:06

Re: Errore Macro

Messaggio da Dr.Cuga »

questo é il Module1.xba

---
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Module1" script:language="StarBasic">REM ***** BASIC *****

REM ----------------------------------------------------------------------
Dim oForm

sub subDisplayForm(sDatabaseName as string, sFormName as string)
dim mArgs(1) as new com.sun.star.beans.PropertyValue

oDatabase = fnGetOpenDatabase(sdatabaseName)
oConnection = oDatabase.DataSource.getConnection("","")
mArgs(0).name = "OpenMode"
mArgs(0).value = "open" &apos;"openDesign" &apos; &apos;"openForMail"
mArgs(1).name = "ActiveConnection"
mArgs(1).value = oConnection
oForm = oDatabase.getFormDocuments.getByName(sFormName)
&apos;oForm.visibilityChanged(true)
oDatabase.getFormDocuments.loadComponentFromURL(sFormName, "_blank", 0, mArgs())


end sub

REM ----------------------------------------------------------------------

function fnGetOpenDatabase(sDatabaseName as string)

oEnum = StarDesktop.getComponents.createEnumeration
while oEnum.hasMoreElements
oPosDB = oEnum.nextElement
if oPosDB.implementationName = "com.sun.star.comp.dba.ODatabaseDocument" then
msgbox oPosDB.DataSource.name
if right(oPosDB.DataSource.name, len(sDatabaseName)) = sDatabaseName then
fnGetOpenDatabase = oPosDB
exit function
end if
end if
wend
end function

REM ----------------------------------------------------------------------
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="Menu" REM CHANGE TO YOUR FORM NAME

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

REM ----------------------------------------------------------------------

Sub escidaooo
Dim oForms as Object, oForm as Object
Dim oCtrl as Object
oForms = ThisComponent.DrawPage.Forms
oForm = oForms.GetByName("Menu")
&apos;Xray oForm
oForm.ActiveConnection.flush()
StarDesktop.terminate
End sub

REM ----------------------------------------------------------------------

</script:module>
---

ho un solo form nel database di nome "Menu"
Windows XP SP3
OpenOffice.org v3.2
Avatar utente
xergio
Messaggi: 315
Iscritto il: lunedì 15 marzo 2010, 21:54
Località: Arzignano (Vicenza)
Contatta:

Re: Errore Macro

Messaggio da xergio »

Se puoi cortesemente postare l'intero database, così è troppo scomodo :shock: (a parte che un copia-incolla direttamente dall'editor Basic evita tutte quelle "traduzioni" html che rendono illeggibile il testo).
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
---
Sergio Corato
LibO 6.x su Ubuntu 18.04 / OOo 4.x su Windows XP/10 (VirtualBox)
https://efatto.it
Dr.Cuga
Messaggi: 8
Iscritto il: domenica 11 aprile 2010, 22:06

Re: Errore Macro

Messaggio da Dr.Cuga »

sorry :)

REM ***** BASIC *****

REM ----------------------------------------------------------------------
Dim oForm

sub subDisplayForm(sDatabaseName as string, sFormName as string)
dim mArgs(1) as new com.sun.star.beans.PropertyValue

oDatabase = fnGetOpenDatabase(sdatabaseName)
oConnection = oDatabase.DataSource.getConnection("","")
mArgs(0).name = "OpenMode"
mArgs(0).value = "open" '"openDesign" ' '"openForMail"
mArgs(1).name = "ActiveConnection"
mArgs(1).value = oConnection
oForm = oDatabase.getFormDocuments.getByName(sFormName)
'oForm.visibilityChanged(true)
oDatabase.getFormDocuments.loadComponentFromURL(sFormName, "_blank", 0, mArgs())


end sub

REM ----------------------------------------------------------------------
function fnGetOpenDatabase(sDatabaseName as string)

oEnum = StarDesktop.getComponents.createEnumeration
while oEnum.hasMoreElements
oPosDB = oEnum.nextElement
if oPosDB.implementationName = "com.sun.star.comp.dba.ODatabaseDocument" then
msgbox oPosDB.DataSource.name
if right(oPosDB.DataSource.name, len(sDatabaseName)) = sDatabaseName then
fnGetOpenDatabase = oPosDB
exit function
end if
end if
wend
end function

REM ----------------------------------------------------------------------
Dim oForm

REM ----------------------------------------------------------------------
Dim oForm

REM ----------------------------------------------------------------------
Dim oForm

REM ----------------------------------------------------------------------
sub finestra_close( oEvent as object )
ThisComponent.CurrentController.Frame.close(True)
end sub

REM ----------------------------------------------------------------------
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="Menu" REM CHANGE TO YOUR FORM NAME

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

REM ----------------------------------------------------------------------
Sub escidaooo
Dim oForms as Object, oForm as Object
Dim oCtrl as Object
oForms = ThisComponent.DrawPage.Forms
oForm = oForms.GetByName("Menu") REM ElementsName
'Xray oForm
oForm.ActiveConnection.flush()
StarDesktop.terminate
End sub

REM ----------------------------------------------------------------------
Windows XP SP3
OpenOffice.org v3.2
Avatar utente
xergio
Messaggi: 315
Iscritto il: lunedì 15 marzo 2010, 21:54
Località: Arzignano (Vicenza)
Contatta:

Re: Errore Macro

Messaggio da xergio »

. . . intendevo il file.odb :)
sotto a questa maschera ci sono due linguette: Opzioni e Invia allegato.
Con Invia allegato puoi allegare il tuo file.odb (ovviamente ripulendo dei dati sensibili).

La macro, se funziona sul database iniziale, non ha errori per forza. Quello che non va dovrebbe essere l'indicazione del nome del form o il collegamento, ma per vederlo è necessario testare il file.
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
---
Sergio Corato
LibO 6.x su Ubuntu 18.04 / OOo 4.x su Windows XP/10 (VirtualBox)
https://efatto.it
Dr.Cuga
Messaggi: 8
Iscritto il: domenica 11 aprile 2010, 22:06

Re: Errore Macro

Messaggio da Dr.Cuga »

ecco il database. nn ci sono ancora dati all'interno
Allegati
DataBASE.rar
(13.13 KiB) Scaricato 264 volte
Windows XP SP3
OpenOffice.org v3.2
Avatar utente
xergio
Messaggi: 315
Iscritto il: lunedì 15 marzo 2010, 21:54
Località: Arzignano (Vicenza)
Contatta:

Re: Errore Macro

Messaggio da xergio »

Due cose:
:idea: 1. i file di OOo sono già zippati, non serve zipparli di nuovo
:idea: 2. se devi farlo (per altri tipi di file) almeno usa un formato facilmente disponibile (zip) senza che uno debba scaricarsi un programma apposta :D
A me poi l'estrazione dà comunque errore.... :roll:
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
---
Sergio Corato
LibO 6.x su Ubuntu 18.04 / OOo 4.x su Windows XP/10 (VirtualBox)
https://efatto.it
Dr.Cuga
Messaggi: 8
Iscritto il: domenica 11 aprile 2010, 22:06

Re: Errore Macro

Messaggio da Dr.Cuga »

Sorry...
Allegati
HeliosDB.odb
(13.67 KiB) Scaricato 262 volte
Windows XP SP3
OpenOffice.org v3.2
Avatar utente
xergio
Messaggi: 315
Iscritto il: lunedì 15 marzo 2010, 21:54
Località: Arzignano (Vicenza)
Contatta:

Re: Errore Macro

Messaggio da xergio »

Eccola qua, sistemato e funzionante 8-) :
HeliosDB.odb
(15.65 KiB) Scaricato 356 volte
Il nome del form era "MainForm" e non Menu, lo vedi navigando il formulario
1.png
1.png (13.65 KiB) Visto 9195 volte
correggendo quello, va tutto a posto.

:idea: Per utilità di chi legge, le macro allegate al database devono essere copiate in una nuova libreria, creata appositamente, di nome "helios", per funzionare (oppure modificando i collegamenti negli eventi, ma ci sarebbe sempre quello spiacevole messaggio sulla sicurezza). All'apertura del db viene lanciato automaticamente un formulario, premendo un pulsante viene chiuso formulario e database.
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
---
Sergio Corato
LibO 6.x su Ubuntu 18.04 / OOo 4.x su Windows XP/10 (VirtualBox)
https://efatto.it
Dr.Cuga
Messaggi: 8
Iscritto il: domenica 11 aprile 2010, 22:06

Re: Errore Macro

Messaggio da Dr.Cuga »

Grazie :) a buon rendere
Windows XP SP3
OpenOffice.org v3.2
Rispondi