Apertura maschera caricando un record specifico

di il
9 risposte

Apertura maschera caricando un record specifico

Mi trovo alle prese con un problema che non mi si era mai posto.
Da una maschera che elenca i record di una tabella, selezionandone uno e premendo un pulsante vado ad aprire un'altra maschera nella quale visualizzare un determinato record (di un'altra tabella).
L'ho fatto decine di volte ma stavolta non va...... sono ore che ci sbatto la testa.
Anzichè aprirsi la maschera con i record voluto mi si apre un pop-up che mi chiede di inserire manualmente il valore del campo che fa chiave primaria.

Il codice è il seguente
    
Dim stDocName As String
Dim stLinkCriteria As String
    
Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset("select * from [ArticoliMisuraOrdine] where [Articolo] = " & Me.IDRif)
stDocName = "ArticoloModificaMisuraOrdineModifica"
DoCmd.OpenForm stDocName, , , "[IDArticoloMisuraOrdine] = " & rst![IDArticoliMisuraOrdine]
Ovviamente il valore della chiave lo passo all'apertura della maschera, cosa fatta decine di volte ma stavolta non va. Ho comparato tutto quello che c'era da comparare con casi simili funzionanti ma non capisco perchè non vada.

9 Risposte

  • Re: Apertura maschera caricando un record specifico

    Non so usare VBA, quindi prendi la mia risposta con molte pinze. Immagino che quando vuoi aprire l'altra maschera ArticoloModificaMisuraOrdineModifica tu voglia posizionarti sullo stesso valore di Maschera1 attraverso il campo ID. La sintassi della WHERE di OpenForm, solitamente è:
    [ID] = Forms![NomeMaschera1]![IDCorrispondente]
    ...parlo senza capire le linee di codice precedenti e tentando di interpretare il tuo contesto descrittivo.
  • Re: Apertura maschera caricando un record specifico

    Mi associo un pò alla domanda/perplessità esposta da Osvaldo.

    ...Ma che differenza c'è come VALORE tra
    Me.IDRif
    e
    rst![IDArticoliMisuraOrdine]
    mi sembra molto, troppo contorto dover fare quel giro...
    Se l'ID del Record corrente è l'ID della Form di dettaglio a cosa serve aprire un RS per recuperare un dato esattamente UGUALE...?
  • Re: Apertura maschera caricando un record specifico

    Intanto grazie per l'interessamento ad entrambi.

    spiego meglio i codice:
    
    Dim stDocName As String
    Dim stLinkCriteria As String
        
    Dim rst As Recordset
    Set rst = CurrentDb.OpenRecordset("select * from [ArticoliMisuraOrdine] where [Articolo] = " & Me.IDRif)
    
    nella prima parte vado a selezionare un record della tabella ArticoliMisuraOrdine che contiene al campo Articolo il valore contenuto nella casella di test IDRif
    
    stDocName = "ArticoloModificaMisuraOrdineModifica"
    DoCmd.OpenForm stDocName, , , "[IDArticoloMisuraOrdine] = " & rst![IDArticoliMisuraOrdine]
    
    nella seconda parte apro la maschera ArticoloModificaMisuraOrdineModifica che fa riferimento alla tabella ArticoliMisuraOrdine richiamando un record della stessa partendo dal record selezionato prima (il recordset rst avrà solo 1 elemento)

    me.IDRif non è uguale a rst![IDArticoliMisuraOrdine]. Il primo è un campo della ArticoliMisuraOrdine, il secondo la chiave primaria.


    E' la prima volta che non riesco ad aprire in questa maniera una maschera specificando la chiave del record che voglio visualizzare, l'ho fatto in una miriade di modi, ma stavolta qualcosa mi sfugge....
  • Re: Apertura maschera caricando un record specifico

    Non è necessario andare a scomodare la tabella che sta sotto la Maschera1 (non ci hai mai detto come si chiama)
    DoCmd.OpenForm ArticoloModificaMisuraOrdineModifica, , , [IDArticoloMisuraOrdine] = Me![IDArticoliMisuraOrdine]
    oppure
    DoCmd.OpenForm ArticoloModificaMisuraOrdineModifica, , , [IDArticoloMisuraOrdine] = [Forms]![NomeMaschera1]![IDArticoliMisuraOrdine]
    ...gradirei che un utente più esperto mi guidi meglio.
  • Re: Apertura maschera caricando un record specifico

    La maschera di partenza si chiama ArticoloModifica, fa riferimento ad una tabella che si chiama Articoli, e visualizza un record di questa.
    In questa maschera esiste un campo che si chiama IDRif, che uso per selezionare un determinato record nella tabella ArticoliMisuraOrdine. IDRif non è chiave per la tabella ma per come questa viene riempita non puo' contenere duplicati. La chiave è IDArticoliMisuraOrdine, che viene dato in pasto alla OpenForm per aprire la ArticoloModificaMisuraOrdineModifica.
  • Re: Apertura maschera caricando un record specifico

    Hai confermato esattamente quello che sospettavo fin dall'inizio e la linea DoCmd.OpenForm dovrebbe essere quella. Nel codice manca l'inizio e la fine, cioè i classici:
    Private Sub NomePulsante_OnClick()
    End Sub
    e tutto dovrebbe filare liscio.
    Purtroppo il VBA non è il mio forte, ma posso darti una alternativa con macro.
    1. Crea una macro in visualizzazione struttura
    2. Al primo rigo Azione, scrivi:
    ApriMaschera
    Nome maschera: ArticoloModificaMisuraOrdineModifica
    Condizione WHERE: [IDArticoloMisuraOrdine] = [Forms]![ArticoloModifica]![IDArticoliMisuraOrdine]
    3. Salva la macro con nome X
    4. In visualizzazione struttura maschera, al pulsante | Proprietà | Eventi | Su clic: X
    5. Salva tutto

    Con le macro non si può sfruttare la sintassi Me! Se ho tentato di abbozzare quel codice è frutto dello stesso ragionamento fatto con la macro.
  • Re: Apertura maschera caricando un record specifico

    Niente non funziona neanche la macro anche perchè sostanzialmente fa esattamente quello che farebbe in VBA con il mio codice.
  • Re: Apertura maschera caricando un record specifico

    1) Raccontaci tutti i nomi tabelle e nomi campi. Altrettanto per le maschere.
    2) Controlla che non ci siano minimi errori di sintassi un po' ovunque. Talvolta un controllo in tabella si chiama in un modo, mentre in maschera diversamente.
    3) Siamo sicuri che sono tutte maschere principali? Non è che stai lavorando con sottomaschere? Le sintassi in questi casi cambiano in:
    [Forms]![NomeMascheraPrincipale]![NomeSottomaschera]![NomeControllo]
    4) I campi che entrano in gioco sono tutti visibili? Li hai inclusi realmente nelle maschere? Per questo motivo potrebbe apparire quel messaggio.
    5) Se, come al punto 2), hai corrotto involontariamente qualche denominazione di controllo e non sai dove mettere mano, prova a cancellare le maschere e ricostruirle da capo sfruttando la procedura guidata e includendo tutti i campi.
  • Re: Apertura maschera caricando un record specifico

    Risolto... non so bene come a dire il vero, sospetto di aver sbagliato a digitare il nome di un campo in precedenza.
    Grazie!
Devi accedere o registrarti per scrivere nel forum
9 risposte