Modificare campo da maschera esterna

di il
13 risposte

Modificare campo da maschera esterna

Buongiorno a tutti, ho un dubbio sul mio database (access 2007) e speravo che qualcuno più esperto di me riuscisse a darmi una mano.

Il mio database ha tre tabelle/maschere, ARTICOLI, PRESTITI, ACQUIRENTI
Il titolo può ingannare, la mia questione è abbastanza chiara da capire:
Le due maschere in questione sono una MIEI_ARTICOLI dove inserisco appunto i vari articoli con determinati campi, tra cui QUANTITA'; l'altra è MIEI_PRESTITI, dove gestisco i prestiti dei miei articoli a determinati ACQUIRENTI.

La tabella MIEI_PRESTITI ha un campo che si chiama QUANTITA'_PRESTATA, la domanda finale quindi come avrete già intuito è: una volta inserita la QUANTITA' PRESTATA nella maschera MIEI_PRESTITI, si può andare a scalare lo stesso valore dal campo QUANTITA' presente nella maschera MIEI_ARTICOLI?

Già che ci siete, potete gentilmente dirmi anche come mettere un blocco alla cancellazione di un ACQUIRENTE se quest ultimo ha ancora in prestito un articolo?

Grazie a chiunque abbia voglia di rispondermi!

