Modifica query corrente

di
Anonimizzato11465
il
7 risposte

Modifica query corrente

Salve,
ho una maschera (con relativa sottomaschera di dettaglio) e vorrei sapere come modificare a runtime, tramite VBA, la query che mi popola la sottomaschera.

In pratica tramite una check box, vorrei modificare la clausola where della query.

Qualcuno può indicarmi cortesemente con un esempio le istruzioni da utilizzare ?

La query si chiama "Q_Contratti" ed è l'origine dati di una sottomaschera che si chiama "SM_Contratti".

A seconda che la check box sia vera o falsa, vorrei modificare la clausola Where con il seguente criterio: " (((CONTRATTI.Fine)>Date() Or (CONTRATTI.Fine) Is Null))"

grazie

7 Risposte

  • Re: Modifica query corrente

    La soluzione alla domanda è semplice, ma non so se è la soluzione migliore...

    Io ti indico quello che hai chiesto, confidando che la tua valutazione sia esaustiva.
    Su AfterUpdate della CheckBox:
    
    Dim strSQL Asd String
    If Me!NomeCheckBox.Value=True Then
        strSQL="tuo predicato1..."
    Else
        strSQL="Tuo Predicato2..."
    End If
    DbEngine(0)(0).QueryDefs("Q_Contratti").SQL=strSQL
    Me!NomeSubForm.Form.Recordsource=Me!NomeSubForm.Form.Recordsource
  • Re: Modifica query corrente

    Ringrazio per l'indicazione, ma ottengo un errore.

    l'istruzione è:
    Me!Scheda_Cliente.Form.RecordSource = Me!Scheda_Cliente.Form.RecordSource

    il messaggio di errore che ottengo è:
    "... Impossibile trovare il campo Scheda_Cliente a cui si fa riferimento nell'espressione"

    La maschera ovviamente si chiama: Scheda_Cliente

    Sai dirmi come mai ?
    Se nei nomi delle maschere ho degli spazi, tipo:
    "110 - Scheda Cliente" come faccio a referenziarle nelle istruzioni tipo quella di sopra ?

    grazie.
  • Re: Modifica query corrente

    Evidentemente la SubForm non si chiama così...!

    Invece del carattere [!] usa il Punto dopo [Me.] si attiva l'intellisense e puoi andare a selezionare
    il Controllo SubForm in modo visuale.

    La scelta di definire NOMI degli Oggetti con spazzi è data da mancanza di esperienza di chi sviluppa... la scrittura del codice per chi programma non equivale a scrivere Temi o lettere o mail... la sintassi da usare per programmare ha delle regole diverse da quelle della Grammatica Scolastica.

    Una delle prime regole è proprio evitare caratteri pericolosi, e gli spazzi lo sono.
    Per ovviare dovresti ELIMINARLI, alternativa è usare le Parentesi QUADRE per far capire al Compilatore che si tratta di un nome complesso.
    Me![Nome della Maschera con gli Spazzi].Form
    Lo sviluppatore formato, sa che il Nome degli Oggetti è una cosa, e che gli oggetti stessi poi possono avere una DESCRIZIONE, questo facilita eventualmente il Riconoscimento.
    Questo discorso vale anche per il Nome dei Campi delle Tabelle...
    I Nomi NON DEVONO AVERE SPAZZI, nè ACCENTI, nè Caratteri SPECIALI, nè Nomi RISERVATI.
    Si usano nomi brevi ed indicativi, poi esiste lo spazio per la DESCRIZIONE al fine di assegnare un valore aggiunto.
  • Re: Modifica query corrente

    La Form si chiama Scheda_Cliente (senza spazi e senza niente).
    Anche utilizzando la notazione Me. Intellisense non mi propone tra le possibili scelte la form Scheda_Cliente.
  • Re: Modifica query corrente

    Confondi l'oggetto CONTENITORE con l'Oggetto FORM...!

    Il nome che esponi è quello della FORM che vedi nell'elenco delle Maschere, quando inserisci una Maschera in una Maschera, quindi diventa SottoMaschera, siccome potrebbe essere inserita in Molte Maschere, si intromette un'oggetto che fa da CONTENITORE, lo selezioni cliccando il Bordo 1 sola vlta.

    Vedi come si chiama la cornice in questione, troverai quella nell'esposizione dell'intellisense....
  • Re: Modifica query corrente

    Scusami ma sto diventando scemo.

    Ti do qualche informazione che penso possa esserti utile per capire meglio il contesto.

    Ho creato tramite la creazione guidata una maschera con sottomaschera collegata (classico master details).

    La maschera che non riesco ad individuare, che si chiamerebbe Scheda_Cliente, sarebbe quella principale. Quella con i dettagli invece si chiama SM_Contratti.

    La sottomaschera SM_Contratti la referenzio senza problemi l'altra principale non riesco a capire come la chiama.
    Nell'elenco degli oggetti trovo la dicitura "Maschera", ma se volessi rinominarla ?

    Ho provato a visualizzare le proprietà della maschera clickanno sul bordo, ma non trovo il "nome elemento" che normalmente vedo per ogni oggetto.

    Anche utilizzando il nome "Maschera" supponendo che il Wizard di Access abbia dato questo nome al CONTENITORE, non me lo referenzia.

    Puoi indicarmi esattamente dove guardare ?
    Grazie anticipatamente.
  • Re: Modifica query corrente

    Allora è più semplice:
    
    Me.Recordsource=Me.Recordsource
    Il resto rimane come era...
Devi accedere o registrarti per scrivere nel forum
7 risposte