Newsgroup: it.comp.appl.access
Titolo: query infinite

Salve a tutti,
sono un neofita di access e stò imparando i primi passi ora...ed ecco
subito un piccolo problemino!
Vorrei, se possibile, poter creare una query di richiesta che mi
permetta di richiedere infiniti campi fino a quando non spinga il
pulsante "invio" o altro.
Faccio un esempio:
codice   articolo  famiglia
1           pane      rossi
2           carne     bianchi
3           rose       rossi
4           fragola    verdi
vorrei che la query mi chiedesse la famiglia [famiglia] e che
continuasse fino a quando spingo "invio"(o un altro tasto non
importa).Dimodochè se scrivo "rossi" alla prima richiesta e alla
seconda spingo "invio" mi flitri solo il cod 1 e 3 con relativo
articolo e famiglia, se invece alla prima richiesta scrivo "rossi",
alla seconda richiesta scrivo "bianchi" e alla terza "invio" aggiunge
ai codici precedenti il cod 2...e così via.
Spero di essermi spiegato e che qualcuno raccolga la
richiesta...grazie!
Maurilloh

mente...@email.it
 ha scritto:

Se ho capito cosa intendi ti consiglio di creare una query di
accodamento.Così facendo richiederai di volta in volta dei records
andandoli ad accodare ad una tabella esistente che potrei creare ad
hoc. Ti faccio un esempio:
INSERT INTO TabellaRisultati ( Codice,Articolo,Famiglia )
SELECT Tabella.Codice, Tabella.Articolo, Tabella.Famiglia
FROM Tabella
WHERE Tabella.Famiglia='Rossi'
Ogni volta che eseguirai questa query, cambiando ovviamente la
condizione WHERE a tuo piacimento, nella tabella TabellaRisultati
verranno accodati i records richiesti. Potresti in altrnativa
utilizzare query di unione, ma dovresti memorizzare tutte le richieste
per poi poter eseguire la query alla fine, in una volta sola.
Ciao

 ha scritto nel messaggio 
news:1156946080.2...@m73g2000cwd.googlegroups.com...
Salve a tutti,
sono un neofita di access e stň imparando i primi passi ora...ed ecco
subito un piccolo problemino!
Vorrei, se possibile, poter creare una query di richiesta che mi
permetta di richiedere infiniti campi fino a quando non spinga il
pulsante "invio" o altro.
Faccio un esempio:
codice   articolo  famiglia
1           pane      rossi
2           carne     bianchi
3           rose       rossi
4           fragola    verdi
vorrei che la query mi chiedesse la famiglia [famiglia] e che
continuasse fino a quando spingo "invio"(o un altro tasto non
importa).Dimodochč se scrivo "rossi" alla prima richiesta e alla
seconda spingo "invio" mi flitri solo il cod 1 e 3 con relativo
articolo e famiglia, se invece alla prima richiesta scrivo "rossi",
alla seconda richiesta scrivo "bianchi" e alla terza "invio" aggiunge
ai codici precedenti il cod 2...e cosě via.
Spero di essermi spiegato e che qualcuno raccolga la
richiesta...grazie!
Maurilloh
[risposta]
Forse sarebbe piů conveniente far scegliere in modo sicuro la o le 
"famiglie" all'utente.
Questo perchč cattive digitazioni non sarebbero scoperte...e costringi 
l'utente a continue richieste.
Per fare questo potresti usare una casella di riepilogo alimentata dalla tua 
tabella e con la selezione impostata su estesa. L'utente seleziona una o piů 
"famiglie" e il gioco č fatto. Magari richiede qualche riga di codice ma 
l'effetto e il risultato sono professionali.
Che ne pensi?
Ciao, Carlo

grazie per le risposte, ma mi spiego meglio...
sto lavorando su tabelle collegate in una rete aziendale, quindi non
posso assolutamente modificarle, posso solamente collegarle in una
query e filtrare ciò che mi interessa, o creare altre tabelle.
Le famiglie che dovrei richiedere le conosco a priori e per gli errori
non c'è problema (sono l'unico che lo userà). Il fatto poi è che ci
sono qualcosa come 9999 famiglie da gestire, quindi un elenco a discesa
non credo sia proponibile.
finora ho gestito la cosa mettendo nella casella "criteri" della mia
query, sotto il campo "famiglie" il seguente comando: "[Fam1?] Or Is
Null",poi nella casella sotto "oppure": [Fam2?] Or Is Null, e così
via.
questa tabella poi la stampo con un report.
Il fatto è che a volte devo stampare elenchi di una sola famiglia, a
volte di due o tre...insomma non so a priori quante famiglie dovrò
estrapolare.
Volevo quindi sapere (e qui il mio problema), se c'era un modo per
richiedere l'inserimento della/e famiglie che si vuole filtrare in modo
dinamico (poter inserire 1 o n famiglie).
Facile no? :)

 ha scritto nel messaggio 
news:1156951445.4...@i42g2000cwa.googlegroups.com...






