Nuovo record con campo pre inserito

di il
45 risposte

45 Risposte - Pagina 2

  • Re: Nuovo record con campo pre inserito

    asnaldo ha scritto:


    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...
    Cosa significa che si ferma lì e non va avanti? Non si vede la maschera Ordine? magari è nascosta dalla maschera anagrafiche?

    asnaldo ha scritto:


    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
    Anteponi alle 3 righe centrali della sub il carattere "apostrofo", così quello che segue viene ignorato. Cosa succede normalmente quando apri quella maschera?
  • Re: Nuovo record con campo pre inserito

    Da access sulla sinistra dove vedo la maschera facendo doppio clic già mi compare l'errore che è:

    "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"

    questo errore mi compara anche se metto i 3 apici nelle tre righe in mezzo, per riuscire ad aprirla gli apici devo metterli su tutte e 5 le righe

    però ho notato che se la scrivo così si apre
    
    Private Sub Form_Open(Cancel As Integer)
     Dim intCliente As Integer
     intCliente = Me.OpenArgs
     Me![cliente] = intCliente
    End Sub
    e si ferma in dedug ed evidenzia in giallo la riga :
    intCliente = Me.OpenArgs

    se ci vado sopra mi scrive Me.OpenArgs = nullo
  • Re: Nuovo record con campo pre inserito

    asnaldo ha scritto:


    però ho notato che se la scrivo così si apre
    
    Private Sub Form_Open(Cancel As Integer)
     Dim intCliente As Integer
     intCliente = Me.OpenArgs
     Me![cliente] = intCliente
    End Sub
    Giusto, tutti gli errori precedenti di questo tipo:
    "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"
    sono più o meno colpa mia perché all'inizio avevo usato (o pensato di usare) Form_Load (che non vuole parametri) e poi siamo passati a Form_Open che prevede l'uso del parametro Cancel. Comunque, se sequi la procedura guidata non puoi sbagliare.

    Appurato che lo scriviamo su Open
    Private Sub Form_Open(Cancel As Integer)
     Dim intCliente As Integer
     intCliente = Me.OpenArgs
     Me![cliente] = intCliente
    End Sub
    se apri direttamente la maschera Ordini (senza passare dal pulsante in Anagrafica) è normale che che succeda questo

    asnaldo ha scritto:


    e si ferm ain dedug riga gialla sulla riga
    intCliente = Me.OpenArgs
    se ci vado sopra mi scrive Me.OpenArgs = nullo
    perché avendola aperta "a mano" non ha ricevuto alcun OpenArgs (che infatti deriva dal codice messo sul pulsante nella maschera Anagrafica)
    Per ora possiamo risolvere così:
    Private Sub Form_Open(Cancel As Integer)
     If Not IsNull(Me.OpenArgs) Then
     Dim intCliente As Integer
     intCliente = Me.OpenArgs
     Me![cliente] = intCliente
     End If
    End Sub
    E' importante sapere però da quanti altri punti questa maschera può essere aperta, in modo da poter gestire tutti i valori che può assumere OpenArgs (in caso di necessità)
  • Re: Nuovo record con campo pre inserito

    Good si ora se la apro senza passare dalla maschera anagrafica funge.

    Però mi torna l'errore che ti dicevo prima, cliccando sul pulsante "crea ordine" nella maschera anagrafica, mi viene

    Errore di run-time '2448': impossibile asegnare un valore all'oggeto

    poi clicco debug e va sulla riga gialla, questa volta mi valorizza il campo :
    intCliente = Me.OpenArgs
    se ci vado sopra mi scrive Me.OpenArgs = 5

    ma non prosegue
  • Re: Nuovo record con campo pre inserito

    asnaldo ha scritto:


    Però mi torna l'errore che ti dicevo prima, cliccando sul pulsante "crea ordine" nella maschera anagrafica, mi viene
    Errore di run-time '2448': impossibile asegnare un valore all'oggeto
    poi clicco debug e va sulla riga gialla, questa volta mi valorizza il campo :
    intCliente = Me.OpenArgs
    se ci vado sopra mi scrive Me.OpenArgs = 5
    Tendo ad escludere che sia un problema di tipo dati, perché comunque nelle mie prove una stringa è stata tranquillamente e silenziosamente convertita in Integer, comunque prova con
    intCliente = CInt(Me.OpenArgs)
    Se questo non risolve, come immagino, dobbiamo guardare a cosa ci sta sotto: qual è l'origine della maschera "Ordini"?
    Il controllo che è destinato ad ospitare il codice del cliente è bloccato / disabilitato o liberamente gestibile?
  • Re: Nuovo record con campo pre inserito

    Essi si blocca lo stesso, però in realtà no è quella la riga dove si evidenzia in giallo e si blocca ma è quella dopo :
    intCliente = CInt(Me.OpenArgs)
    questa=> Me![cliente] = intCliente

    e cmq anche con questa riga mi valorizza il cod cli "5" che è corretto
    nella maschera ordine
    il campo cliente ha
    origine controllo "cliente"
    abilitato "si"
    bloccato "no"
  • Re: Nuovo record con campo pre inserito

    asnaldo ha scritto:


    essi si blocca lo stesso, però in realtà no è quella la riga dove si evidenzia in giallo e si blocca ma è quella dopo :
    intCliente = CInt(Me.OpenArgs)
    questa=> Me![cliente] = intCliente

    e cmq anche con questa riga mi valorizza il cod cli "5" che è corretto
    nella maschera ordine
    il campo cliente ha
    origine controllo "cliente"
    abilitato "si"
    bloccato "no"
    Tentativo numero 2: come prima, sfrutta l'intellisense. Modifica il codice da Me![Cliente] a Me. (con il punto) e nell'elenco che si attiva guarda se c'è Cliente.
  • Re: Nuovo record con campo pre inserito

    Quando parliamo di Valori IMPOSTI, non si usa MAI l'assegnazione alla proprietà VALUE, ma si deve ricorrere alla proprietà DEFAULTVALUE.
    La motivazione è ovvia, il DefaultValue non genera il NUOVO RECORD, e siccome sono valori imposti... significa che non devono essere quelli che generano il Record.

    Saluti
  • Re: Nuovo record con campo pre inserito

    Modificando come mi hai suggerito, il campo cliente me lo propone :
    Private Sub Form_Open(Cancel As Integer)
        If Not IsNull(Me.OpenArgs) Then
            Dim intCliente As Integer
            intCliente = Me.OpenArgs
            'intCliente = CInt(Me.OpenArgs)
            Me.cliente = intCliente
        End If
    End Sub
    tra l'altro mi pare sia corretto in quando se vado sul cursone su
    Me.cliente mi dice nullo
    se vado su intCliente mi dice 5

    e in mezzo c'è un = quindi in teoria il nullo dovrebbe diventare 5.. ma non succede e mi dà l'errore : Errore di run-time '-2147352567 (800200009)':: impossibile asegnare un valore all'oggeto
    Quando parliamo di Valori IMPOSTI, non si usa MAI l'assegnazione alla proprietà VALUE, ma si deve ricorrere alla proprietà DEFAULTVALUE.
    La motivazione è ovvia, il DefaultValue non genera il NUOVO RECORD, e siccome sono valori imposti... significa che non devono essere quelli che generano il Record.
    @Alex quindi come dovrei modificarlo il codice?
  • Re: Nuovo record con campo pre inserito

    @Alex ha scritto:


    Quando parliamo di Valori IMPOSTI, non si usa MAI l'assegnazione alla proprietà VALUE, ma si deve ricorrere alla proprietà DEFAULTVALUE.
    La motivazione è ovvia, il DefaultValue non genera il NUOVO RECORD, e siccome sono valori imposti... significa che non devono essere quelli che generano il Record.
    Visto che ho seguito io principalmente la discussione, fornendo le indicazioni, intervengo con domande mie. Da cosa si capisce che in questa situazione il campo(e controllo) Cliente è uno di quelli IMPOSTI?
    Mi spiego: ho creato la cosa in una "situazione simile" (almeno credevo) e non ho avuto alcun problema ad assegnare il valore ad un campo id (chiave esterna)
  • Re: Nuovo record con campo pre inserito

    Philcattivocarattere ha scritto:


    @Alex ha scritto:


    Quando parliamo di Valori IMPOSTI, non si usa MAI l'assegnazione alla proprietà VALUE, ma si deve ricorrere alla proprietà DEFAULTVALUE.
    La motivazione è ovvia, il DefaultValue non genera il NUOVO RECORD, e siccome sono valori imposti... significa che non devono essere quelli che generano il Record.
    Visto che ho seguito io principalmente la discussione, fornendo le indicazioni, intervengo con domande mie. Da cosa si capisce che in questa situazione il campo(e controllo) Cliente è uno di quelli IMPOSTI?
    Mi spiego: ho creato la cosa in una "situazione simile" (almeno credevo) e non ho avuto alcun problema ad assegnare il valore ad un campo id (chiave esterna)
    Mi autoquoto: nei miei test non ero sull'evento Open ma sull'evento Load (cosa che mi trascino dall'inizio del thread, sorry). Su Open la situazione è la stessa.

    Quindi asnaldo, prova a mettere il codice nell'evento Su Caricamento e non Su Apertura (utilizza sempre la procedura guidata e cancella quello che abbiamo usato finora su "Ordini")
    Private Sub Form_Load
        If Not IsNull(Me.OpenArgs) Then
            Dim intCliente As Integer
            intCliente = Me.OpenArgs
            'intCliente = CInt(Me.OpenArgs)
            Me.cliente = intCliente
        End If
    End Sub
    Ecco... ora forse ho capito il DefaultValue dove entra in gioco.
  • Re: Nuovo record con campo pre inserito

    GRADISSIMO !!!!


    Private Sub Form_Load()
        If Not IsNull(Me.OpenArgs) Then
            Dim intCliente As Integer
            intCliente = Me.OpenArgs
            'intCliente = CInt(Me.OpenArgs)
            Me.cliente = intCliente
        End If
    End Sub

    funge
  • Re: Nuovo record con campo pre inserito

    asnaldo ha scritto:


    funge
    Se non funzionava che emoticon usavi?

    Compiti per casa
    - per me:
    1) ricordarsi di usare nei test le stesse situazioni che si usano nel thread, altrimenti le indicazioni non sono coerenti;
    2) imparare la diverso funzionamento degli eventi Open e Load delle maschere

    - per asnaldo
    studiare, in generale, perché questa volta ti ho seguito passo passo (e ti ho fatto pure inciampare) parecchio ma su molte cose gli errori erano proprio grossolani.
  • Re: Nuovo record con campo pre inserito

    TKS mille sei stato molto paziente e molto in gamba !

    ok ok ok non ripeterò più quegli errori !
  • Re: Nuovo record con campo pre inserito

    Ora è così e funziona :

    su click del tasto modifica ordine
    Private Sub ModificaOrdine_Click()
    DoCmd.OpenForm "ordine", acNormal, "", "[id_ordine_testata] = [inserisci numero testata da modificare]", acEdit, acNormal
    End Sub
    su caricamento maschera
    Private Sub Form_Load()
        If Not IsNull(Me.OpenArgs) Then
            Dim intCliente As Integer
            intCliente = Me.OpenArgs
            'intCliente = CInt(Me.OpenArgs)
            Me.cliente = intCliente
        End If
    End Sub
    quando viene inserito un numero ordine non presente nel db il pulsante apre cmq la maschera in inserimento nuovo ordine. Come posso modificare il codice dicendogli che se il numero ordine non è presente compaia un messaggio "ordine non presente" ??

    tks
Devi accedere o registrarti per scrivere nel forum
45 risposte