Nuovo record con campo pre inserito

di il
45 risposte

45 Risposte - Pagina 3

  • Re: Nuovo record con campo pre inserito

    Nessuno che lo sa ?
    nessuno che mi aiuta?

    HELP
  • Re: Nuovo record con campo pre inserito

    asnaldo ha scritto:


    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
    Ciao asnaldo, pendo che potresti risolvere usando la funzione "Dlookup" per verificare l'esistenza del dato inserito. Nella guida di Access troverai tutte le informazioni su questa funzione. Modificando appropriatamente il codice della sub che hai scritto per l'evento "su click" del tasto "modifica ordine" ed inserendo un "if .. then ... else" per far aprire la maschera solo se il numero d'ordine c'è, possibilmente facendo inserire a monte il numero di testata da modificare tramite un inputbox in modo che ti venga rischiesto una volta sola, dovresti risolvere il problema dell'apertura della maschera.
  • Re: Nuovo record con campo pre inserito

    Philcattivocarattere ha scritto:


    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.
    Chiedo scusa per l'assenza ma mi è sfuggita la questione...
    Tutti i campi che l'utente non deve EDITARE non si compilano in quel modo in quanto l'assegnazione del valore SALVA il Record appena l'utente si sposta... ma magari il Record non deve essere salvato anche perchè l'utente NON HA COMPILATO ancora nulla...!
    Per questo, le strade sui CAMPI FISSI sono solo 2.
    1) DEFAULT VALUE e si Blocca l'editing del Controllo
    2) BeforeInsert del Record, in questo evento si assegnano i valori imposti

    Preferisco il 1° perchè i valori si VEDONO ma, non generano il NEWRECORD.

    Saluti
  • Re: Nuovo record con campo pre inserito

    Chiedo scusa per l'assenza ma mi è sfuggita la questione...
    Tutti i campi che l'utente non deve EDITARE non si compilano in quel modo in quanto l'assegnazione del valore SALVA il Record appena l'utente si sposta... ma magari il Record non deve essere salvato anche perchè l'utente NON HA COMPILATO ancora nulla...!
    Per questo, le strade sui CAMPI FISSI sono solo 2.
    1) DEFAULT VALUE e si Blocca l'editing del Controllo
    2) BeforeInsert del Record, in questo evento si assegnano i valori imposti
    Preferisco il 1° perchè i valori si VEDONO ma, non generano il NEWRECORD.
    Scusa Alex... ma non saprei da dove partire.. mi potresti scrivere il codice che dovrei usare per fare il punto 1? ho provato a leggere la pagine riguardo l'uso di DEFAULT VALUE ma non capisco come fare...
  • Re: Nuovo record con campo pre inserito

    
    Option Compare Database
    Option Explicit
    
    Private Sub Form_Load()
        If Len(Me.OpenArgs & vbNullString)=0 Then Exit Sub
        Me.!Cliente.DefaultValue = Chr(34) & cStr(Me.OpenArgs) & Chr(34)
    End Sub
    Attenzione al DataType, che richeide una specifica formattazione del DefaulValue..., in questo caso il DataType previsto è NUMERICO... e come vedi viene ricondotto a Stringa...!
  • Re: Nuovo record con campo pre inserito

    Ho provato ad usare il codice ch emi hai scritto, ho tolto solo il punto esclamativo dopo il Me.
    Private Sub Form_Load()
        If Len(Me.OpenArgs & vbNullString) = 0 Then Exit Sub
        Me.cliente.DefaultValue = Chr(34) & CStr(Me.OpenArgs) & Chr(34)
    End Sub
    Praticamente è come prima, quando inserisco un numero ordine presente nel db mi va in modifica, mentre se inserisco uno non presente mi apre cmq la maschera di inserimento ordine
  • Re: Nuovo record con campo pre inserito

    asnaldo ha scritto:


    ho provato ad usare il codice ch emi hai scritto, ho tolto solo il punto esclamativo dopo il Me.
    Private Sub Form_Load()
        If Len(Me.OpenArgs & vbNullString) = 0 Then Exit Sub
        Me.cliente.DefaultValue = Chr(34) & CStr(Me.OpenArgs) & Chr(34)
    End Sub
    Praticamente è come prima, quando inserisco un numero ordine presente nel db mi va in modifica, mentre se inserisco uno non presente mi apre cmq la maschera di inserimento ordine
    Ciao asnaldo, credo che il codice postato da Alex serva solo ad impostare il valore di default di "Me.cliente ". Se rileggi il mio post, ti avevo scritto un possibile modo per modificare l'apertura della maschera. Se non sono stato chiaro chiedimi pure spiegazioni, se non ti interessano le mie indicazioni va bene così.
  • Re: Nuovo record con campo pre inserito

    Ciao asnaldo, pendo che potresti risolvere usando la funzione "Dlookup" per verificare l'esistenza del dato inserito. Nella guida di Access troverai tutte le informazioni su questa funzione. Modificando appropriatamente il codice della sub che hai scritto per l'evento "su click" del tasto "modifica ordine" ed inserendo un "if .. then ... else" per far aprire la maschera solo se il numero d'ordine c'è, possibilmente facendo inserire a monte il numero di testata da modificare tramite un inputbox in modo che ti venga rischiesto una volta sola, dovresti risolvere il problema dell'apertura della maschera.
    Ciao, e non essendo molto esperto pensavo che il codice di Alex fosse quello che mi hai scritto tu sopra.. anche perchè già il codice che avevo faceva la stessa cosa e sinceramente non capisco la differenza tr ail codice che usavo prima e quello suggerito da Ales.

    Ora utilizzo questo codice:
    Private Sub ModificaOrdine_Click()
    DoCmd.OpenForm "ordine", acNormal, "", "[id_ordine_testata] = [inserisci numero testata da modificare]", acEdit, acNormal
    End Sub
    Mike, te ne sarei molto grato se mi scrivessi il codice per la modifica descritta da te, che è proprio quello che cerco.
    tks
  • Re: Nuovo record con campo pre inserito

    asnaldo ha scritto:


    Ora utilizzo questo codice:
    Private Sub ModificaOrdine_Click()
    DoCmd.OpenForm "ordine", acNormal, "", "[id_ordine_testata] = [inserisci numero testata da modificare]", acEdit, acNormal
    End Sub
    Mike, te ne sarei molto grato se mi scrivessi il codice per la modifica descritta da te, che è proprio quello che cerco.
    tks
    Ho fatto un test veloce e dovrebbe funzionare. Prova modificando il tuo codice così:
    Private Sub ModificaOrdine_Click()
    Dim NOrdine As Integer
    Dim Result As Variant
    
    NOrdine = InputBox("Inserisci il numero della testata da modificare:")
    
    If IsNull(NOrdine) Then ' gestione del caso in cui non si inserisce niente
        Exit Sub
    End If
    
    Result = DLookup("id_ordine_testata", "TUATABELLA", "id_ordine_testata=" & NOrdine)
    
    If IsNull(Result) Then
        MsgBox "Il numero d'ordine inserito è errato!", vbExclamation
        Exit Sub
    Else
        DoCmd.OpenForm "ordine", acNormal, "", "[id_ordine_testata]=" & NOrdine, acEdit, acNormal
    End if
    
    End Sub
    Ho supposto che il campo "id_ordine_testata" sia di tipo numerico. Sostituisci a TUATABELLA il nome della tabella contenente "id_ordine_testata" (credo che dovrebbe essere la tabella "ordini", non sono sicuro perché non mi sono riletto tutto). Per spiegazioni sulla funzione "Dlookup" puoi consultare la guida di Access. Nell'eventualità che venga inserita una lettera invece di un numero, ti verrà restituito un errore di run-time. Fai delle prove e se hai problemi fammi sapere.
  • Re: Nuovo record con campo pre inserito

    Az che figata funziona PERFETTAMENTE !!! grazie mille sei il mio eroe !!!

    pian piano sto imparando sempre di più grazie a tutti voi !!

    grazie mille !!
  • Re: Nuovo record con campo pre inserito

    @mikelemm ancora più difficile... se non scrivo niente nel campo che mi dice "insierisci numero ordine" e clicco annulla oppure su ok mi viene fuori l'errore... cosa potrei aggiungere nel codice per evitare che mi compaia l'errore run-time ?
  • Re: Nuovo record con campo pre inserito

    mikelemm ha scritto:


    Nell'eventualità che venga inserita una lettera invece di un numero, ti verrà restituito un errore di run-time. Fai delle prove e se hai problemi fammi sapere.
    Ciao asnaldo, ti avevo avvisato dell'eventualità che potesse comparire un errore. L'errore in questione è il numero 13, se non ricordo male. Non puoi eliminare la comparsa dell'errore ma puoi gestirlo. Per gestirlo in maniera efficace, basta inserire nella routine una gestione degli errori. Riscrivi così la routine:
     Private Sub ModificaOrdine_Click()
    Dim NOrdine As Integer
    Dim Result As Variant
    
    On error goto ModificaErr 'indica l'etichetta che gestisce gli errori all'interno della routine 
    
    NOrdine = InputBox("Inserisci il numero della testata da modificare:")
    
    If IsNull(NOrdine) Then ' gestione del caso in cui non si inserisce niente
        Exit Sub
    End If
    
    Result = DLookup("id_ordine_testata", "TUATABELLA", "id_ordine_testata=" & NOrdine)
    
    If IsNull(Result) Then
        MsgBox "Il numero d'ordine inserito è errato!", vbExclamation
        Exit Sub
    Else
        DoCmd.OpenForm "ordine", acNormal, "", "[id_ordine_testata]=" & NOrdine, acEdit, acNormal
    End if
    
    ModificaErr:
    
    If Err.number = 0 Then 'errore 0 viene restituito quando va tutto bene e non si deve fare niente
    ElseIf Err.number = 13 Then 
         MsgBox "Inserimento errato!", vbExclamation 'gestione dell'inserimento errato o nullo
         Exit Sub ' esce dalla routine 
    Else
         MsgBox "Errore n. " & Err.number & VbCrLf & _ 'segnalazione di altri eventuali errori 
              Err.Description, vbCritical 
         Exit Sub 
    End If
    
    End Sub
    Io la gestione degli errori la faccio così. In caso tu inserisca una lettera o lasci vuota l'input box ti uscirà la segnalazione "Inserimento errato!". Per la pressione dell'annulla non ricordo se va bene così.
    Prova e se hai problemi fammi sapere. Ciao.
  • Re: Nuovo record con campo pre inserito

    Ciao e grazie in anticipo per l'aituo
    mi dà errore
    errore di compilazione: ERRORE DI SINTASSI
    su questa riga:
    MsgBox "Errore n. " & Err.number & VbCrLf & _ 'segnalazione di altri eventuali errori
    cmq se metto gli apici su queste due righe
        '     MsgBox "Errore n " & Err.number & VbCrLf & _ 'segnalazione di altri eventuali errori
        '          Err.Description , vbCritical
    funziana tutto correttamente !! da quello che ho capito mancherà la gestione di altri errori ma già così va super benone
  • Re: Nuovo record con campo pre inserito

    asnaldo ha scritto:


    Ciao e grazie in anticipo per l'aituo
    mi dà errore
    errore di compilazione: ERRORE DI SINTASSI
    su questa riga:
    MsgBox "Errore n. " & Err.number & VbCrLf & _ 'segnalazione di altri eventuali errori
    cmq se metto gli apici su queste due righe
        '     MsgBox "Errore n " & Err.number & VbCrLf & _ 'segnalazione di altri eventuali errori
        '          Err.Description , vbCritical
    funziana tutto correttamente !! da quello che ho capito mancherà la gestione di altri errori ma già così va super benone
    Ho rivisto il codice e anche a me da errore. Dato che l'ho scritto non ho u utilizzando l'editor, ci stà che qualche carattere non vada bene. Comunque, se togli tutto quello scritto dall'apice in poi, apice compreso, che è solo il commento del codice, funziona tutto. Ho fatto una prova e dopo aver rimosso il commento non mi ha dato problemi.
  • Re: Nuovo record con campo pre inserito




    funge !
Devi accedere o registrarti per scrivere nel forum
45 risposte