Newsgroup: it.comp.appl.access
Titolo: Win98/Access97 Stringa SQL

Salve a tutto il NG.
Ho le seguenti tabelle:
Articoli
--------
IdArticolo      Contatore       Chiave primaria
IdMerce         Numerico
Descrizione     Testo
Merceologia
-------------
IdMerce           Contatore        Chiave primaria
Merceologico    Testo
Inout
-----
IdMovimento     Contatore       Chiave primaria
DtaMov             Data/ora
TipoMov            Testo
DettInout
----------
IdNum                 Numerico
IdMerce               Numerico
IdArticolo             Numerico
Quantita                Numerico
Perezzo                 Numerico
Relazioni
---------
Articoli.IdArticolo            1 -> N     DettInout.IdArticolo
Merceologia.IdMerce      1 -> N     Articoli.IdMerce
Merceologia.IdMerce       1-> N     DettInout.IdMerce
Inout.IdMovimento           1 -> N     DettInout.IdNum
Ho creato una Maschera rptFiltroScheda che nell'evento Su Apertura esegue
quanto segue:
Private Sub Form_Open ( Cancel as Integer )
   DoCmd.OpenReport "Scheda Articoli", A_PREVIEW
End Sub
(Il Report 'Scheda Articoli' fa riferimento ad una query composta dai
records delle tabelle Inout e DettInout).
Questa Maschera è composta da 4 Caselle Combinate non associate così
composte:
1     Datainizio
       origine riga:  SELECT DISTINCT Inout.DtaMov FROM Inout;
2      Datafine
        origine riga:  SELECT DISTINCT Inout.DtaMov FROM Inout;
3      Merce
        origine riga:  SELECT DISTINCT Merceologia.IdMerce,
Merceologia.Merceologico FROM            Merceologia ORDER BY
Merceologia.Merceologico;
         numero colonne: 2
         lunghezza colonne: 0cm; 3cm
4       Descrizione
         origine riga:   SELECT DISTINC Articoli.Descrizione FROM
Merceologia INNER JOIN Articoli ON Merceologia.IdMerce = Articoli.IdMerce
ORDER BY Articoli.Descrizione;
          numero colonne: 3
          lunghezza colonne: 0cm; 0cm; 6cm
          Evento: su attivato
           Private Sub Descrizione_GotFocus()
            Me!Descrizione.Rowsource = "SELECT * FROM Articoli WHERE
(((Articoli.IdMerce) = " & [Merce] & "));"
             Me!Descrizione.Requery
            End Sub
Infine ho un Pulsante di Comando: Filtro   che esegue la seguente Routine Su
Click
     Private Sub Filtro_Click()
        Dim varSQL as String
        varSQL = "([Dtamov] Between #" & Format(Me.Datainizio,"mm/dd/yyyy")
