PDA

View Full Version : [access] far aprire un report diverso in base al valore di una casella


evl
22-11-2013, 10:12
Ciao a tutti,

ho una tabella con alcune informazioni:
nome prodotto, numero di serie del prodotto, nazione di destinazione etc.

poi ho creato un report che in pratica èuna etichetta da stampare con alcune scritte precompilate (perchè non variano) e altre completate con i valori che ci sono nella tabella (nome prodotto, numero serie, nazionalità...)

Ora questo report-etichetta ha le scritte precompilate in italiano.

Vorrei creare ora un report con le varie lingue e far si che quando clicco nella maschera una certa riga, mi appaia il report in base a cosa cè scritto nella colonna NAZIONALITÀ (ora si apre ovviamente solo quello in italiano).

Per capirci: se nella colonna c'è scritto IT vorrei che si aprisse il report in italiano.
Se c'è scritto GB, vorrei che si aprisse quello in inglese...


Sapreste aiutarmi?


Grazie infinite

!fazz
22-11-2013, 10:36
Ciao a tutti,

ho una tabella con alcune informazioni:
nome prodotto, numero di serie del prodotto, nazione di destinazione etc.

poi ho creato un report che in pratica èuna etichetta da stampare con alcune scritte precompilate (perchè non variano) e altre completate con i valori che ci sono nella tabella (nome prodotto, numero serie, nazionalità...)

Ora questo report-etichetta ha le scritte precompilate in italiano.

Vorrei creare ora un report con le varie lingue e far si che quando clicco nella maschera una certa riga, mi appaia il report in base a cosa cè scritto nella colonna NAZIONALITÀ (ora si apre ovviamente solo quello in italiano).

Per capirci: se nella colonna c'è scritto IT vorrei che si aprisse il report in italiano.
Se c'è scritto GB, vorrei che si aprisse quello in inglese...


Sapreste aiutarmi?


Grazie infinite

fai tutto con quattro righe in vba


if campoNazionalità.value="IT" then
DoCmd.OpenReport "ReportItaliano", acViewPreview
elseif campoNazionalità.value="GB" then
DoCmd.OpenReport "ReportInglese", acViewPreview
else
a=msgbox("lingua non specificata")
end if

evl
22-11-2013, 12:52
Prima di tutto grazie.

lo devo inserire nell'evento con il doppio click?
(io voglio che il report appaia con due click)
poi ho selezionato generatore di codice e ho inserito il tuo codice modificando solo il nome dei campi e dei report, inserendolo tra le righe

Private Sub ID_DblClick(Cancel As Integer)

End Sub


So che non si fa cosi, altrimenti avrebbe funzionato.
Era solo per spiegarti le stupide operazioni che o compiuto

evl
22-11-2013, 13:25
Non ho specificato che sono abbastanza a digiuno di access e programmazione.
Sto imparando un po' alla volta

!fazz
22-11-2013, 14:18
Prima di tutto grazie.

lo devo inserire nell'evento con il doppio click?
(io voglio che il report appaia con due click)
poi ho selezionato generatore di codice e ho inserito il tuo codice modificando solo il nome dei campi e dei report, inserendolo tra le righe

Private Sub ID_DblClick(Cancel As Integer)

End Sub


So che non si fa cosi, altrimenti avrebbe funzionato.
Era solo per spiegarti le stupide operazioni che o compiuto

