Pagina 1 di 1

Creazione menu e ricerca tramite form

Inviato: venerdì 8 aprile 2011, 14:28
da marcelotero
Intanto salve a tutti,sono nuovo del forum.Mi sono iscritto dopo aver letto vari topic alla ricerca della soluzione al mio problema,senza trovarlo
Ora lo spiego

Sto progettando un semplice (almeno nella mia testa!) database per lavoro,in cui ho una tabella dove registrare delle quotazioni.
Ho creato una tabella principale contenente tutti i campi che vanno inseriti tramite formulario (creato e funzionante)
Ho creato delle tabelle a parte per alcuni campi,dove il valore dev'essere selezionato da un elenco di valori (la tabella appunto) tramite combobox (credo si chiami così,il menu a tendina per intenderci).

Ora,quello che vorrei fare:

1) creare una sorta di MENU che,attraverso semplici pulsanti,mi colleghi ad altri formulari per inserire i record nelle varie tabelle.
L'unica cosa che sono riuscito a capire finora è che devo creare una Macro e assegnarla ai vari pulsanti.Mi sono imbattuto in alcune righe di codice come
openForm,ma sinceramente non capisco bene i valori da impostare

2)creare un formulario con tutti i campi della tabella principale,campi che possono essere riempiti singolarmente o combinati,e che mi servano da RICERCA (o filtro) per trovare tutte le righe della tabella contenenti quei valori.
Questo,leggendo e rileggendo,devo ancora capire se si può fare!

Sarei grato se qualcuno mi desse qualche dritta in merito,eventualmente se servisse potrei linkare il database che ho creato finora,tanto i dati immessi sono solamente inventati per prova e non è nulla di personale

Un grazie in anticipo a chi mi darà una mano

Re: Creazione menu e ricerca tramite form

Inviato: venerdì 8 aprile 2011, 15:32
da r.vanoni
questi semplici esempi che ho trovato in questo forum forse ti possono aiutare. Ciao

Re: Creazione menu e ricerca tramite form

Inviato: venerdì 8 aprile 2011, 15:52
da marcelotero
ti ringrazio intanto della risposta

punto 1) il file di esempio dei dischi l'avevo già scaricato da un altro topic,però non sono riuscito a capire come adattarlo alle mie esigenze.Di diverso da quell'esempio c'è che io per ogni pulsante apro un form diverso,quindi non ho interesse che sia filtrato.Ma guardando la Macro non ho idea di come "semplificarla" per dare semplice istruzione di aprire un form

punto 2) wow il file Disegni è impostato esattamente come intendevo.Solamente che facendo una prova nel file di esempio,cercando con nome o parametro,mi da un errore di script aprendomi la schermata di visual basic..a te funziona?

Re: Creazione menu e ricerca tramite form

Inviato: sabato 9 aprile 2011, 9:02
da giannidalmi
vedi un pò il post di franziska
http://user.services.openoffice.org/it/ ... =13&t=1617
buon lavoro ciao

Re: Creazione menu e ricerca tramite form

Inviato: sabato 9 aprile 2011, 18:59
da r.vanoni
Per far funzionare il file disegni.odb devi registrare il database con:
Strumenti > Opzioni > Openoffice.org Base > Database > Nuovo > Sfoglia e trova il file disegni.odb sul tuo computer e premi OK

Una volta registrato tutto dovrebbe funzionare. Nel forum puoi approfondire il discorso sulla necessità di registrare il database per un corretto funzionamento delle procedure esempio qui
http://user.services.openoffice.org/it/ ... =13&t=1153
Ciao

Re: Creazione menu e ricerca tramite form

Inviato: sabato 9 aprile 2011, 21:29
da marcelotero
ho registrato il database disegni e ora la ricerca funziona correttamente.Lunedì cerco di studiarlo e capire come costruire il mio di menu

Invece il file biblioteca del comune l'avevo già scaricato e non funzionava,dava errori vari.Ho provato a registrare anche questo database ma niente,ogni pulsante mi da errore

Re: Creazione menu e ricerca tramite form

Inviato: sabato 9 aprile 2011, 22:13
da giannidalmi
però nel sito http://www.comunecampagnano.it/gnu/bibl ... /index.htm ci sono tutte le spiegazioni per farlo funzionare e ti garantisco che funziona ed è molto utile
ci vuole un pò di pazienza per leggere e provare....
auguri

Re: Creazione menu e ricerca tramite form

