Newsgroup: it.comp.appl.access
Titolo: Re: Filtri... combo | vedi tutti ... un casino

 Samantha
Reimposta l'origine record della maschera da VBA, ad ogni modifica di uno
dei criteri.
Costruisci la query SQL inserendo nel WHERE gli effettivi valori da
selezionare, senza usare la sintassi [forms]![MSC_CSTMP]!....
Da VBA è molto più semplice gestire i casi del tipo Si/No/Tutti/Nessuno
piuttosto che usando una formula nel generatore di query.
SQL = "SELECT ...." & _
      " FROM ..."  & _
      " WHERE vscstmp_cliid=" & Me.cbocliente & " And ..." & _
      " ORDER BY ..." & ";"
me.recordsource = SQL
Ciao.
-Marco-
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

On 15 Ott, 15:47, 
marco.pizzamig...@gmail.com
 (Marco Pizzamiglio)
wrote:

Ciao Marco Pizzamiglio!!!
Caspita mi sembrava il titolo non nuovo... ma è proprio il mio
post!!! :D
Dalla biblioteca ho preso questo libro
"Access: programmazione VBA" di Alessandra Salvaggio e spiegano
proprio come fare da VBA :
Capitolo 9 - Pg. 67 "Filtrare i dati di una maschera"
Alla fine cmq ho dovuto eliminare il campo vedi, che era all'origine
della mia richiesta. Perchè temevo che il database raggiungesse
dimensioni enormi, senza che effettivamente i dati mi servissero.
 Ho optato quindi x un'altra soluzione, ossia che se un codice non
serve, l'utente lo elimina, se invece dovesse servire e si accorge di
averlo eliminato, gli basta aggiungerlo.
Il problema che mi trovo ora ad affrontare, è proprio l'inserimento
del valore, quindi il codice della materia prima, dove il listino sia
la versione filtrata dall'utente (x cliente e x data). Credo che
quando l'utente si accorga di dover inserire il costo di una materia
prima, premerà un pulsante e aprirà una maschera. Nel momento esatto
in cui lui preme il pulsante, io devo individuare la versione di
listino che lui sta visualizzando, ossia il valore salvato nel campo
VERSIONELISTINO.
Ma come devo fare?
Devo creare una variabile pubblica, che prenda il valore dalla
maschera aperta, e lo mantenga valido per quella di inserimento della
materia prima...
Quindi sto facendo una ricerca di come dichiarare pubblica la
variabile, perchè quando andrà nella maschera di inserimento, la query
di insert into dovrà avere il valore di listino = VersioneListino.
Lo so.. sono talvolta logorroica... dovrò pure io averlo qlc
difetto... (modestamente parlando)...
Cmq grazie x la risposta :)
Samantha Cicch

esseAemme ha scritto:
[CUT]


Non servono variabili pubbliche. Se la prima maschera rimane aperta puoi
recuperare il valore con la sintassi [Forms]![Nome maschera]![Nome
controllo]
Altro sistema, che ti consiglio, è quello di passare il valore alla
seconda maschera in Openargs. Quando si preme il pulsante presumo verrà
eseguito un Docmd.Openform "Nome maschera", per cui puoi mettere
l'IDlistino nel parametro Openargs
  DoCmd.OpenForm "Nome maschera", , , , , , IDListino
Nella seconda maschera, sull'evento Apertura, verifichi se c'è qualcosa in
Openargs:
  if len(me.openargs)>0 then 
    msgbox "Ehi, mi hanno passato l'IDListino " & me.openargs & "!"
  end if
Ciao.
-Marco-
-- 
questo articolo e` stato inviato via web dal servizio gratuito 


 questo articolo e` stato inviato via web dal servizio gratuitohttp://
www.newsland.it/newssegnala
 gli abusi ad 
ab...@newsland.it
AHN,
Ci ho messo 45 minuti x capire (leggendo i post in archivio) come
dichiarare una variabile pubblica, usarla, e alla fine l'ho fatta
funzionare... e ora mi disci che bastava usare quel openargs....
Domanda: quel openargs lo posso usare come criterio in una query?
Ossia nella query di inserimento dove la vesrione di listino è
l'IDListino?
Una cosa tipo
OhMiaVersioneListino = me.openargs       ??
e quindi
INSERT INTO TBL_CSTMP ( cstmp_mpid, cstmp_costo, cstmp_perc,
cstmp_vsid )
SELECT TBL_MP.mp_id, TBL_MP.mp_costo, TBL_MP.mp_perc,
TBL_VSCSTMP.vscstmp_id
FROM TBL_MP, TBL_VSCSTMP
WHERE TBL_VSCSTMP.vscstmp_data = date() and  ((TBL_MP.mp_id) Not In
(select cstmp_mpid from TBL_CSTMP) or   (TBL_VSCSTMP.vscstmp_id ) Not
In (OhMiaVersioneListino() ));
Grasssie :D
Samantha

 Samantha
Me.openargs è disponibile in tutto il modulo della maschera ma non
all'esterno della maschera, quindi non nelle query.
Però puoi costruire la query da VBA nella maschera ed eseguirla:
  SQL = "INSERT INTO TBL_CSTMP (...) " & _
        " SELECT ....." & _
        " FROM ....." & _
        " WHERE ..... AND (vscstmp_id <> " & Me.openargs & ");" _
  currentdb.execute SQL
Se ti dà problemi metti un debug.print SQL e un punto d'interruzione prima
del .Execute, e quando il codice arriva lì e si ferma apri la finestra
immediata per verificare che la sintassi della query sia corretta.
Ciao.
-Marco-
-- 
questo articolo e` stato inviato via web dal servizio gratuito 


 questo articolo e` stato inviato via web dal servizio gratuitohttp://
www.newsland.it/newssegnala
 gli abusi ad 
ab...@newsland.it
Ciao Marco,
ora funziona, però che casino!!!!
Questo è il codice sotto il pulsante di inserimento.
MsgBox Forms!MSC_CSTMP!versionelistino
MsgBox RestVarVersList
Dim strSQL As String
strSQL = "INSERT INTO TBL_CSTMP ( cstmp_mpid, cstmp_vsid )SELECT
TBL_MP.mp_id, " & Forms!MSC_CSTMP!versionelistino & " As Versione FROM
TBL_MP" & _
         " WHERE (TBL_MP.mp_id = " & Me![mp_id] & ") and (TBL_MP.mp_id
Not In (SELECT cstmp_mpid FROM TBL_CSTMP" & _
         " WHERE tbl_cstmp.cstmp_vsid = " & Forms!MSC_CSTMP!
versionelistino & "));"
Debug.Print strSQL
DoCmd.RunSQL strSQL
Il primo Msgbox restituitsce correttamente la versione di listino,
come la seconda.
E funzionaanche se sostituisco nella stringa strSQL Forms!MSC_CSTMP!
versionelistino con RestVarVersList
:D :D