Newsgroup: it.comp.appl.access
Titolo: Elenco ordinato di controlli

Buongiorno a tutti,
devo stampami un elenco di controlli che stanno su una maschera,
possibilmente in ordine alfabetico.
L'elenco di controlli dove il tag è diverso da null lo so fare, ma
come risolvo senza ricorrere all'ordinamento di una matrice, ad una
funzione 'precotta' per copiare una stringa di testo in clipboard, e/o
alle funzionalità dell'editor di testo?
(Questo è ciò che ho fatto, volevo conoscere un metodo alternativo e
rapido).
grazie,
Panathos

Panathos
Ciao Panathos,
una possibile alternativa:
crei una tabella, la popoli con i nomi dei controlli, poi report 
ordinato con origine dati la tabella.
-- 
Cinzia [Office Access MVP]
_______________________
 
www.riolab.org
http://accessdaziacin.live.spaces.com
---------------------------------------- 


wrote:

Associa i controlli ad una TempTable con 2 Campi:
CampoOrdinamento: Alfabetico(lo userai per l'ordinamento)
CampoContenuto:Conterrà la proprietà Value del controllo...
Il report basato sulla TempTable...
In sostanza è come ti ha suggerito Cinzia... ma magari puoi evitare di
scrivere in una Tabella se le condizioni lo consentono.
@Alex

 scrivere in una Tabella se le condizioni lo consentono.
Grazie a te ed anche a Cinzia; avevo pensato di fare così ma volevo
evitare di passare per una tabella.
Eventualmente ci sono altri tipi di oggetti utilizzabili per fare
questa cosa? (anche istanziabili tramite ocx esterni).
Le collection vanno bene per associare una stringa nome ad oggetti; ma
poi sono percorribili solo tramite For Each. I recordset si possono
aprire solo su alcuni oggetti DAO... alternative?
grazie,
Panathos

"Fabrizio Conti (Panathos)"
Buongiorno a tutti,



-----------------------------------------------------------------------------
A me non è chiara la tua esigenza.
In che senso un elenco di controlli che stanno su una maschera?
Controlli TextBox o altro?
Bound o Unbound?
Ordine alfabetico del contenuto o del nome del controllo?
Vanno stampati tutti o solo quelli individuati da un Tag?
Qual è (solo per capire) il senso pratico della cosa?
Saluti. 

 Qual è (solo per capire) il senso pratico della cosa?
(Ne parlo al passato perché l'ho già fatto)
Dovevo ricostruire il funzionamento di una maschera che dà problemi, e
siccome non è stato usato codice per gestirne la logica; ma soltanto
decine di controlli "incastrati" l'uno nell'altro, devo verificare
esattamente cosa fa ognuno (alla fine devo estirparli quasi tutti,
avendo ricostruito le funzioni tramite codice).
La richiesta in effetti era solo il primo passo. Il successivo
consisteva nell'elencare i controlli nella cui stringa controlsource
fossero presenti controlli cancellati dalla maschera. Il terzo
passaggio consisteva nello "stanare" i controlli cancellati dal form
module della maschera.
Il primo passo è stato semplice; per gli altri due sono andato avanti
più a cornate che usando sub e funzioni.
L'elenco l'ho assemblato con un ciclo come questo:
for each ctl in msc.controls
  if nz(ctl.tag,"") <> "" then
    stringa = stringa & 
ctl.name
 & separatore & ctl.tag
  end if
next ctl
' poi una funzione credo presa dal sitocomune che copia in clipboard
la stringa
clipboardSetData stringa
Il resto me la sono vista con l'editor di testo e con parecchia
pazienza.
ciao,
Panathos

"Fabrizio Conti (Panathos)"








Risposta:
Beh, e per una cosa del genere (debug di un'applicazione fatta male) ti 
facevi scrupolo a usare una tabella temporanea?
O magari non c'avevi pensato e ti sei buttato sulle matrici?
;-)
Saluti.

 pazienza.
Fabri' ma non la stai complicando un po'?
Tanto (ma tanto) tempo fa avevo una routine che scriveva in tabella il 
nome dell'oggetto (form) il nome/tipo del controllo e tutti i 
nomi/valori di properties (valorizzati) . Veniva fuori un botto di roba 
ma incrociare il tutto era poi semplice. Mi dirai che recuperare tutto 
quello che succede via VBA e' un po' piu' complicato soprattutto se 
qualche smaliziato va a botte di "eval" passando gli oggetti piu' 
strampalati.
-- 
ac
y-1=x


wrote:

Le collection sono cosa ben diversa da quello che dici... come già ti
è stato detto.
La collection supporta l'inclusione del pointer di una Classe ed
un'oggetto è una Classe...!
Ne consegue che se inserisci l'oggetto con la Key di ricerca dovresti
avere risolto...!
Il ciclo poi non è necessariamente da fare con il For Each... ma anche
usando l'indicizzazione numerica...!
C'è un problema, che magari non è il tuo caso..., se fai un Requery
della Form, vengono persi i riferimenti dei Pointer agli oggetti...,
ma questo accade sempre, anche con Array di Classi(o controlli).
In pratica dopo un Requery devi rimappare la Collection.
@Alex

 ha scritto nel messaggio 
news:f134da0d-e97c-4ae4...@p25g2000pri.googlegroups.com...
Buongiorno a tutti,



grazie,
Panathos
-------------------------
Potresti accodare i dati del ciclo in un file di testo e quindi stamparlo.
Per l'ordinamento la vedo dura senza una tabella di appoggio o una 
matrice...a meno che i nomi dei controlli sono identici ai nomi dei campi 
della tabella di provenienza.
Altra strada è quella di usare l'analizzatore incluso in Access, magari 
limitando l'analisi ai soli nomi dei controlli: menù strumenti...Analizza.
Non so se quest'ultima possibilità sia percorribile anche da codice.
Ciao, Carlo 

 facevi scrupolo a usare una tabella temporanea?
In questo caso sarebbe stato un passaggio superfluo ciclare i
controlli, accodare nomi e valori in una tabella per poi estrarli per
metterli in clipboard.
La domanda l'avevo fatta per sapere se c'erano metodi alternativi che
mi sfuggissero. L'unica 'alternativa' proposta è stata la tabella
temporanea. Speravo in qualcosa di differente, ma pazienza.
ciao,
Panathos

 strampalati.
Se l'autore di queste app avesse saputo che farsene di un eval(),
probabilmente farei meno fatica. Cmq la domanda l'avevo fatta per
sapere se mi stava sfuggendo qualcosa di importante, fondante, etc...
ma vedo che purtroppo non ci sono grosse 'novità'.
ciao,
Panathos

 In pratica dopo un Requery devi rimappare la Collection.
Grazie, non lo sapevo.
ciao,
Panathos

 facevi scrupolo a usare una tabella temporanea?
In questo caso sarebbe stato un passaggio superfluo ciclare i
controlli, accodare nomi e valori in una tabella per poi estrarli per
metterli in clipboard.
??
La domanda l'avevo fatta per sapere se c'erano metodi alternativi che
mi sfuggissero. L'unica 'alternativa' proposta è stata la tabella
temporanea. Speravo in qualcosa di differente, ma pazienza.
-----------------------------------------------------------------------
A parte che non stiamo parlando di una "vera" applicazione ma di (strane) 
operazioni di debug su un'altra cosa.
Comunque, continuo a non capire la storia del "Clipboard": e fare un Report 
su quell'ipotetico temporaneo?
Saluti. 

 Non so se quest'ultima possibilità sia percorribile anche da codice.
Analizzatore? Mmm.... scopro adesso che può analizzare anche le
maschere, e... accidenti, facendogli analizzare la maschera su cui sto
lavorando, escono 113 pagine; interessante. Grazie Carlo!
ciao,
Panathos

 Potresti accodare i dati del ciclo in un file di testo e quindi stamparlo.
Esattamente quello che ho fatto, con l'unica variante di avere
accodato tutto in una stringa che poi ho copiato in clipboard e quindi
incollato nell'editor di testo.
cut
Analizzatore? Mmm.... scopro adesso che può analizzare anche le
maschere, e... accidenti, facendogli analizzare la maschera su cui sto
lavorando, escono 113 pagine; interessante. Grazie Carlo!
ciao,
Panathos
--------------------------------
Dalle opzioni puoi ridurre di moltissimo i dati forniti nel report.
Ciao, Carlo 

 su quell'ipotetico temporaneo?
Per come l'ho fatta io, con un po' di codice avevo già quel che mi
serviva nell'editor di testo, che ho usato per l'ordinamento e la
stampa. Una tabella temporanea E un report non mi servivano proprio.
Sarebbe stato uno spreco di tempo ed energie assemblarli.
ciao,
Panathos

 aiutare a fare una estrazione ordinata alfabeticamente dei nomi.
infatti non aiuta ma che ne dici di una .add utilizzando la after o la 
before dopo "banale" (si fa per dire) ricerchetta dicotomica magari di 
natura ricorsiva? (sette, otto, ....dieci istruzioni ad occhio)
Farlo sulle collection e' "abbastanza" prestazionale farlo con gli array 
significa aspettare tempi biblici per avere il risultato.
una cosa del genere
call setItem(myColl,xVal,1,myColl.count)
Function setItem(pColl,myValue,lInd,hInd)
idx=int(hind-lind)/2
idy = idx + lind
x =  myColl(idy)
if idx<2 then   'questa e' quella critica e dovrei vederla girare per 
capire come sistemarla se fare un after o un before o senza (per 
collezione vuota,questa per senza potrebbe anche essere fatta fuori ciclo)
	if x > myValue then
	    pcoll.add after:=idy
	else
	    pcoll.add before:=idy
	endif
	exit
elseif x > myValue then
	lind = idy
else
	hind = idy
end if
setitem(myValue,lind,hind)
end
una volta fatto cio' la for each restituisce gli elementi ordinati.
Direi che fino a 10K elementi non dovrebbero esistere grossi problemi 
(max 10**5 accessi, robetta)
-- 
ac
y-1=x

 Panathos
Saluti
@Alex

 aiutare a fare una estrazione ordinata alfabeticamente dei nomi.
[Risposta]
-------------------------------------------------------------------------------------------
Nulla a che fare... č solo un'informazione aggiuntiva.
.................................................
In effetti e solo a scopo didattico si potrebbe ordinare alfabeticamente una 
matrice con dati di tipo testo magari ordinando l'ASCI della prima lettera e 
cosě via.
Certo che sarebbe una bella seccatura!
cut
Saluti
@Alex
Ciao, Carlo 

 Ciao, Carlo
Era un sistema che usavo, circa 25anni fà, con il Basic del C64 per
velocizzare le ricerche usando File ad accesso Random... in pratica
salvavo blocchi definiti e rigidi per Lettera.... erano tempi
diversi...!
@Alex

 Ciao, Carlo
Era un sistema che usavo, circa 25anni fà, con il Basic del C64 per
velocizzare le ricerche usando File ad accesso Random... in pratica
salvavo blocchi definiti e rigidi per Lettera.... erano tempi
diversi...!
@Alex
110
120
130
bei tempi quelli! I programmi si caricavano da una cassetta audio!!!!!
Il primo programma che ho fatto con il Commodore 64 permetteva a delle 
mongolfiere colorate di volteggiare soavemente sullo schermo.
Comunque cercare l'ASCI della prima lettera è una figata!
Ciao, Carlo 

 (max 10**5 accessi, robetta)
Tanto di cappello, Alessandro.
ciao,
Panathos

 implementata a suo tempo solo in C.
il codice l'ho messo giu' tra una forchettata e l'altra . Non garantisco.
Ad es. la setitem in fondo e', ovviamente, sballata. Ma non ti tedio 
perche' mi sembra che sei decisamente molto al di sopra della media e 
non hai bisogno di aiutini (checche' ne dica "oscare"), di confronto si, 
"ollovas" ne abbiamo bisogno.
-- 
ac
y-1=x

 non hai bisogno di aiutini (checche' ne dica "oscare")
A beh, sulle matrici no di certo: confermo!
Ciao: Oscar

 Comunque cercare l'ASCI della prima lettera è una figata!
La fregatura è che per l'ordinamento fatto in questo modo la prima
lettera non basta e bisogna parsare anche tutta la stringa :-)
ciao,
Panathos

 "ollovas" ne abbiamo bisogno.
Concordo in pieno.
ciao,
Panathos

 Comunque cercare l'ASCI della prima lettera è una figata!
La fregatura è che per l'ordinamento fatto in questo modo la prima
lettera non basta e bisogna parsare anche tutta la stringa :-)
ciao,
Panathos
-------------------------------
Il codice è un po' complesso ma si può fare per tutti i caratteri.
Certo che avere il sort di .net (o, mi pare, di RealBasic) sarebbe 
eccezionale.
Aspetta un momento, forse si potrebbe usare il sort applicato ai recordset 
di DAO...si ma bisogna creare il recordset.
Ciao, Carlo 

 Aspetta un momento, forse si potrebbe usare il sort applicato ai recordset di DAO...si ma bisogna creare il recordset.
Eh già, a questo punto tanto vale usare la tabella temporanea... che è
anche un oggetto DAO.
ciao,
Panathos