[RISOLTO] Macro per recuperare campo data da una vista

Discussioni sulle caratteristiche di database
Rispondi
CarloIT
Messaggi: 35
Iscritto il: lunedì 12 settembre 2016, 17:40

[RISOLTO] Macro per recuperare campo data da una vista

Messaggio da CarloIT »

Salve,
mi riferisco all'ultimo post viewtopic.php?f=13&t=7840

Soltanto che qui c'è qualche complicazione in più.
Le tabelle sono 3 in relazione tra loro con chiavi.
Dal formulario un pulsante attiva una macro che esegue una select non su una tabella ma su una vista, recuperando
un insieme di date.
La vista c'è proprio perché il database è "denormalizzato"
Il problema è quello di gestire poi queste date, per il momento sarebbe sufficiente visualizzarle in output.
In realtà va in errore ed è lo stesso errore che si verifica nel caso reale:

Errore di runtime BASIC.
Si è verificata un'eccezione
Type: com.sun.star.container.NoSuchElementException
Message: Non esiste alcun elemento denominato 'data ordine'..


Non riesco a capire perché mi dice che non esiste alcun elemento. Con la tabella funzionava, non capisco se è un problema di Vista

Grazie
Allegati
Esempio con data.odb
(15.76 KiB) Scaricato 182 volte
Ultima modifica di CarloIT il lunedì 7 novembre 2016, 17:48, modificato 1 volta in totale.
LibreOffice 5.1.4.2
Windows 7 Enterprise
Avatar utente
bydindi
Volontario
Volontario
Messaggi: 258
Iscritto il: lunedì 21 febbraio 2011, 10:16

Re: Macro per recuperare campo data da una select su vista

Messaggio da bydindi »

Ciao

Premesso che non sono un esperto di macro...

Il formulario lo hai creato in base a quali dati? perché se vado in modifica formulario e poi vado nelle proprietà modulo noto che nella sezione dati c'è:
Tipo di contenuto: Tabella
Contenuto: Tabella nomi

ora, nella tabella nomi non c'è nessun campo data... forse è per quello? forse va selezionata Vista dati anziché Tabella nomi?

inoltre voglio darti un consiglio:
nella tabella Ordinativi hai creato un campo con il nome "data ordine" (che poi dovrebbe essere il campo "incriminato"), sarebbe meglio se lo modificassi ad esempio in "data_ordine" cioè eliminando lo spazio tra "data" e "ordine".

Paolo
OOo 4.1.1 su Windows Vista
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Macro per recuperare campo data da una select su vista

Messaggio da Gaetanopr »

Prova in questo modo

Codice: Seleziona tutto

Sub ProvaQuery (oEvent As Object) 'Button > Execute > event
DIM Data AS Long 
	oForm = oEvent.Source.Model.Parent 'MainForm from Button
	oStatement = oForm.ActiveConnection.createStatement() 'Create an SQL statement object
	sSQL = "Select  ""ID_NOME"", ""data ordine"" from ""Vista Stati"" Where ""Stato"" = 'annullato' " 
	oResult = oStatement.executeQuery(sSQL)
		if oResult.next = True Then
		while oResult.next
       IDnome = oResult.Columns.getByName("ID_NOME").int
       Data = oForm.getByName("data").CurrentValue
       msgbox Data
    wend
    Else
    oForm.reload() 'continua senza fare nulla
    End If

End Sub
il valore non va recuperato usando la proprietà columns in quanto nella tabella non esiste quel campo ma va recuperato direttamente dal valore presente sul campodata
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
CarloIT
Messaggi: 35
Iscritto il: lunedì 12 settembre 2016, 17:40

Re: Macro per recuperare campo data da una select su vista

Messaggio da CarloIT »

Ciao a tutti,
Grazie ad entrambi per i suggerimenti:
ho modificato un pò l'esempio integrando le soluzioni suggerite:
Il formulario punta direttamente sulla vista.
"data ordine" è diventato "data_ordine" (sgombriamo il campo da dubbi su spazi etc... )
cambiato codice con il metodo CurrentValue.
Dà sempre un messaggio di errore, anche se diverso
"Errore di runtime BASIC.
Valore per la proprietà errato"