non sono stupide operazioni, vba funziona esattamente così doppio click sull'evento e generatore di codice per impostare il codice per l'evento, fai un debug passo passo per vedere cosa succede (in vba clicca sulla barra grigia a sinistra del codice e apparirà un pallino, poi esegui il codice e vedrai che si fermerà sulla riga dove hai messo il pallino e da li puoi eseguire passo passo le istruzioni

evl
22-11-2013, 17:03
Questo è quello che appare:

http://imageshack.com/a/img713/1046/10v0.jpg (http://imageshack.com/i/jt10v0j)


nella mia tabella il campo Nazione è un elenco di valori (casella combinata).

Il report si chiama ETICHETTA ITA e quella di prova ETICHETTA EN

Quando faccio doppio click nella casella ID della maschera mi appare:
"errore di runtime '424':
Necessario oggetto"

!fazz
22-11-2013, 17:13
Questo è quello che appare:

http://imageshack.com/a/img713/1046/10v0.jpg (http://imageshack.com/i/jt10v0j)


nella mia tabella il campo Nazione è un elenco di valori (casella combinata).

Il report si chiama ETICHETTA ITA e quella di prova ETICHETTA EN

Quando faccio doppio click nella casella ID della maschera mi appare:
"errore di runtime '424':
Necessario oggetto"


perchè non hai un oggetto che si chiama campoNAZIONE quale è il name della tua combobox?

evl
23-11-2013, 09:17
si chiama "Nazione"

!fazz
23-11-2013, 09:23
Allora cancella campo

Inviato dal mio Nexus 5 utilizzando Tapatalk

evl
23-11-2013, 10:43
niente, continua a non funzionare

!fazz
23-11-2013, 10:45
Se il nome è giusto deve funzionare ( PS il nome non è l'etichetta

Inviato dal mio Nexus 5 utilizzando Tapatalk

evl
03-12-2013, 15:38
E' passato qualche giorno perchè purtroppo non ho avuto tempo da dedicare alla cosa.
Ho rimesso le mani oggi, ma non riesco a venirne a capo.
L'avrei messo qui:



non voglio che me lo ridai sistemato, ma vorrei capire cosa non funziona.

Grazie

p.s.

poi toglierei il link

!fazz
03-12-2013, 15:51
E' passato qualche giorno perchè purtroppo non ho avuto tempo da dedicare alla cosa.
Ho rimesso le mani oggi, ma non riesco a venirne a capo.
L'avrei messo qui:



non voglio che me lo ridai sistemato, ma vorrei capire cosa non funziona.

Grazie

p.s.

poi toglierei il link

scaricato

edit non hai maschere ne nulla per lanciare i report penso che ti risulta facile facile con 2 query spe

fatto



così funziona

i 2 report si basano su due query diverse che selezionano per nazionalità

avvisa che poi cancello

evl
03-12-2013, 17:22
fatto.

La maschera si apriva facendo doppio click sull'ID della maschera "questo o quello"
(questo era un database di prova).

Ora guardo il tuo.

Grazie

evl
04-12-2013, 13:57
rimetto il file modificato come era inizialmente (non quello che ti ho allegato) per farti capire cosa volevo fare:

https://drive.google.com/file/d/0B1k9cg1o01LbS0toVjJyM2lHeTA/edit?usp=sharing

Se nella maschera "questo o quello" fai doppio click nell'ID, si apre il report già filtrato con la sola riga di interesse.
Fatto questo io stampo l'etichetta (il report) con una stampante apposita per etichette.

Nella versione piu' evoluta, vorrei che si aprisse (sempre filtrato), l'etichetta personalizzata con la lingua in base alla nazione (ci sono due report, uno in italiano e l'altro parzialmente in inglese).

Grazie infinite per il tempo che mi stai dedicando

!fazz
04-12-2013, 16:25
rimetto il file modificato come era inizialmente (non quello che ti ho allegato) per farti capire cosa volevo fare:

https://drive.google.com/file/d/0B1k9cg1o01LbS0toVjJyM2lHeTA/edit?usp=sharing

Se nella maschera "questo o quello" fai doppio click nell'ID, si apre il report già filtrato con la sola riga di interesse.
Fatto questo io stampo l'etichetta (il report) con una stampante apposita per etichette.

Nella versione piu' evoluta, vorrei che si aprisse (sempre filtrato), l'etichetta personalizzata con la lingua in base alla nazione (ci sono due report, uno in italiano e l'altro parzialmente in inglese).

Grazie infinite per il tempo che mi stai dedicando

ok ci guardo

!fazz
04-12-2013, 16:30
Ok,
https://dl.dropboxusercontent.com/u/3996732/prova%20per%20inglese%20di%20ETICHETTE%20ITA.accdb
così funziona

il problema è che nella maschera non avevi il campo nazione (devi metterlo non visibile nella maschera )oltre a fare un filtraggio non corretto (si filtrano i dati nella query a seconda di quanto vale il valore del campo )

evl
04-12-2013, 17:27
Perfetto.

Ti ringrazio.
Domani a mente fresca capisco bene il tutto e poi lo traslo nel database vero.

Grazie infinite

!fazz
05-12-2013, 10:29
Perfetto.

Ti ringrazio.
Domani a mente fresca capisco bene il tutto e poi lo traslo nel database vero.

Grazie infinite


fai con calma

comunque il tuo codice aveva grossi problemi a livello concettuale (te lo scrivo qui così ti dò una chiave di lettura)

1) usavi una query che non faceva nulla su cui applicavi un altra query (autogenerata) per selezionare il report... i filtri sui report / maschere (condizione where all'apertura) non sono un gran che utilizzali solo se hai già una maschera che fà qualcosa e che in certi casi la puoi utilizzare per fare altro (il classico esempio di una maschera inserimento dati che vuoi riutilizzare per modificare un record) per altri usi meglio fare una query parametrica ovvero una query che prende i parametri per il where direttamente dalla maschera richiamandola con Forms!NomeMaschera!nomeControllo] (in colorato quello che devi cambiare per adattarlo alla tua maschera)

riguardo alla scelta di che report aprire la scelta devi farla su un controllo della maschera, nel tuo caso nella tua maschera mancava il combobox nazione ed era per quello che ottenevi l'errore necessario oggetto, nazione non esisteva (il codice vba lavora sulla maschera non sulla tabella associata) devi aggiungere il controllo e se non ti serve metterlo invisibile (Visibile no nella tabella della proprietà del controllo)

avevi un errore nell'if avevi controllavi che il campo avesse con valore EN invece di EX (che avevi nella tabella)

evl
05-12-2013, 10:33
Ci siamo quasi, ma riportato il tutto nel database originale si presenta un ulteriore problemino.

Si apre il report nella lingua corretta, ma si riferisce sempre alla prima riga del database.

come hai visto ci sono dei numeri di serie.

Se faccio doppio click sull'ID del prodotto numero 3 che richiede il report in inglese, il report è in inglese, ma i dati sono quelli del prodotto numero 1.

Su quello che mi hai passato te invece funziona tutto.

!fazz
05-12-2013, 10:43
Ci siamo quasi, ma riportato il tutto nel database originale si presenta un ulteriore problemino.

Si apre il report nella lingua corretta, ma si riferisce sempre alla prima riga del database.

come hai visto ci sono dei numeri di serie.

Se faccio doppio click sull'ID del prodotto numero 3 che richiede il report in inglese, il report è in inglese, ma i dati sono quelli del prodotto numero 1.

Su quello che mi hai passato te invece funziona tutto.

*hai modificato la query come l'ho modificata io con la parametrizzazione del campo ID?
* hai spostato l'origine del report alla query modificata?

evl
05-12-2013, 15:02
Ora sono in questa situazione.
Quando clicco sul pulsante che dovrebbe generarmi il report filtrato, mi appare una finestra con scritto: "immettere valore paramentro".
Io gli scrivo un ID e lui mi apre il report filtrato sull'ID che gli ho detto. (e quindi corretto).
Solo che sul tuo questo lo fa in automatico!

!fazz
05-12-2013, 15:29
Ora sono in questa situazione.
Quando clicco sul pulsante che dovrebbe generarmi il report filtrato, mi appare una finestra con scritto: "immettere valore paramentro".
Io gli scrivo un ID e lui mi apre il report filtrato sull'ID che gli ho detto. (e quindi corretto).
Solo che sul tuo questo lo fa in automatico!

ti appare perchè il campo non trova il campo ID

guarda e sistema il parametro della query (probabilmente non hai il campo ID nella maschera oppure hai dato al controllo contenente l'IDun (nome) diverso) oppure la maschera ha un altro nome e devi modificarla come ti ho scritto sopra

evl
05-12-2013, 16:16
Risolto,

mi son fatto ingannare dal termine maschera (l'ho considerata come tipo di oggetto e non come nome proprio della maschera).
Rinominata con il nome della mia maschera, la query si è sistemata e ora tutto funziona!

Grazie infinite

!fazz
05-12-2013, 16:32
Risolto,

mi son fatto ingannare dal termine maschera (l'ho considerata come tipo di oggetto e non come nome proprio della maschera).
Rinominata con il nome della mia maschera, la query si è sistemata e ora tutto funziona!

Grazie infinite

pensa che avevo cambiato il nome apposta per rendertelo più chiaro :D comunque l'importante che hai capito come si lavora con access

evl
05-12-2013, 17:24
In verità non ho ancora capito perchè è stato necessario passare tramite una query che filtrasse la riga.
E' proprio per fare in modo che apparisse solo il report della riga interessata?

!fazz
05-12-2013, 17:28
In verità non ho ancora capito perchè è stato necessario passare tramite una query che filtrasse la riga.
E' proprio per fare in modo che apparisse solo il report della riga interessata?

perchè è così che funziona un database

con un database relazionale tu hai una serie di dati suddivise in tabelle legate da una serie di relazioni e l'operazione che ti permette di estrarre i dati voluti è proprio la query

quindi si per creare un report con una sola etichetta ti serve proprio una query

evl
06-12-2013, 15:12
grazie

evl
10-02-2014, 13:57
if campoNazionalità.value="IT" then
DoCmd.OpenReport "ReportItaliano", acViewPreview
elseif campoNazionalità.value="GB" then
DoCmd.OpenReport "ReportInglese", acViewPreview
else
a=msgbox("lingua non specificata")
end if


Se volessi aggiungere una seconda condizione ad ogni se?
Cioè se e se allora..

Cosa dovrei scrivere a livello di sintassi?

Grazie

!fazz
10-02-2014, 14:38
Se hai due condizioni da verificare nello stesso if :
If condizione1 AND condizione2 then

Inviato dal mio Nexus 5 utilizzando Tapatalk

evl
10-02-2014, 17:19
grazie

!fazz
10-02-2014, 17:42
grazie

prego