Newsgroup: it.comp.appl.access
Titolo: ordinare una list box

la list box è basata su una query: qryRepList
 
ho provato ad aggiungere la clausola ORDER BY con una riga di codice:
 
Me.RepList.RowSource = Me.RepList.RowSource & " ORDER BY Gerät"
 
ma non funziona in quanto RowSource non è codice SQL ma il nome della 
query, per cui ottengo "qryRepList ORDER BY Gerät" con conseguente errore
 
c'è modo di recuperare il SQL della query per modificarlo?
 
-- 
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........

 
 
cosa vieta di scrivere
 
Me.RepList.RowSource = "select * from qryRepList ORDER BY Gerät"
 
?
 
BFS

 
 
NIENTE lo vieta :) infatti funziona alla grande
 
Grazie, era un quid a cui non ci sono arrivato da solo, ma ne farò tesoro


 
 
sto facendone tesoro, cercando di impiegarlo altrove per contare quanti 
record vado a selezionare, ma in questo diverso utilizzo mi esce errore:
 
Dim DBS0 As Database
Dim Rep As DAO.Recordset
Set DBS0 = CurrentDb
Set Rep = DBS0.OpenRecordset("Select * from qryRepList", dbOpenDynaset)
 
   Run-time error '3061'.
   Too few parameters. Expected 5.
 
Se metto il nome della tabella (Reparaturen) al posto della query 
(qryRepList) il programma prosegue correttamente, ma ovviamente mi perdo 
tutte le condizioni WHERE che sono specificate - appunto - nella query
 
 
 
Il seguito dovrebbe essere qualcosa tipo:
 
Rep.MoveLast
TotR = Rep.RecordCount
etc etc



la parte where di qryRepList si può vedere?
a naso mi sa che sono parametri presi da una form... e quindi ovviamente 
non può andare
 
 
 
 

 
 
ci hai azzeccato ancora una volta :/
 
i parametri (presi da un form iniziale) sono le combo box che mi permettono 
di filtrare i record della listbox
 
SELECT *
FROM Reparaturen
WHERE (((Rechnung) Like [Forms]![RepList]![RechnungList] & "*") 
AND ((Gerät) Like [Forms]![RepList]![GeraetList] & "*") 
AND ((Hersteller) Like [Forms]![RepList]![HerstList] & "*") 
AND ((Modell) Like [Forms]![RepList]![ModellList] & "*") 
AND ((Seriennummer) Like [Forms]![RepList]![SeriennummerList] & "*"));
 
 
tutto l'ambaradan qui sopra nasce dal tentativo di semplificare la vita 
all'utente: sulla list box del form iniziale posso fare un doppio click su 
un record e mi si apre una nuova form con tutti i dettagli
 
ho però anche predisposto un pulsante che mi apre invece tutti i record 
visualizzati (e filtrati)
 
una volta aperto il form dei dettagli (con uno o più record) volevo 
visualizzare/nascondere i pulsanti di spostamento tra i record che ho 
aggiunto io (belli grandi e molto più comodi di quei cazzilli che Access 
mette in automatico giù in basso a sinistra, che certa gente impiega anche 
cinque secondi prima di azzeccarli col mouse, senza neanche la certezza di 
cliccare quello giusto)
 
 
Ora, visto che non posso (meglio: non riesco a) contare i record una volta 
aperto il form dei dettagli, sto pensando di contarli *prima*, infilando il 
totale in una tabella di parametri di appoggio, e successivamente andare a 
rileggerlo e usarlo per mettere true/false sulla proprietà Visible dei 
bottoni
 
mah...


Domanda...!
 
Visto che metti mano ai predicati SQL, non è che quello con i criteri ti conviene scriverlo in modo più funzionale...?
 
SELECT *
FROM Reparaturen
WHERE (((Rechnung) Like [Forms]![RepList]![RechnungList] & "*")
AND ((Gerät) Like [Forms]![RepList]![GeraetList] & "*")
AND ((Hersteller) Like [Forms]![RepList]![HerstList] & "*")
AND ((Modell) Like [Forms]![RepList]![ModellList] & "*")
AND ((Seriennummer) Like [Forms]![RepList]![SeriennummerList] & "*")); 
 