Inviato: lunedì 11 aprile 2011, 10:19
da marcelotero
giannidalmi ha scritto:però nel sito http://www.comunecampagnano.it/gnu/bibl ... /index.htm ci sono tutte le spiegazioni per farlo funzionare e ti garantisco che funziona ed è molto utile
ci vuole un pò di pazienza per leggere e provare....
auguri
io ho provato ma al di la di fare quanto è scritto,non riesco a capire i "perchè" si facciano certe operazioni,che è quello che mi interessa per riuscire a capire i meccanismi e creare quello che serve a me.

Per quanto riguarda il database Disegni,arrivo a capire che il pulsante "x" attiva una certa Macro,ma poi leggo la Macro e che faccio?Non so nulla di programmazione,per me quelli sono geroglifici..

Re: Creazione menu e ricerca tramite form

Inviato: lunedì 11 aprile 2011, 11:10
da marcelotero
Vi faccio un pratico esempio,giusto per far capire quello che intendo
Sono partito dalla cosa più semplice,aprire un form da un pulsante
Questo è il codice che ho copiato dalla guida del comune di campagnano

Codice: Seleziona tutto

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)
      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
sub Q_libri
   subDisplayForm("prova.odb","Inserisci_nuovo_Fornitore")
end sub 
Il nome del database è prova
Il nome del form Inserisci nuovo Fornitore

Provandolo dall'editor codice mi da il seguente errore:
Errore di runtime Basic.L'argomento non è opzionale
evidenziando questa parte di codice

Codice: Seleziona tutto

oDatabase = fnGetOpenDatabase(sdatabaseName)
ho provato ad assegnare lo stesso la macro ad un pulsante,e provando tramite pulsante l'errore che mi da è diverso e cioè:
Errore di runtime Basic.Valore per la proprietà errato
Evidenziando questo codice:

Codice: Seleziona tutto

function fnGetOpenDatabase(sDatabaseName as string)
Cosa significano questi errori?Forse dovevo modificare altri parametri oltre al nome database e nome form?

Re: Creazione menu e ricerca tramite form

Inviato: lunedì 11 aprile 2011, 16:25
da giannidalmi
questa risposta non ti sarà di grande aiuto, ma un pò potrà consolarti
e mi piacerebbe che qualcuno ci dicesse qualcosa di questo errore
ho controllato la tua macro e siccome era uguale alla mia, cioè copiata dallo stesso posto, ho fatto un piccolo db e ho inserito la macro:
per un pò di volte il messaggio (msgbox) mi indicava come nome del db "prova.odb" e la macro mi dava il tuo errore. poi ho chiuso, aperto alcuni miei Db che funzionavano; poi ho riaperto 'prova' e il messaggio era "file:///C:/<nomepercorso>/prova.odb" e la macro funzionava!
sarei curioso anch'io di sapere il motivo.. ed il rimedio; aspetto Vladko, Giorgiofoga, e altri
ciao

Re: Creazione menu e ricerca tramite form

Inviato: lunedì 11 aprile 2011, 21:33
da giorgiofoga
rispondo un po' a caso e tirando ad indovinare:

io non uso la macro descritta ma bensì quella che ho pubblicato su LIBREOFFICEFORUM (la siamo in meno e si trova subito)

alcune variabili si "resettano" alla chiusura del db altre alla chiusura delle macro

enumeration da quello che so io rende i valori "caricati" .... credo che per usarlo dovreste caricare tutti i form del tuo db prima di usarli (questo spiega perchè giannidalmi ha trovato tutto ok alla riapertura del db dopo apertura di altri). se non si carica nulla .... ovviamente è tutto vuoto ma tu chiedi di leggervi dentro. Il valore "nullo" non è ammesso, ma al primo avvio il valore di enumeration è "nullo" per forza. quindi errore. Tra l'altro pare che la funzione sia disponibile per tutti i db. [risposta a caso, non ho mai usato enumeration]

queste sono le cose che ho notato.

sul sito del comunedicampagnano tra l'altro esiste anche la versione "corretta" della base sugli ultimi aggiornamenti e in rifrimento alle spiegazioni delle macro (dove si lamenta che in troppi gli scrivono per chiarimenti). Ma ripeto io ne uso una pubblicata su LIBREOFFICEFORUM. senza funzioni. in oltre la ho pubblicato anche il metodo per fare il pingpong tra i formulari e la spiegazione per il "lanciatore".

Spero che altri mi possano correggere dove ho sbagliato e aggiungere qualcosa per aiutare .....

