Sintassi corretta comando Requery

di il
14 risposte

Sintassi corretta comando Requery

Ciao a tutti, mi chiamo Alessandro. Premetto che non sono molto esperto nell’uso di Access quindi potrei fare domande ‘’ovvie’ o utilizzare terminologia non esattamente corretta.

Qual è la sintassi corretta del comando requery in modo che possa andare ad agire su una sottomaschera?
Nello specifico, ho una maschera di inserimento dove è presente una sottomaschera. Nella maschera principale ho un campo che deve fare il requery di un altro campo presente nella sottomaschra.
Se uso questa sintassi (DoCmd.Requery "nomecampo su cui fare il requery") mi dà errore, qual è la sintassi corretta?

Spero di essere stato chiaro, grazie per il supporto

A.

14 Risposte

  • Re: Sintassi corretta comando Requery

    Perchè hai bisogno di fare Requery su un meccanismo maschera/sottomaschera che normalmente dovrebbe sincronizzarsi da sè?
    Potresti elencare tutti i campi di maschera/sottomaschera e capire cosa non ti funziona?
  • Re: Sintassi corretta comando Requery

    Ciao, grazie per la risposta

    Allora nella maschera principale, chiamata "inserimento anagrafica" ho questi campi

    ID_InsAnagrafica
    N° Offerta --- relazionato con tabella contatore
    Cliente --- relazionato con tabella clienti
    Contatto CLI --- relazionato con tabella contatto CLI (e filtrato in base al cliente)
    Cond pagamento --- relazionato con tabella Cond pagamento (e filtrato in base al cliente)
    Mod. Spedizione --- relazionato con tabella Mod Spedizione (e filtrato in base al cliente)
    Data validità

    Nella sottomaschera, chiamata "inserimento articoli", ho i seguenti campi

    ID_InsArticoli
    ID_InsAnagrafica --- che mi mette in relazione maschera e sottomaschera
    ART_INT --- in relazione con tabella ART_INT
    Descrizione --- che si compila in automatico all'inserimento di ART_INT
    ART_CLI --- in relazione con tabella ART_CLI
    q.tà
    prezzo

    la tabella ART_CLI è così composta

    ID_ArtCli
    Cliente in relazione con tab “Clienti”
    ART_Int in relazione con Tab “ART_Int”
    Art_Cli

    Io dovrei fare in modo che ad inserimento dei campi “Cliente” e ”ART_Int” il campo ART_Cli mi venga filtrato come da esempio

    Art_INT Cliente ART_Cli
    AAA111 cliente1 pippo
    AAA111 Cliente2 pluto
    AAA111 Cliente3 paperino

    il problema che non riesco a fare il filtro per cliente ma solo per ART_INT perché quando faccio il requery sul campo cliente mi dire che non trova il campo ART_CLI

    Per filtrare il campo contratto cliente in base al cliente inserito (supponendo di avere già compilato il form associato) ho inserito sul campo contatto cliente un evento con il comando [forms]![nomemaschera]![nome_Campo] e sul campo cliente un evento dopo aggiornamento campo con il comando requery .
    speravo di poter fare una cosa simile anche per fare il filtro su ART_CLI

    spero di essermi spiegato

    grazie
  • Re: Sintassi corretta comando Requery

    Io non ho capito quali sono le tabelle.
    Che vuol dire tabella contatore?
    Parli di una tabella Clienti, ma non esponi i suoi campi.
    "Inserimento anagrafica" poi mi appare alquanto caotica.
    Potresti descrivere TUTTE le tue tabelle? In alternativa potresti allegare una immagine della finestra Relazioni.
  • Re: Sintassi corretta comando Requery

    Ciao, allora questo è lo screen delle relazioni


    http://i58.tinypic.com/2v00f11.jp

    la tabella counter serve per creare un numeratore incrementale automatico che all'inserimento di una nuova offerta mi genera un numero offerta progressivo
    La tabella SAFIM Contacts contiene la lista degli utenti interni che generano le offerte
    La tabella customers contiene la lista dei clienti
    La tabella Customer_Contacts contiene tutti i contatti di riferimento per ogni cliente
    Le tabelle Payments, Shipping, Packaging, e CPT_Destination, sono le modalità di vendita
    tutte queste sono filtrate in base al cliente, quindi all'inserimento in form del cliente i campi sopra descritti verranno compilati
    La tabella SAFIM_Code contiene i codici articoli interni e le relative descrizioni
    LA tabella Customer_Code contiene i codici cliente relativi ai SAFIM_Code
  • Re: Sintassi corretta comando Requery

    L'immagine sul forum non è leggibile, quella del link sì.
    Sinceramente faccio molta fatica a comprendere l'intera struttura del tuo database. 2 possibilità:
    1. È talmente complesso che non riesco a capirne la logica
    2. Il database non è normalizzato
    Per me il database non è normalizzato e questo ti costringe a riprendere dati da tabelle lontane. Non vedo alcun motivo perchè una maschera debba fare il Requery su una sottomaschera. Talvolta accade che i due oggetti non si sincronizzano, ma ciò accade perchè si è preferito progettare tutto in visualizzazione struttura e ci si è dimenticati di impostare le proprietà "Collega campi secondari" e "Collega campi master". Se si progetta tutto con la creazione guidata maschera/sottomaschera Access individua i punti sensibili e li allinea a dovere.
  • Re: Sintassi corretta comando Requery

    safimspa ha scritto:


    Qual è la sintassi corretta del comando requery in modo che possa andare ad agire su una sottomaschera?
    DoCmd.Requery Method (Access)


    come vedi non è

    DoCmd.Requery "nomecampo"

  • Re: Sintassi corretta comando Requery

    gibra ha scritto:


    safimspa ha scritto:


    Qual è la sintassi corretta del comando requery in modo che possa andare ad agire su una sottomaschera?
    DoCmd.Requery Method (Access)


    come vedi non è

    DoCmd.Requery "nomecampo"

    Ciao, grazie per la risposta, purtroppo non mi apre il link
  • Re: Sintassi corretta comando Requery

    Perché è il forum che lo modifica.
    https://msdn.microsoft.com/en-us/library/office/ff195253(v=office.15).aspx
    copialo ed inseriscilo nel browser.
  • Re: Sintassi corretta comando Requery

    gibra ha scritto:


    safimspa ha scritto:


    Qual è la sintassi corretta del comando requery in modo che possa andare ad agire su una sottomaschera?
    DoCmd.Requery Method (Access)


    come vedi non è

    DoCmd.Requery "nomecampo"

    Forse fraintendo... ma esiste il Metodo Requery esposto da tutti gli Oggetti DataBound, e normalmente non si usa il metodo membro di DoCmd, quanto proprio quello sugli Oggetti.

    Parlo di questo:


    Magari ho frainteso...
  • Re: Sintassi corretta comando Requery

    DoCmd.Requery "nomecampo"
    Forms!NomeMaschera!NomeControllo.Requery
    si possono usare equivalentemente.
    Con il primo generalmente ci devi arrivare con una istruzione precedente.
    Il secondo è più diretto e più efficente...ma bisogna conoscerlo a memoria: l'intellisense non lo segnala. È una eccezione riservata a Requery, SetFocus, Echo, GoToPage, Repaint.
  • Re: Sintassi corretta comando Requery

    Osvaldo... non sono affatto usabili in modo equivalente...!
    L'attuazione del Metodo DoCmd prevede obbligatoriamente che l'oggetto su cui si attua il comando sia ATTIVO... quindi se fai il Requery su un Controllo di una SubForm devi accertarti che la SubForm abbia lo stato attivo... altrimenti non ha effetto...
    Tant'è che se non si specifica su cosa applicare il metodo questo viene eseguito sull'Oggetto attivo... e se il Button che lancia il comando è nella Form non ha certamente alcun effetto nè sulla SubForm nè sul controllo della SubForm...

    Questo lo leggi molto chiaramente proprio nel LINK di Gibra, e questo è il motivo per cui il metodo Requery è meglio applicarlo direttamente all'Oggetto DataBound e non tramite il Docmd in quanto non richiede di rendere attivo il Controllo.
    Anche questa osservazione è scritta proprio nel link citato...

    Il metodo Requery è esposto da tutti gli Oggetti DataBound ed è visualizzato dall'intellisense come no...! E se solo gli Oggetti DataBound lo espongono non serve nemmeno saperlo a memoria... visto che sono solo 3 gli Oggetti DataBound (Form/Combo/ListBox).

    Sulla questione efficienza... non è più efficiente, è UGUALE come esecutività è semplicemente più critico da gestire il DOCMD... per quanto esposto sopra.

    Leggete sempre bene la guida senza lanciare messaggi superficiali.
  • Re: Sintassi corretta comando Requery

    @Alex ha scritto:


    se fai il Requery su un Controllo di una SubForm devi accertarti che la SubForm abbia lo stato attivo... altrimenti non ha effetto...
    Hai citato esattamente un caso tipico in cui una volta ci sono inciampato io. Non conoscendo l'approccio diretto, usai il primo facendolo precedere da un DoCmd.GoToControl. Per questo motivo ho detto che occorre arrivarci con un'altra istruzione prima.
    Daccordo sul fatto che non sono equivalenti.
  • Re: Sintassi corretta comando Requery

    Il risultato è che da Equivalente ora non lo è più...? La fretta fa anche questo.

    I Comandi membri di DoCmd è meglio NON USARLI MAI se questi hanno azione su Oggetti che sono vincolati dallo stato attivo... perchè se non scrivi codice ROBUSTO il rischio è di non sapere su quale oggetto si va ad agire, oppure si ottiene un'errore...!

    Usare SEMPRE il metodo diretto sull'Oggetto.
  • Re: Sintassi corretta comando Requery

    Ok, visto che non sto capendo se si può fare o meno il filtro come servirebbe a me, vi illustro come ho configurato il form e quello di cui avrei neccessità

    qui sotto uno screen

    http://i58.tinypic.com/wa61ie.jp

    Quando compilo il campo Customer (campo 1) ii campi vengono filtrati con il contatto e le condizioni di vendita relative al cliente settato.
    Questo l'ho fatto richiamando il comando [forms]![Offer_EntryRegistry]![Customer] sui campi 2 - 3 - 4 - 5- 6 e generando un evento "dopo aggiornamento" sul campo Customer con il comando DoCmd.Requery relativo aisuddetti campi. Tutto questo funziona correttamente

    mi servirebbe fare in modo che alla compilazione del campo SAFIM_Code (campo 7) avendo già compilato anche il campo Customer (campo 1) il campo Customer_Code (campo mi venga filtrato
    questo un esempio

    SAFIM_Code - Cliente - Customer_Code
    AAA111 ------- cliente1 --- pippo
    AAA111 ------- Cliente2 --- pluto
    AAA111 ------- Cliente3 --- paperino

    grazie
Devi accedere o registrarti per scrivere nel forum
14 risposte