& "# And #" & Format(Me.Datafine,"mm/dd/yyyy") & "#)" & " And
([Merceologico] LIKE'" & Me.Merce & "') And ([Descrizione] LIKE'" &
Me.Descrizione & "')"
Purtroppo questa stringa non funziona ovvero non filtra i dati secondo i
criteri (range di date, merceologico, descrizione).
Grazie a chiunque voglia cortesemente rispondere.
Saluti.
Gianni

 Questa Maschera č composta da 4 Caselle Combinate non associate cosě

Prova ad eliminare il codice VBA che hai generato a fronte dell'evento "Su
apertura" della maschera.
Quindi aggiungi in fondo alla routine Private Sub Filtro_Click() questa riga
di codice VBA:
DoCmd.OpenReport "Scheda Articoli", acViewPreview, ,varSQL
Ora quando pigi il pulsante Filtro, ti si dovrebbe aprire il report
filtrato.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 news:9hosde$j86$1...@serv1.albacom.net...

Grazie Roberto per il riscontro ma non ho risolto il problema. Mi spiego.
La routine (totale) Su Click del pulsante Filtro č la seguente:
    Private Sub Filtro_Click()
  ' gestione errori
         Dim varSQL as String
         varSQL = "([Dtamov] Between #" & Format(Me.Datainizio,"mm/dd/yyyy")
        & "# And #" & Format(Me.Datafine,"mm/dd/yyyy") & "#)" & " And
        ([Merceologico] LIKE'" & Me.Merce & "') And ([Descrizione] LIKE'" &
Me.Descrizione & "')"
         Reports![Scheda Articoli].Filter = varSQL
         Reports![Scheda Articoli].FilterOn = True
      ' gestione degli errori ....
     End Sub
Orbene, secondo il mio modesto giudizio, l'errore č da ricercare nella
stringa Sql perchč tutto funziona perfettamente con la seguente stringa,
quando nella Maschera ho solo 3 controlli ovvero i 2 range di Data e il
Merceologico:
      varSQL = "([Dtamov] Between #" & Format(Me.Datainizio,"mm/dd/yyyy")
        & "# And #" & Format(Me.Datafine,"mm/dd/yyyy") & "#)" & " And
        ([Merceologico] LIKE'" & Me.Merce & "')"
Si evince quindi che il problema dovrebbe essere la parte di stringa finale,
riferita alla 'Descrizione' .
Nell'espressione 'non filtra' nella mia precedente e-mail, intendevo dire
che non mi segnala errori ma comunque non mi filtra i dati secondo i criteri
impostati.
Grazie per un cortese riscontro.
Saluti
Gianni


Se le cose stanno così!
Io non sono dell'avviso che il problema stia nella stringa varSQL (che
ritengo formalmente e logicamente esatta), ma nella casella combinata 4
chiamata Descrizione.
Nel tuo primo messaggio hai scritto:
====================
4       Descrizione
         origine riga:   SELECT DISTINC Articoli.Descrizione FROM
Merceologia INNER JOIN Articoli ON Merceologia.IdMerce = Articoli.IdMerce
ORDER BY Articoli.Descrizione;
          numero colonne: 3
          lunghezza colonne: 0cm; 0cm; 6cm
          Evento: su attivato
           Private Sub Descrizione_GotFocus()
            Me!Descrizione.Rowsource = "SELECT * FROM Articoli WHERE
(((Articoli.IdMerce) = " & [Merce] & "));"
             Me!Descrizione.Requery
            End Sub
=====================
Alla stringa varSQL passi il valore della PRIMA colonna della casella
combinata Descrizione; per effetto del codice VBA che hai scritto nella Sub
Descrizione_GotFocus, nella prima colonna di tale casella combinata c'è
IDArticolo e non la sua descrizione che è invece contenuta nella terza
colonna della combo.
Secondo me dovresti eliminare il codice VBA della Sub Descrizione_GotFocus,
impostare il Numero colonne della combo a 1 e la sua Larghezza colonne a
6cm. (do per scontato che Colonna associata sia impatata a 1).
Visto come è fatta l'origine riga della combo, ora alla stringa varSQL verrà
passata una descrizione.
Prova e facci sapere.


 > > news:9hosde$j86$1...@serv1.albacom.net...

Ri-grazie Roberto per la cortese sollecitudine di risposta.
Se eliminassi il codice VBA della Sub Descrizione_GotFocus, perderei il
filtro sul Merceologico quindi la quarta combo non avrebbe senso di
esistere.
Difatti Merceologico e Articolo sono in Relazione  1 a N in modo da avere il
seguente risultato es. :
se gestiamo del materiale Hardware, ipotizziamo una anagrafica di questo
tipo
Merceologia.Merceologico                 Articoli.Descrizione
----------------------------                --------------------
Ram                                                    Dimm 64 Mb
Audio                                                  Creative 128pci
Monitor                                                Samsung 15"
Ram                                                     Dimm 128 Mb
Audio                                                   Ess pnp pci
Tastiera                                                 Logitech italiana
101 tasti
Monitor                                                 Lg 17"
orbene, quando mi trovo nella combo Merce e seleziono Ram, nella combo
Descrizione mi devo trovare solamente:
Dimm 64 Mb
Dimm 128 Mb
e questo lo posso ottenere dal codice VBA della Sub succitata.
A meno che non si trovi altra soluzione per ottenere ciò.
Ciao e che la campagna possa illuminarti per una soluzione al dilemma...
Gianni


E allora fai cosě:
Elimina il codice VBA della Sub Descrizione_GotFocus, imposta il Numero
colonne della combo Descrizione a 1 e la sua Larghezza colonne a 6cm. (do
per scontato che Colonna associata sia impatata a 1).
Come origine riga della casella combinata Descrizione metti questo codice
SQL:
SELECT Articoli.Descrizione  FROM Articoli WHERE (((Articoli.IdMerce) = &
Merce));
A fronte dell'evento "Dopo aggiornamento" della casella combinata Merce
genera questa riga di codice VBA:
Me!Descrizione.Requery
Naturalmente, prima di effettuare una selezione dalla combo Descrizione,
dovrai prima selezionare qualcosa dalla casella combinata Merce.



Provato, purtroppo con esito negativo.
Le 2 combo, Merce e Descrizione, riportano l'elenco corretto dei valori ma
quando pigi sul pulsante Filtro non viene estrapolato alcun dato, come nella
mia soluzione.
Grazie comunque Roberto per la disponibilità.
Saluti
Gianni

 ha scritto nel messaggio
news:9i1heh$bin$1...@serv1.albacom.net...

Riguardando attentamente i messaggi di questo thread mi sembra che anche la
casella combinata Merce non vada bene; imposta il suo Numero colonne a 1 e
la sua Larghezza colonne a 3cm.
Infine come origine riga della casella combinata Merce metti questo codice
SQL:
SELECT DISTINCT Merceologia.Merceologico FROM  Merceologia ORDER BY
Merceologia.Merceologico;
Se ancora non ti funziona, prova a postare il codice SQL della query che è
origine record del report Scheda Articoli.



Grazie nuovamente.
Gianni

 Gianni
Immagino che fra l'altro, ora a fronte dell'evento "Dopo aggiornamento"
della casella combinata Merce ci sia:
Me!Descrizione.Requery
Prova a dare alla combo Merce le caratteristiche che aveva nel tuo primo
messaggio, ovvero:
=============================
3      Merce
        origine riga:  SELECT DISTINCT Merceologia.IdMerce,
Merceologia.Merceologico FROM            Merceologia ORDER BY
Merceologia.Merceologico;
         numero colonne: 2
         lunghezza colonne: 0cm; 3cm
=============================
Cosě ti dovrebbe rifunzionare la combo Descrizione.
Alla query che č origine record del reporp aggiungi il campo
Merceologia.IdMerce, ovvero:
SELECT DISTINCTROW Inout.IdMovimento, Inout.DtaMov, Inout.T,
Merceologia.Merceologico, Merceologia.IdMerce, Articoli.Descrizione,
DettInout.Qt, DettInout.Costo, [Qt]*[Costo] AS Totale
FROM Merceologia RIGHT JOIN (Inout RIGHT JOIN (Articoli RIGHT JOIN DettInout
ON Articoli.IdArticolo = DettInout.IdArticolo) ON Inout.IdMovimento =
DettInout.IdNum) ON Merceologia.IdMerce = Articoli.IdMerce;
Modifica quindi la stringa di filtro in:
varSQL = "([Dtamov] Between #" & Format(Me.Datainizio,"mm/dd/yyyy")
& "# And #" & Format(Me.Datafine,"mm/dd/yyyy") & "#)" & " And
([IDMerce] LIKE " & Me.Merce & ") And ([Descrizione] LIKE'" &
Me.Descrizione & "')"
--



Tutto Ok.
Infinitamente grazie Roberto e complimenti per la professionalità.
Gianni