Da notare che se commento l'istruzione

Codice: Seleziona tutto

Data = oForm.getByName("data_ordine").CurrentValue 
La routine funziona e mi dà correttamente ad esempio gli ID_nome. quindi il problema sembra proprio essere sul campo data....

Grazie
Allegati
Esempio con data 1.0.odb
(16.13 KiB) Scaricato 163 volte
LibreOffice 5.1.4.2
Windows 7 Enterprise
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Macro per recuperare campo data da una select su vista

Messaggio da Gaetanopr »

Non devi fare un mix delle soluzioni proposte, la macro che ti ho postato va usata senza aver fatto nessuna modifica, devi usarla sul tuo primo file
Come detto prima legge il dato dal campodata presente sul formulario e non dai campi presenti nelle tabelle.
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
CarloIT
Messaggi: 35
Iscritto il: lunedì 12 settembre 2016, 17:40

Re: Macro per recuperare campo data da una select su vista

Messaggio da CarloIT »

ciao,
ho provato a modificare l'esempio originale.
errore è il seguente in allegato.
Grazie
Allegati
errore.png
LibreOffice 5.1.4.2
Windows 7 Enterprise
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Macro per recuperare campo data da una select su vista

Messaggio da Gaetanopr »

Io uso solo Openoffice e dimentico sempre che su LibreOffice dalla versione 4.1.1 i campi data vengono trattati diversamente, da questa versione libreoffice restituisce una struttura dati da estrapolare (giorno, mese, anno)
Ho cambiato la macro facendo in modo che funzioni sia con Libreoffice che con Openoffice.
Allegati
Esempio con data.odb
(15.88 KiB) Scaricato 190 volte
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
CarloIT
Messaggi: 35
Iscritto il: lunedì 12 settembre 2016, 17:40

Re: Macro per recuperare campo data da una select su vista

Messaggio da CarloIT »

Ok, l'esempio funziona. Il problema però è che a me serve un controllo sulla data selezionata da una vista e non da un formulario.
Faccio il seguente esempio. Supponiamo che abbia una tabella nomi ed una tabella ordinativi.
La tabella nomi viene continuamente aggiornata (inserimento cancellazione etc.)
Anche la tabella ordinativi viene continuamente aggiornata con nuove date aggiunta di ordinativi e cambiamento di stato.
A me serve un controllo su tutti gli ordinativi (per esempio) in stato annullato, per verificare se la data di ogni ordinativo annullato sia inferiore o superiore ad una certa data x. Ovviamente non posso usare un formulario, devo estrarre i dati da una vista dinamica.
In parole semplici a me servirebbe la stessa gestione che viene fatta sull'ID_NOME per esempio, anche sulla data .

Grazie ancora della pazienza e disponibilità
LibreOffice 5.1.4.2
Windows 7 Enterprise
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Macro per recuperare campo data da una select su vista

Messaggio da Gaetanopr »

CarloIT ha scritto: In parole semplici a me servirebbe la stessa gestione che viene fatta sull'ID_NOME per esempio, anche sulla data .

Codice: Seleziona tutto

data = oResult.Columns.getByName("data ordine").string
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
CarloIT
Messaggi: 35
Iscritto il: lunedì 12 settembre 2016, 17:40

[RISOLTO] Macro per recuperare campo data da una select su v

Messaggio da CarloIT »

Funziona.
PS
Un pò di confusione con la gestione date. Nel caso di un formulario la data la prendo con l'istruzione

Codice: Seleziona tutto

 Ctrl = oForm.getByName("data")
       xxx = Ctrl.currentvalue etc
Se la devo prendere dalla select metodo

Codice: Seleziona tutto

oResult.Columns.getByName("data").string
Grazie 1000
LibreOffice 5.1.4.2
Windows 7 Enterprise
Rispondi