ciao ciao

Re: Creazione menu e ricerca tramite form

Inviato: lunedì 11 aprile 2011, 21:45
da giorgiofoga
(prova)

in seconda battuta ..... la macro che mettete ad esempio potrebbe tornare utile se si volesse visualizzare più di un form per volta. Il lavoro che stò facendo però prevede questa possibilità solo nel caso di aggiornare le listbox e relative tabelle direttamente nel form visualizzato e che le riporta. ma per fare questo ho ritenuto più interessante l'uso dei dialog. Inserisco, confermo e zac tutto il ciclo è completato (no aggiornamenti manuali e tutto il resto).
L'uso di enumeration però è una "scorciatoia" rispetto alla "maratona" dell'uso dei listner.

Non sarebbe male che qualche altro intervenisse mettesse un po' di "farina".

riciariciao

Re: Creazione menu e ricerca tramite form

Inviato: lunedì 11 aprile 2011, 22:55
da codicem
Per aprire un formulario interno al database puoi utilizzare il seguente codice:

Codice: Seleziona tutto

Sub ApriForm
   Dim InteractionHandler As Object
   InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
   ThisDatabaseDocument.CurrentController.connect("","")
   ThisDatabaseDocument.FormDocuments.getByName ( "NomeTuoFormulario" ).open
End Sub

Re: Creazione menu e ricerca tramite form

Inviato: martedì 12 aprile 2011, 7:26
da giannidalmi
grazie giorgiofoga
sapevo di poter contare sul forum e su te
non ho capito tutto, ma qualcosina piano piano.. anche in openoffice riesco a capire oltre che fare
intanto penso che marcelotero abbia trovato qualcosa di risolutivo
ciao

Re: Creazione menu e ricerca tramite form

Inviato: martedì 12 aprile 2011, 13:58
da marcelotero
grazie a codicem e giorgiofoga,tramite vostri esempi ho costruito la seguente Macro per il mio menu

