Nuovo record con campo pre inserito

di il
45 risposte

Nuovo record con campo pre inserito

Dalla maschera anagrafica cliente ho creato un tasto "crea_ordine" che se cliccato dovrebbe aprirmi la maschera di inserimento ordine con però pre-inserito il codice cliente dell'anagrafica che si sta visulizzando. Il campo nella maschera "Ordine" si chiama id_cliente mentre nella maschera anagrafica cliente il campo si chiama "cliente"

con questo codice non mi funziona. HELP
Private Sub crea_ordine_Click()
    DoCmd.OpenForm "ordine", acNewRec, "", "[id_cliente] = [cliente]", acNewRec
End Sub

45 Risposte

  • Re: Nuovo record con campo pre inserito

    asnaldo ha scritto:


    Dalla maschera anagrafica cliente ho creato un tasto "crea_ordine" che se cliccato dovrebbe aprirmi la maschera di inserimento ordine con però pre-inserito il codice cliente dell'anagrafica che si sta visulizzando. Il campo nella maschera "Ordine" si chiama id_cliente mentre nella maschera anagrafica cliente il campo si chiama "cliente"
    con questo codice non mi funziona. HELP
    Private Sub crea_ordine_Click()
        DoCmd.OpenForm "ordine", acNewRec, "", "[id_cliente] = [cliente]", acNewRec
    End Sub
    Te credo che non funziona: acNewReg non va bene per OpenForm, si usa con DoCmd.GoToRecord ma riguarda la maschera attiva, che in quel momento è ancora quella da dove lanci l'istruzione di apertura. Eventualmente devi usare acFormAdd (guarda il link sotto)
    "[id_cliente] = [cliente]"
    è il parametro WhereCondition, serve per limitare i valori da visualizzare, non per assegnare un valore ad un controllo di quella maschera. Per quello devi usare l'ultimo parametro, OpenArgs https://msdn.microsoft.com/en-us/library/office/ff820845.aspx (qui li trovi tutti) che poi andrai a leggere nell'evento OnLoad della maschera che apri per assegnarlo a [Cliente].
  • Re: Nuovo record con campo pre inserito

    Penso che se avessi creato maschera/sottomaschera Clienti/Ordini con procedura guidata, poi avessi scelto "Maschere collegate", Access predispone tutto per te.
    In alternativa io non escluderei di impostare come Valore predefinito sul campo Ordini.IDCliente l'espressione:
    [Forms]![Ordini]![Cliente]
    non ricordo se bisogna mettere = davanti.
  • Re: Nuovo record con campo pre inserito

    Ho provato così ma non funge
    Private Sub crea_ordine_Click()
        DoCmd.OpenForm "ordine", acNormal, , , _
            acReadOnly, , "id_cliente"
    End Sub
    
    Sub Form_Open
        Dim strcliente As Integer
    strcliente = Forms![ordine].OpenArgs
        If Len(strcliente) > 0 Then
            DoCmd.GoToControl "Last Name"
            DoCmd.FindRecord strcliente, , True, , _
               True, , True
        End If
    End Sub

    help
  • Re: Nuovo record con campo pre inserito

    Segui questo mio consiglio:
    1. Se il tuo database si chiama X, fai una copia di back-up e lo chiami Y
    2. Apri il database Y
    3. Costruisci maschera/sottomaschera Clienti/Ordini con procedura guidata, scegliendo "Maschere collegate", nominando maschera e sottomaschera (ultima finestra procedura guidata) esattamente come le tabelle (ossia Clienti e Ordini)
    4. Termina la procedura guidata
    5. Vai in visualizzazione struttura maschera Clienti
    6. Seleziona il "tasto" che Access ha predisposto e vai al Evento Su clic e vai a sbirciare il codice che Access ha predisposto. Copiatelo e incollalo (eventualmente riadattato) al tuo pulsante nel database X.
  • Re: Nuovo record con campo pre inserito

    Ok ci provo..

    intanto guarda qui che ho trovato un problema simile al mio

    http://microsoft.public.it.office.access.narkive.com/6DdhSrSu/aprire-form-ordini-su-idcliente-della-form-clienti
  • Re: Nuovo record con campo pre inserito

    (ero distratto a scrivere questo post mentre voi proseguivate con la discussione, quindi perdonatemi se ho ignorato del tutto i due interventi che precedono questo)

    asnaldo ha scritto:


    ho provato così ma non funge
    il "non funge" è un'indicazione un po' troppo generica. Cosa non funge? Presumibilmente un po' tutto.

    asnaldo ha scritto:


    Private Sub crea_ordine_Click()
        DoCmd.OpenForm "ordine", acNormal, , , _
            acReadOnly, , "id_cliente"
    End Sub
    Ma come? acReadOnly: apri in sola lettura una maschera in qui devi inserire un nuovo record?
    Se passi al parametro OpenArgs "id_cliente", nella maschera che apri ti troverai la proprietà OpenArgs valorizzata ad "id_cliente", una stringa, non il valore
    Private Sub crea_ordine_Click()
        DoCmd.OpenForm "ordine", acNormal, , , _
            acFormAdd, , Me![id_cliente].Value
    End Sub
    E qui si chiude il codice della maschera di partenza

    Qua si passa alla maschera "ordine"

    asnaldo ha scritto:


    Sub Form_Open
        Dim strcliente As Integer
    strcliente = Forms![ordine].OpenArgs
        If Len(strcliente) > 0 Then
            DoCmd.GoToControl "Last Name"
            DoCmd.FindRecord strcliente, , True, , _
               True, , True
        End If
    End Sub
    Non è coerente nominare una variabile con le iniziali str quando è tipo Integer.
    Puoi riferirti alla maschera stessa con Me, quindi
    Sub Form_Open
    Dim intCliente As Integer
    intcliente = Me.OpenArgs
    Me![CampoIDCliente].Value = intCliente
    End Sub
    Secondo me già con questo sei a buon punto. A cosa ti servisse tutto il resto, da [If Len] alla fine, non lo capisco. Forse un tentativo per correggere gli errori in apertura di prima.
    Che tipo di maschera è "Ordini"? Credo una maschera singola.
  • Re: Nuovo record con campo pre inserito

    Per IF lascia perdere avevo trovato una cosa simile su internet e ci ho provato.. ma non sapevo quello che stavo scrivendo..
    ok ho provato il codice ch emi hai detto ma non funziona mi dà questo errore
    "l'espressione su apertura immessa come impostazione della proprietà di evento ha generato l'errore seguente: la dichiarazione della routine non corrisponde alla desrizione dell'evento o della routine con lo stesso nome"
    Private Sub crea_ordine_Click()
        DoCmd.OpenForm "ordine", acNormal, , , _
            acFormAdd, , Me![cliente].Value
    End Sub
    
    Sub Form_Open()
        Dim intCliente As Integer
        intCliente = Me.OpenArgs
        Me![ID_cliente] = intCliente
    End Sub

    l'unica cosa ch eho cambiato del tuo codice e il pezzo Me![ID_cliente] = intCliente

    Il campo nella maschera da aprire in modifica è "Ordine" sul campo id_cliente mentre nella maschera anagrafica cliente il campo si chiama "cliente"
  • Re: Nuovo record con campo pre inserito

    asnaldo ha scritto:


    Per IF lascia perdere avevo trovato una cosa simile su internet e ci ho provato.. ma non sapevo quello che stavo scrivendo..
    ok ho provato il codice ch emi hai detto ma non funziona mi dà questo errore
    "l'espressione su apertura immessa come impostazione della proprietà di evento ha generato l'errore seguente: la dichiarazione della routine non corrisponde alla desrizione dell'evento o della routine con lo stesso nome"
    Private Sub crea_ordine_Click()
        DoCmd.OpenForm "ordine", acNormal, , , _
            acFormAdd, , Me![cliente].Value
    End Sub
    Questo codice va nell'evento Clic del pulsante della maschera Anagrafiche da dove dici di creare un nuovo ordine

    Solo questo pezzo
    Sub Form_Open()
        Dim intCliente As Integer
        intCliente = Me.OpenArgs
        Me![ID_cliente] = intCliente
    End Sub
    va nella maschera Ordine.
    Non dirmi che avevi messo tutto insieme.
  • Re: Nuovo record con campo pre inserito

    Essi
    ok ci provo poi ti aggiorno
  • Re: Nuovo record con campo pre inserito

    Uffa non va..
    nella maschera anagrafica, routine evento su click pulsante, ho messo
    Private Sub crea_ordine_Click()
        DoCmd.OpenForm "ordine", acNormal, , , _
            acFormAdd, , Me![ID_cliente].Value
    End Sub
    nella maschera ordine, routine evento, su apertura
    Sub Form_Open()
        Dim intCliente As Integer
        intCliente = Me.OpenArgs
        Me![cliente] = intCliente
    End Sub
    niente ... mi apre il vba in debug colore giallo su questa riga:
    acFormAdd, , Me![ID_cliente].Value

  • Re: Nuovo record con campo pre inserito

    asnaldo ha scritto:


    ...
    Private Sub crea_ordine_Click()
        DoCmd.OpenForm "ordine", acNormal, , , _
            acFormAdd, , Me![cliente].Value '<=== eccolo qua
    End Sub
    Il campo nella maschera da aprire in modifica è "Ordine" sul campo id_cliente mentre nella maschera anagrafica cliente il campo si chiama "cliente"
    ed inspiegabilmente il parametro OpenArgs diventa da Me![cliente].Value a Me![ID_Cliente].Value che nella maschera anagrafica non esiste (da quanto hai detto)

    asnaldo ha scritto:


    Private Sub crea_ordine_Click()
        DoCmd.OpenForm "ordine", acNormal, , , _
            acFormAdd, , Me![ID_cliente].Value
    End Sub
    niente ... mi apre il vba in debug colore giallo su questa riga:
    acFormAdd, , Me![ID_cliente].Value
    Metti il nome del controllo giusto.
  • Re: Nuovo record con campo pre inserito

    Niente non cambia anche con
    Private Sub crea_ordine_Click()
        DoCmd.OpenForm "ordine", acNormal, , , _
            acFormAdd, , Me![ID_cliente].Value
    End Sub
    mentre per il codice che ho inserito nella maschera è giusto inserirlo nella sezione apertura? perchè così facendo ho notato che ora se uso il pulsante che avevo creato con nuovo ordine mi dà errore
  • Re: Nuovo record con campo pre inserito

    asnaldo ha scritto:


    niente non cambia anche con
    Private Sub crea_ordine_Click()
        DoCmd.OpenForm "ordine", acNormal, , , _
            acFormAdd, , Me![ID_cliente].Value
    End Sub
    mentre per il codice che ho inserito nella maschera è giusto inserirlo nella sezione apertura? perchè così facendo ho notato che ora se uso il pulsante che avevo creato con nuovo ordine mi dà errore
    T'ho scritto che Me!ID_cliente.value è sbagliato.
    Private Sub crea_ordine_Click()
        DoCmd.OpenForm "ordine", acNormal, , , _
            acFormAdd, , Me![cliente].Value
    End Sub
    e per tagliare la testa al toro-codice, scrivi DoCmd.OpenForm su una riga sola
    Private Sub crea_ordine_Click()
    DoCmd.OpenForm "ordine", acNormal, , , accFormAdd, , Me.
    quando arrivi a Me. dovrebbe attivarsi l'intellisense che ti propone i valori che puoi inserire e cerca tra quelli se c'è Cliente o ID_Cliente. Alla fine aggiungi End Sub (sai mai)
  • Re: Nuovo record con campo pre inserito

    Scusa ma sono proprio all'inizio e fatico a capire..
    cmq ok con il tuo consiglio mi ha proposto il campo corretto che è :
    Private Sub crea_ordine_Click()
    DoCmd.OpenForm "ordine", acNormal, , , accFormAdd, , Me.ID_cliente
    End Sub
    ed effettivamente in debug mi carica il codice cliente esatto, se ci vado sopra vedo 5 che è proprio il cod_cli dell'anagrafica che ho aperto però si ferma lì e non va avanti...
    il cod che ho inserito nella amschera ordine su routine evento su apertura è :
    Sub Form_Open()
        Dim intCliente As Integer
        intCliente = Me.OpenArgs
        Me![cliente] = intCliente
    End Sub
Devi accedere o registrarti per scrivere nel forum
45 risposte