Se ad esempio Non viene selezionato alcun criterio perchè gambizzare una query con criteri INUTILI...?
Fai 3 righe di codice se serve concateni i crireri se non serve non metti nulla...!
 
In ogni caso per rendere le Query indipendenti dalle Maschere si usano i Parameters... che puoi valorizzare da codice ed aprire il Recordset ed assegnarlo alla ListBox o Combo Box.
 
Dim strSEL As String
Dim strWHR As String
Dim strORD As String
Dim strSQL As String
strSEL="SELECT * FROM TuaTabella "
If Len([Forms]![RepList]![RechnungList] & vbNullstring)>0 Then strWHR= strWHR & "Rechnung Like " & [Forms]![RepList]![RechnungList]  & "* AND "
If Len([Forms]![RepList]![GeraetList] & vbNullstring)>0 Then strWHR= strWHR & "Gerät Like " & [Forms]![RepList]![GeraetList]  & "* AND "
If Len([Forms]![RepList]![Hersteller] & vbNullstring)>0 Then strWHR= strWHR & "Hersteller Like " & [Forms]![RepList]![RechnungList]  & "* AND "
ecc...
 
If Len(strWHR)>0 Then strWHR=Mid$(strWHR,1,Len(strWHR)-5)
strSQL=strSEL & strWHR & strORD
 
CurrentDb.QueryDefs("NomeTuaQuery").SQL=strSQL
 
Altrimenti usi i Parameters e li valorizzi:
 
Set qdf = db.QueryDefs("NomeTuaQuery")
 
        qdf("Param1") = [Forms]![RepList]![RechnungList]
        qdf("Param2") = [Forms]![RepList]![GeraetList]
        qdf("Param3") = [Forms]![RepList]![Hersteller]
 
        Set TuaListBox.Recordset=qdf.OpenRecordset(  )
Ecc... ecc... ec...
 
@Alex

 
 
è previsto che lo diventi, più funzionale e scritto meglio; la settimana 
prossima vedo le colleghe che potrebbero essere interessate a questa 
procedura per stabilire quanti e quali campi mostrare, quali devono avere 
la ricerca, che cosa mettere nella form dei dettagli, eccetera
 
questo prototipo è lungi dall'essere definitivo e prima ancora 
dovrà accettato come strumento di lavoro
 
lo ho fatto solo per mostrare il cambio di velocità rispetto all'attuale 
gestione in excel (11000 righe per 70 colonne prevalentemente testuali): 
quando toccano un filtro ci vogliono "secoli" prima che escano i risultati, 
in access siamo sempre sotto il secondo, inoltre è scomodissimo da leggere 
dovendo in continuazione andare da destra a sinistra (sì, lo so che ci sono  
i form anche in Excel, ma è la lentezza alla base di tutto che ci spinge a 
cambiare)
 
ora, la cosa è funzionale, l'ultima richiesta relativa ai pulsanti di 
spostamento era puramente estetica, la settimana prossima, se ci saranno 
novità, ne riparleremo
 
per il momento grazie


 
 
niente di tutto questo, ho trovato qualche errore :( nel codice, adesso so 
quanti record ci sono quando apro il form con il pulsante; sistemo la 
faccenda per il doppio-click e per oggi sono a posto


 conteggio record
 
per vostra conoscenza, tutto risolto con un paio di righe di codice
 
TotR = Me.RecordsetClone.RecordCount
If TotR > 1 Then Exit Sub
 
etc etc per disattivare i pulsanti


Io le ordino su Amazon :)

 
 
cre pbegrfvn, puvnznzv ha qragvfgn pur zv fbab ftnanfpvngb qnyyr evfngr r 
aba evrfpb n cneyner; znaqnzryb n pnfn, n Ohtyvnab, va cvnmmn qry zhavpvcvb


 -- 
 
su su, bisogna prendere la vita con un po' di leggerezza, se no sai tra siccità carestia e guerra sono dolori...