Facile no? :)
.........................................................
Ho fatto una prova con una tabella ABI volendo cercare uno o più codici 
(numerici) ed estrapolato questa funzione che fa più o meno quello che ti 
interessa. Crea una query al volo (QryFamiglie) che puoi anche lasciare 
salvata o cancellare e che potrai usare a tuo piacimento.
Ovvio che la funzione va opportunamente adattata al tuo caso. Per chiedere 
tutti i valori basta digitare "*", per smettere la richiesta basta lasciare 
vuota la inputbox.
il valore 13 di: UnaStringa = Mid(UnaStringa, 1, Len(UnaStringa) - 13) & 
"));" va opportunamente modificato secondo le tue esigenze.
Public Function UnaStringa() As String
Dim inpu As String
Dim Qdf As QueryDef
UnaStringa = "SELECT Abi.Abi, Abi.Descrizione FROM Abi WHERE (((Abi.Abi)"
inpu = " "
While inpu <> ""
inpu = InputBox("Inserisci un nome famiglia (* per tutte)", "Famiglie da 
filtrare", "")
If inpu = "*" Then
UnaStringa = "SELECT Abi.Abi, Abi.Descrizione FROM Abi WHERE (((Abi.Abi) 
Like" & "'" & "*" & "'" & "));"
End If
If inpu <> "" Then
UnaStringa = UnaStringa & "=" & CLng(inpu) & " or (Abi.Abi)"
End If
Wend
If Mid(UnaStringa, Len(UnaStringa), 1) = ")" Then
UnaStringa = Mid(UnaStringa, 1, Len(UnaStringa) - 13) & "));"
End If
On Error Resume Next
  Set Qdf = CurrentDb.QueryDefs("QryFamiglie")
  Select Case Err
    Case 0 'nessun errore, aggiorna l'espressione SQL nella query e la 
esegue
      Qdf.SQL = UnaStringa
      Qdf.Close
      DoCmd.OpenQuery "QryFamiglie" 'apre la query
    Case 3265 'query non trovata, quindi la crea
      Err.Clear 'errore gestito
      Set Qdf = CurrentDb.CreateQueryDef("QryFamiglie")
      If Err <> 0 Then
       MsgBox Error$ 'errore nella creazione
      Else
       Qdf.SQL = UnaStringa
       Qdf.Close
       DoCmd.OpenQuery "QryFamiglie"
      End If
    Case Else 'altri errori
      MsgBox Err & " : " & Error$
    End Select
Exit Function
End Function
Fammi sapere,
Ciao, Carlo


.............................................................................................
Grazie mille Carlo...però come ho detto da primo post sono un neofita
di access e non so dove mettere le mani.
Mi potresti spiegare un po meglio dove devo incollare questa funzione?
va in una query, in una maschera, in un report...e dove di preciso?
Scusami se sono domande sciocche ma sarebbe un peccato non riuscire
adesso che ho la soluzione tra le mani solo perchè non so dove
applicarla.
grazie.
ciao, Mauro

 ha scritto nel messaggio 
news:1157008528.5...@m79g2000cwm.googlegroups.com...

.............................................................................................


grazie.
ciao, Mauro
...............................................................
Credo che per un neofita sia una cosa piuttosto dura.
Sinceramente sarebbe estremamente lungo e difficile entrare nel merito di 
funzioni, moduli, cicli, querydef, recordset ecc.
Tutte le funzioni possono essere pubbliche o private e possono risiedere in 
moduli propri di maschere o report, oppure risiedere in oggetti modulo a se 
stanti.
La funzione proposta deve risiedere in un modulo pubblico a se stante e può 
essere "chiamata" da un pulsante in una maschera o in seguito ad eventi di 
un qualche controllo o da una macro.
La funzione crea una querydef che può essere salvata e utilizza dati 
numerici come criterio.
Detto questo mi sembra che più in là non si possa andare. Tocca studiare o 
farsi affiancare da un tutor con esperienza di programmazione.
Se poi, strada facendo, hai delle domande, postale pure che io o altri ti 
daranno una mano.
Ciao, Carlo


allora......mi rinbocco le maniche e mi metto a studiare un pò!
Grazie mille del tuo aiuto Carlo.
ciao, Mauro

 ha scritto nel messaggio 
news:1156946080.2...@m73g2000cwd.googlegroups.com...
Salve a tutti,
sono un neofita di access e stň imparando i primi passi ora...ed ecco
subito un piccolo problemino!
Vorrei, se possibile, poter creare una query di richiesta che mi
permetta di richiedere infiniti campi fino a quando non spinga il
pulsante "invio" o altro.
Faccio un esempio:
codice   articolo  famiglia
1           pane      rossi
2           carne     bianchi
3           rose       rossi
4           fragola    verdi
vorrei che la query mi chiedesse la famiglia [famiglia] e che
continuasse fino a quando spingo "invio"(o un altro tasto non
importa).Dimodochč se scrivo "rossi" alla prima richiesta e alla
seconda spingo "invio" mi flitri solo il cod 1 e 3 con relativo
articolo e famiglia, se invece alla prima richiesta scrivo "rossi",
alla seconda richiesta scrivo "bianchi" e alla terza "invio" aggiunge
ai codici precedenti il cod 2...e cosě via.
Spero di essermi spiegato e che qualcuno raccolga la
richiesta...grazie!
Maurilloh
[risposta]
Puoi utilizzare l'istruzione In (in SQL) per construirti la condizione 
Where;
es.
Select * From nomeTabella Where famiglia In ('Rossi','verdi')
Quindi se nella casella di testo (chiamata: testoDaCercare) ci scrivi: 
Rossi,Verdi
nell'evento "su clic" di un bottone (lascia perdere l'invio) potresti 
scrivere il codice VBA:
es.
'---
Dim strWhere As String
If InStr(1, Me!testoDaCercare, ",") > 0 Then
    strWhere= "famiglia In ('" & Replace(Me!testoDaCercare, ",", "','", 1) & 
"')"
Else
    strWhere = "famiglia = '" & Me!testoDaCercare& "'"
End If
'<-- qui istruzioni per filtrare
'---
Poi se utilizzi una sottomaschera per vedere i dati puoi filtrarla in questo 
modo:
Me!nomeSottomaschera.form.filter = strWhere
Me!nomeSottomaschera.form.FilterOn = True
Ciao.
-- 
Sergio MAZZA