13 Risposte

  • Re: Modificare campo da maschera esterna

    SteveG ha scritto:


    Il mio database ha tre tabelle/maschere, ARTICOLI, PRESTITI, ACQUIRENTI
    Se non vado errato la tua struttura tabelle dovrebbe essere Acquirenti molti-a-molti Articoli con la tabella di congiunzione Prestiti.

    SteveG ha scritto:


    La tabella MIEI_PRESTITI ha un campo che si chiama QUANTITA'_PRESTATA, la domanda finale quindi come avrete già intuito è: una volta inserita la QUANTITA' PRESTATA nella maschera MIEI_PRESTITI, si può andare a scalare lo stesso valore dal campo QUANTITA' presente nella maschera MIEI_ARTICOLI?
    Il campo Quantità non deve stare nella tabella Articoli. Deve stare nella tabella Prestiti...che in pratica funge da Movimenti. Se la Quantità entra tu metti un numero positivo, se la Quantità esce metti un numero negativo.
  • Re: Modificare campo da maschera esterna

    OsvaldoLaviosa ha scritto:


    SteveG ha scritto:


    Il mio database ha tre tabelle/maschere, ARTICOLI, PRESTITI, ACQUIRENTI
    Se non vado errato la tua struttura tabelle dovrebbe essere Acquirenti molti-a-molti Articoli con la tabella di congiunzione Prestiti.

    SteveG ha scritto:


    La tabella MIEI_PRESTITI ha un campo che si chiama QUANTITA'_PRESTATA, la domanda finale quindi come avrete già intuito è: una volta inserita la QUANTITA' PRESTATA nella maschera MIEI_PRESTITI, si può andare a scalare lo stesso valore dal campo QUANTITA' presente nella maschera MIEI_ARTICOLI?
    Il campo Quantità non deve stare nella tabella Articoli. Deve stare nella tabella Prestiti...che in pratica funge da Movimenti. Se la Quantità entra tu metti un numero positivo, se la Quantità esce metti un numero negativo.
    Ciao grazie della tua risposta,

    Avrei voluto farlo come hai detto tu, ma avevo la necessità che il campo quantità fosse nella tabella articoli, per poterlo monitorare in qualsiasi momento... Non c'è un modo di fare quello che ho scritto, anche se è un procedimento molto più complesso?
  • Re: Modificare campo da maschera esterna

    Per monitorare quello che hai (giacenza) usa una QUERY.
  • Re: Modificare campo da maschera esterna

    Quindi quello che chiedo io non si può fare?
  • Re: Modificare campo da maschera esterna

    SteveG ha scritto:


    Quindi quello che chiedo io non si può fare?
    Certo che si può fare e nella Tabella Articoli ovviamente deve esserci il Valore della Giacenza residuale, altrimenti devi fare calcoli al Volo e non ne esci più...!
    Quindi se dalla Maschera collegata alla Tabella Movimenti, che tu chiami Prestiti, inserisci un Nuovo Record, ovvero un Movimento, andrai ad effettuare una Query di UPDATE che Somma con SEGNO la quantità dell'articolo movimentato sul campo Giacenza della Tabella Articoli.
    
    UPDATE Articoli SET [Giacenza]=[Giacenza]+[ValoreMovimento]
    L'unica variabile è il [ValoreMovimento] che avrà SEGNO[-] se l'articolo esce o SEGNO[+] se rientra.
  • Re: Modificare campo da maschera esterna

    Ciao Alex grazie anche a te del tuo interessamento e dei tuoi consigli,

    Mi chiedevo, ma Giacenza sarebbe l'equivalente del mio campo quantità vero?
    Comunque qualche oretta fa stavo provando a fare la query di aggiornamento, scrivendo nella struttura
    Campo: Quantità
    Tabella: Articoli
    Aggiorna a: [ARTICOLI].[QUANTITA']-[PRESTITI].[QUANTITA' PRESTATA]

    Funziona ma anzichè andare a prendersi automaticamente il valore di [PRESTITI].[QUANTITA' PRESTATA] mi appare una finestrella e lo devo inserire a mano...
    Probabilmente perchè devono essere legate tramite gli id ma non ci sto capendo molto e sto facendo pasticci...
    Ti sarei grato mi aiutassi ancora!
  • Re: Modificare campo da maschera esterna

    Aggiornamento:
    Sono finalmente riuscito a eseguire la query di aggiornamento e funziona
    MA
    ogni volta che la rieseguo mi va a scalare nuovamente le quantita' di ogni record e non solo di quello corrente....
    la query che ho scritto è:
    UPDATE ARTICOLI INNER JOIN PRESTITI ON ARTICOLI.ID_ARTICOLO = PRESTITI.ID_ARTICOLO SET ARTICOLI.[QUANTITA'] = [ARTICOLI]![QUANTITA']-[PRESTITI]![QUANTITA' PRESTATA];
    
    cosa sbaglio?
  • Re: Modificare campo da maschera esterna

    Non sbagli nulla..?
    La.domanda è sbagliata... perché la devi rieseguire in modo indiscriminato..?
    La sua esecuzione va attentamente gestita da codice sfruttando gli eventi di Maschera che intercettano appunto il NUOVO MOVIMENTO... e non così "ad minchiam".
  • Re: Modificare campo da maschera esterna

    @Alex ha scritto:


    Non sbagli nulla..?
    La.domanda è sbagliata... perché la devi rieseguire in modo indiscriminato..?
    La sua esecuzione va attentamente gestita da codice sfruttando gli eventi di Maschera che intercettano appunto il NUOVO MOVIMENTO... e non così "ad minchiam".
    Ciao Alex scusa forse mi sono espresso male, io non voglio che la query venga eseguita in modo indiscriminato, ma bensì che venga eseguita solo sui record che sto prendendo in considerazione! Esempio, se io ho 10 record, e al terzo devo diminuire la quantità, voglia venga fatta solo sul terzo elemento (che starò prendendo in gestione dalla maschera) e non su tutti!
    Quello che ho scritto ora esegue alla pressione di un pulsante, il codice su tutti i record, quindi mi va a togliere ogni volta il valore di QUANTITA'_PRESTATA a QUANTITA' decrementandolo più del dovuto...
  • Re: Modificare campo da maschera esterna

    Ovviamente... per questo devi usare una WHERE CONDITION che passi alla Query UPDATE la PK su cui devi agire...
    Sei certo che in quella Query che hai fatto il JOIN sia necessario..?
    Di solito si punta al campo specifico usando come identificatore la PK...
  • Re: Modificare campo da maschera esterna

    @Alex ha scritto:


    Ovviamente... per questo devi usare una WHERE CONDITION che passi alla Query UPDATE la PK su cui devi agire...
    Sei certo che in quella Query che hai fatto il JOIN sia necessario..?
    Di solito si punta al campo specifico usando come identificatore la PK...
    Senza l'INNER JOIN non mi trova il campo [PRESTITI]![QUANTITA' PRESTATA]...
    Comunque ho cercato di aggiornare la mia query come mi hai detto e ho scritto:
    UPDATE ARTICOLI INNER JOIN PRESTITI ON ARTICOLI.ID_ARTICOLO=PRESTITI.ID_ARTICOLO SET ARTICOLI.[QUANTITA'] = [ARTICOLI]![QUANTITA']-[PRESTITI]![QUANTITA' PRESTATA]
    WHERE [ARTICOLI].[ID_ARTICOLO]=[PRESTITI].[ID_ARTICOLO];
    
    Ma niente da fare! A sto giro non so più dove mettere le mani se riuscissi a darmi un ulteriore aiuto o qualche esempio da leggere te ne sarei infinitamente grato!
  • Re: Modificare campo da maschera esterna

    Operativamente hai digitato il quantitativo nella maschera Movimenti, quella dalla quale dovresti aggiornare il campo nella tabella Articoli...
    Prova a pensare perché dovresti recuperare il dato da una tabella in join quando lo hai a disposizione li..?
    Quindi come ti avevo detto fin da subito... la Query UPDATE è semplificabile recuperando IdArticolo e quantità dalla maschera e gestendo su evento BeforeUpdate della stessa l'esecuzione della query.

    Quindi, semplifico per farti capire, manca tutta la gestione errori e Validazione della modifica.
    
    Private Sub Form_BeforeUpdate(Cancel as Integer)
        Dim strtSQL As String
        strSQL="UPDATE TblArticolo SET [Quantita]=[Quantita]+" & Me!ControlloQuantita & " WHERE IDArticolo=" & Me!IdArticolo
        DbEngine(0)(0).Execute strSQL
    End Sub
  • Re: Modificare campo da maschera esterna

    Grazie Alex, i tuoi consigli sono stati utilissimi e il mio programma funziona, grazie mille!
Devi accedere o registrarti per scrivere nel forum
13 risposte