due righe ho capito a cosa servono (chiudere una finestra e aprire un form.Il resto rimane a me ignoto,ma tant'è funziona..

Codice: Seleziona tutto

Sub Fornitore
   Dim InteractionHandler As Object
   InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
   ThisComponent.CurrentController.Frame.close(True)
   ThisDatabaseDocument.FormDocuments.getByName ( "Inserisci nuovo Fornitore" ).open
End Sub

Sub Luogo
   Dim InteractionHandler As Object
   InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
   ThisComponent.CurrentController.Frame.close(True)
   ThisDatabaseDocument.FormDocuments.getByName ( "Inserisci nuovo Luogo" ).open
End Sub

Sub MENU
   Dim InteractionHandler As Object
   InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
   ThisComponent.CurrentController.Frame.close(True)
   ThisDatabaseDocument.FormDocuments.getByName ( "MENU" ).open
End Sub

Sub RICERCA
   Dim InteractionHandler As Object
   InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
   ThisComponent.CurrentController.Frame.close(True)
   ThisDatabaseDocument.FormDocuments.getByName ( "RICERCA" ).open
End Sub

Sub quotazione
   Dim InteractionHandler As Object
   InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
   ThisComponent.CurrentController.Frame.close(True)
   ThisDatabaseDocument.FormDocuments.getByName ( "Inserisci nuova quotazione" ).open
End Sub

sub finestra_close( oEvent as object )
	ThisComponent.CurrentController.Frame.close(True)
	ThisDatabaseDocument.FormDocuments.getByName ( "MENU" ).open
end sub
ora mi resta la parte più difficile,la ricerca tramite parametri che mi restituisca i record salvati,non ho proprio idea da dove possa partire.
Mi potete aiutare?

Re: Creazione menu e ricerca tramite form

Inviato: mercoledì 13 aprile 2011, 10:04
da marcelotero
Sono riuscito a impostare una sorta di filtro,ma ho ancora dei problemi
Il codice che ho copiato è questo:

Codice: Seleziona tutto

Sub FiltraPerFornitore(oEv)
oModel = oEv.Source.Model
sTestoPerRicerca = oEv.Source.getAccessibleContext.Text
oForm = oModel.Parent
oForm.Filter = " ( ""Quotazioni"".""FORNITORE"" LIKE '%" & sTestoPerRicerca & "%' )"
oForm.reload()
End Sub
ripetuto per ogni campo che voglio filtrare

PROBLEMA 1:
riesco a farlo funzionare solo con le caselle di testo.Se volessi usare una combobox,come devo fare?Ho provato a collegare questa macro a una combobox ma mi restituisce questo errore
"Proprietà o metodo non trovati: Text"

PROBLEMA 2:
i campi di ricerca li ho inseriti in un formulario in cui sono presenti tutti i campi di una tabella ("Quotazioni" nel mio caso)
Il problema è che mi visualizza in automatico tutti i record inseriti,quindi se faccio filtra in base a uno o più campi,e nessun record corrisponde a quanto filtrato,mi continua a visualizzare il primo record salvato (che non corrisponde ai filtri!)
Non so se mi sono spiegato

Sapete aiutarmi?

Re: Creazione menu e ricerca tramite form

Inviato: mercoledì 13 aprile 2011, 11:35
da codicem
Per la combobox puoi usare il seguente codice:

Codice: Seleziona tutto

Sub seleziona
oForm = ThisComponent.DrawPage.forms.MainForm
dataf=oForm.GetByName("ComboBox1")
combo=doppio(dataf.text)
oForm = ThisComponent.Drawpage.Forms.MainForm
oForm.Filter ="( ""Quotazioni"".""FORNITORE"" LIKE '"+combo+"' )"
oForm.reload
End Sub
Function doppio(U)
' raddoppia gli apostrofi
U = Join(Split(U, "'"), "''")
doppio=U
end function 
come vedi c'è anche la funzione doppio che ti evita problemi in caso di presenza di apici.
Cmq puoi anche scaricarti questo dove puoi trovare delle risposte:http://sourceforge.net/projects/ooodocs ... 0raccolta/

Re: Creazione menu e ricerca tramite form

Inviato: mercoledì 13 aprile 2011, 12:49
da marcelotero
ti ringrazio per il codice per la combo,che funziona (grazie anche per il link alle faq che leggerò nel pomeriggio)
non mi è ben chiara l'utilità del doppio apice

Però se inserisco due campi di ricerca tramite combo nello stesso form,non filtra correttamente
Forse per fare filtrare i due campi insieme bisogna unire le macro in qualche modo?
cioè per visualizzare i record contenenti due o più valori,ENTRAMBI i valori

Re: Creazione menu e ricerca tramite form

Inviato: mercoledì 13 aprile 2011, 14:56
da codicem
Prova a vedere questo post e vedi se ti può aiutare: http://user.services.openoffice.org/it/ ... iltra#p479

Re: Creazione menu e ricerca tramite form

Inviato: mercoledì 13 aprile 2011, 15:40
da marcelotero
codicem ha scritto:Prova a vedere questo post e vedi se ti può aiutare: http://user.services.openoffice.org/it/ ... iltra#p479
Io avrei impostato così (solo per 3 campi per testare se funziona)
Però quando metto 3 parametri,mi restituisce solo un record anzichè 2.Come mai?

Codice: Seleziona tutto

SUB ricercaparametri (oEv)
dim oModel as object
dim oForm as object
dim ctlFORNITORE as object
dim ctlLUOGO1 as object
dim ctlTIPO as object
dim sFORNITORE as string
dim sLUOGO1 as string
dim sTIPO as string

oModel = oEv.Source.Model
oForm=oModel.Parent
ctlFORNITORE =oForm.GetByName("COMBOFORNITORE")
ctlLUOGO1 = oForm.GetByName("COMBOLUOGO1")
ctlTIPO = oForm.GetByName("COMBOTIPO")
sFORNITORE =ctlFORNITORE.text
sLUOGO1= ctlLUOGO1.text
sTIPO= ctlTIPO.text
'print sFORNITORE
'print sLUOGO1
'print sTIPO

oForm.Filter = " (""Quotazioni"".""FORNITORE"") LIKE '%" & sFORNITORE & "%'  AND  (""Quotazioni"".""LUOGO 1"") LIKE '%" & sLUOGO1 & "%'  AND  (""Quotazioni"".""TIPO"") LIKE '%" & sTIPO & "%' "
oForm.reload()
end sub

Re: Creazione menu e ricerca tramite form

Inviato: giovedì 14 aprile 2011, 10:59
da marcelotero
ragazzi,
forse quello che fa al caso mio è più una ricerca basata su una query.Posto sotto il codice che ho provato ad inserire,prendendo spunto dal databse esempio "Disegni"

Codice: Seleziona tutto

Sub TrovaParametri

	Dim Ctl As Object
	Dim Form as object
	Dim Doc as object
	Dim Forms as object
	Dim I as Integer
	Dim DatabaseContext As Object
	Dim DataSource As Object
	Dim sFornitori as string	
	Dim sLuogo1 as string		
	Dim QueryDefinitions as Object
	Dim QueryDefinition as object
	Dim stringa as string

	Doc=StarDesktop.CurrentComponent
	Forms=Doc.Drawpage.Forms
	For I = 0 to Forms.Count - 1
		Form = Forms.GetByIndex(I)
		if Form.HasByName("Trova") then
			Ctl = Form.GetByName("ComboFornitori")
			sFornitori=Ctl.text
			if sFornitori="-" then sFornitori=""	
			Ctl = Form.GetByName("ComboLuogo1")
			sLuogo1=Ctl.text
			if sLuogo1="-" then sLuogo1=""
		End If
	Next I	


	DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
	DataSource = DatabaseContext.getByName("prova.odb")

	
	stringa = "FORNITORE , TIPO , ADR , LUOGO 1 , LUOGO 2 , LUOGO 3 , LUOGO 4 , LUOGO 5 , ISO/BOX , PREZZO , DATA OFFERTA , TIPO OFFERTA , NOTE FROM Quotazioni WHERE FORNITORE LIKE " & "'" & "%" & sFornitori & "%" & "'"  & " AND " & "LUOGO 1 LIKE  " & "'"  & "%" & sLuogo1 & "%" & "'"  
	
	QueryDefinitions=DataSource.getQueryDefinitions() 	


	QueryDefinition=QueryDefinitions.getByName("Ricerca1")
	

	QueryDefinition.Command=stringa
	it = ThisComponent.DrawPage.Forms(0).ActiveConnection
	doc = OpenQuery(it, "prova", "Ricerca1")

end sub	
L'errore che mi da è il seguente

"Errore di runtime Basic.Si è verificata un'eccezione
Type: com.sun.star.container.NoSuchElementException
Message: prova"

Io ho inserito il nome del databse,che è appunto prova..cosa significa questo errore?

Re: Creazione menu e ricerca tramite form

Inviato: venerdì 15 aprile 2011, 15:53
da marcelotero
qualche idea/suggerimento/consiglio? :crazy:

Re: Creazione menu e ricerca tramite form

Inviato: venerdì 15 aprile 2011, 16:38
da codicem
Potresti postare qui il file così magari si può vedere meglio, così controlliamo anche i filtri su form tramite combobox.

Re: Creazione menu e ricerca tramite form

Inviato: venerdì 15 aprile 2011, 19:58
da d4rkheart
Perdonatemi l'intrusione, ma per una neofita come me e che a stento sa creare una rubrica telefonica con base per fare una ricerca tra i dati inseriti deve per forza perdersi tra macro? :crazy:

Re: Creazione menu e ricerca tramite form

Inviato: venerdì 15 aprile 2011, 22:27
da codicem
d4rkheart ha scritto:Perdonatemi l'intrusione, ma per una neofita come me e che a stento sa creare una rubrica telefonica con base per fare una ricerca tra i dati inseriti deve per forza perdersi tra macro? :crazy:
No, dipende dal tipo di ricerca che ti serve ma puoi benissimo utilizzare formulari e sottoformulari collegando due tabelle tra loro.

Re: Creazione menu e ricerca tramite form

Inviato: domenica 17 aprile 2011, 21:14
da d4rkheart
@codicem, grazie per la risposta. Ok, proverò a leggere un pò di guide anche se mi sembra tutto aramaico. Chiedo ancora scusa per l'intrusione.

Re: Creazione menu e ricerca tramite form

Inviato: martedì 26 aprile 2011, 13:49
da marcelotero
codicem ha scritto:Potresti postare qui il file così magari si può vedere meglio, così controlliamo anche i filtri su form tramite combobox.
chiedo scusa per il ritardo ma sono stato all'estero parecchi giorni
ecco il file di prova dove sto cercando di capire qualcosa (scusate la confusione delle mille macro)
Questa interessata è la Sub TrovaParametri

Re: Creazione menu e ricerca tramite form

Inviato: martedì 26 aprile 2011, 17:14
da codicem
marcelotero ha scritto: chiedo scusa per il ritardo ma sono stato all'estero parecchi giorni
ecco il file di prova dove sto cercando di capire qualcosa (scusate la confusione delle mille macro)
Questa interessata è la Sub TrovaParametri
Qui il file corretto per la funzione TROVA.
Prova a guardare anche il formulario ComboBox.