Newsgroup: it.comp.appl.access
Titolo: Report Multilingua: ciclare controlli e recordset.

Sto cercando di rendere dinamica la creazione di un report che deve essere
generato in diverse lingue.
Ho visto di recente un post a riguardo, ma credo di non aver ben capito
l'impostazione.
In tale post si suggeriva, infatti, di utilizzare l'insieme fields del
recordset, ma credo che nel mio caso rischio di avere un numero eccessivo di
campi e quindi mi pare sconsigliabile l'utilizzo della struttura suggerita.
Pertanto, siccome il problema del multilingua non attiene ai dati del db
essendo rilevazioni statistiche numeriche, sto concentrando l'attenzione
sulla
generazione dinamica del contenuto (caption) delle etichette.
Non sapendo a priori quante lingue e soprattutto quante etichette mi
serviranno ho gestito la tabella in questo modo:
Tabella1
ID IDlingua testo_etichetta numero_etichetta
1     ita    ciao               1
2    ita     buona notte    2
3    ita     buon appetito 3
4    fra    bonjur            1
5    fra    bon nuit          2
6    fra    bon nuit          3
7    ing    hallo               1
8    ing    good night       2
9    ing    good night       3
Cosi potrò agevolmente aggiungere etichette, che hanno una numerazione
progressiva, nonchè nuove lingue.
Attraverso una query selezionerò di volta in volta la lingua prescelta.
Vorrei a questo punto attribuire alle etichette del report chiamate
convenzionalmente: E1, E2 ecc... il valore contenuto nel campo
testo_etichetta in modo tale che dove ho posizionato l'etichetta E2 compaia
per esempio "buona notte" e alla E1 "ciao" ... cosi via se scelgo le altre
lingue.
La prima strada è quella di fare un recordset
Dim db As dao.Database
Set db = CurrentDb
Dim rstEtichette As Recordset
Set rstEtichette = db.OpenRecordset("select * from tabella1 where
IDLingua='" & InputBox("che lingua? ") & "'")
Do Until rstEtichette.EOF
Dim i As Integer
For i = 1 To 5
    Me("E" & i).Caption = rstEtichette!testo_etichetta
Next
rstEtichette.MoveNext
Loop
ovviamente qui si impasta perchè mi da sempre l'ultimo valore ...
non capisco come fare a filtrare di volta in volta nel ciclo del recordset
il valore del n. di etichetta.
non è molto chiaro me ne rendo conto ... sarà l'ora!


Ciao Ciroteo,
se ho capito bene l'indirizzo dell'etichetta è contenuto nel campo
numero_etichetta
quindi
----
Dim db As dao.Database
Set db = CurrentDb
Dim rstEtichette As Recordset
Set rstEtichette = db.OpenRecordset("select * from tabella1 where
IDLingua='" & InputBox("che lingua? ") & "'")
Do Until rstEtichette.EOF
  Me("E" & rstEtichette!numero_etichetta ).Caption =  _
        rstEtichette!testo_etichetta
  rstEtichette.MoveNext
Loop
----
Ciao
-- 
Giorgio Rancati
[Office Access MVP]

 ha scritto nel
messaggio news:4460fdde$0$29098$5fc...@news.tiscali.it...

sembra perfetto ... grazie.
non so se hai seguito il 3d precedente relativo al problema dei multilingua.
A me pare più corretta in termini di normalizzazione questa mia soluzione: è
meglio una tabella con molti record piuttosto che con
molti campi. che dici?

 molti campi. che dici?
al 99% è meglio una o più tabelle con pochi campi e tanti record, poi
dipende da caso a caso.
Il tuo caso rientra in quel 99%
:-)


 ha scritto nel messaggio 
news:Ih78g.115950$A83.2...@twister1.libero.it...

la soluzione che avevo suggerito anell'altro 3d era banalissima perchè a 
detta dell'autore il report era una vera e propria banalità e le sue 
competenze in vba non erano alte.
Tiposso dire che  in caso di report multilingua non uso le tabelle ma dei 
file di testo contenuti in una sottocartella del programma. Ogni file ha 
come nome la lingua ed è così costruito
nome_etichetta=valore_etichetta
e me lo leggo al momento della stampa del report caricandolo in un array e 
poi assegnando i valori alle proprietà caption di ogni etichetta.
Con questo meccanismo ho il vantaggio che se un utente vuole aggiungere una 
nuova lingua al report deve solo aprire un file di testo di un altra lingua, 
tradurlo e salvarlo con il nome della nuova lingua.
Quindi senza lavorare dentro access
Ho preso spunto dai file di traduzione di innosetup.
Sicuramente non sarà la soluzione ottimale ma vedo che non da nessun 
problema in fatto di praticità e prestazioni.
Ciao, AEOM

 Ciao, AEOM
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 generazione dinamica del contenuto (caption) delle etichette.
Se ti può servire ti dico in generale come gestico io il multilingua nei
programmi.
Creo una tabella con 
IDMessaggio (alfanumetico che lo rappresenta)
RIFLingue (fa riferimento alla tabella lingue)
Genere (giusto per riunirli in categorie)
Testo
Su apertura del form lancio una funzione per ogni controllo tipo
Nomecontrollo.caption=Messaggio(IDMesaggio)
Il controllo ha per default un contenuto 'balordo' in modo da vedere
chiaramente quali sono i controlli ancora da sostituire.
Ciao