VBA fra maschere e tabelle

di il
7 risposte

VBA fra maschere e tabelle

Ciao
ho due tabelle, una di nome Ordini e una di nome Contratti. Le due tabelle sono in relazione fra loro.
A queste due tabelle sono collegate le maschere Inserimento Ordini e Inserimento Contratti.
Nella tabella Contratti ci sono i dati relativi ad ogni contratto [Numero Contratto] , [Importo del contratto] e [Residuo].
Nella tabella Ordini fra altri dati ci sono i dati relativi al [tipo documento] (che può essere un ordine o un contratto) [numero contratto] e [l’importo] che per un singolo acquisto sto spendendo.
Sto cercando di scrivere la seguente istruzione senza successo:
Se nel campo [Tipo documento] della maschera Inserimento Ordini c’è scritto “Contratto” allora controlla se il valore del campo [Importo] della solita maschera è maggiore del campo [Residuo] della tabella Contratti nel record del numero contratto uguale al valore inserito nel campo [numero contratto] della maschera Inserimento ordini . Se è maggiore dimmi che i soldi sono finiti. Poi aggiornami il residuo nella tabella

Esempio in 4 passaggi

Tabella Contratti (1)
n.contratto.......residuo
1...................1000
2...................2000
3...................3000

Maschera Inserimento Ordini (2)
n.contratto......importo
3...................500

Tabella Contratti (3)
n.contratto......residuo
1...................1000
2...................2000
3...................2500

Maschera Inserimento Ordini (4)
n.contratto.....importo
3..................2600

Attenzione i soldi sono finiti.

E' la prima volta che scrivo il codice e non sono riuscito a fare meglio:

Private Sub Form_AfterUpdate()
SELECT N_Contratto, Importo, Residuo FROM Contratti WHERE N_Contratto = Form_Inserimento_ordini.Importo;"
If [Tipo_documento] = "Contratto" Then
If Form_Inserimento_ordini.Importo >= 'non so cosa scrivere perchè qualsiasi cosa metto mi da errore' Then
MsgBox " ATTENZIONE BUDGET FINITO", vbOKOnly + vbCritical, "Budget"
DoCmd.OpenQuery "Q_Residuo", acViewNormal, acEdit
End If
End If
End Sub

(nella Query Q_Residuo c'è UPDATE Contratti SET Contratti.Residuo = [Residuo]-[Forms]![Inserimento_ordini]![Importo]
WHERE (((Contratti.N_contratto)=[Inserire numero contratto]));
'questa query mi parte solo se si verifica IF, quindi devo studiare qualcosa di meglio anche perchè gli devo dare io il numero contratto e vorrei che lo prenda in automatico dal campo [numero contratto] della maschera'
Se mi date un suggerimento sono ben contento di leggerlo..anche perchè mi sono appassionato e vorrei vederlo funzionare. Grazie

7 Risposte

  • Re: VBA fra maschere e tabelle

    Le tabelle non devono avere campi di calcolo. I calcoli sono una incombenza da delegare alle query. Innanzitutto devi rivedere la tua struttura tabelle/campi/relazioni.
  • Re: VBA fra maschere e tabelle

    Cerco di far fare alle query i calcoli ma non riesco a dire come quel importo di quel contratto della maschera inserimento ordini deve relazionarsi all'importo del contratto relativo della tabella Contratti e poi farlo aggiornare. Le tabelle sono in relazione di più non so fare. Grazie
  • Re: VBA fra maschere e tabelle

    Palla ha scritto:


    Nella tabella Contratti ci sono i dati relativi ad ogni contratto [Numero Contratto] , [Importo del contratto] e [Residuo].
    Nella tabella Ordini fra altri dati ci sono i dati relativi al [tipo documento] (che può essere un ordine o un contratto) [numero contratto] e [l’importo] che per un singolo acquisto sto spendendo.
    Hai parlato di sole 2 tabelle (non vedo una tabella Clienti o Anagrafica...boh!). Descritte così, almeno io, non ci capisco nulla. Puoi ridescriverle così

    Tabella1
    IDT1 (chiave primaria)
    Campo1
    Campo2
    Campo3
    Campo4

    Tabella2
    IDT2 (chiave primaria)
    CampoX
    CampoY
    CampoZ

    Poi indica ESATTAMENTE i campi di relazione.
  • Re: VBA fra maschere e tabelle

    Tabella 1
    ID
    Nome società
    Tipo documento (può essere un ordine oppure un contratto e nel caso attinge dal budget di quel contratto)
    Numero ordine_contratto
    Fornitore
    Importo
    Oggetto di acquisto

    Tabella 2
    ID
    Numero contratto
    Fornitore
    Data inizio contratto
    Data fine contratto
    Importo contratto
    Residuo

    la relazione è fra Numero ordine_Contratto e Numero Contratto. Come ho cercato di spiegare, forse male, sto cercando una soluzione affinchè quando inserisco un importo attraverso la maschera inserimento ordini (che va ad aggiornare la tabella 1) il codice possa dirmi se ho soldi a sufficienza per procedere all'acquisto. Quindi per esempio se inserisco nella maschera un importo di 1.000 euro relativo al contratto 5 il programma deve andare a controllare se nella riga del contratto 5 della tabella 2 ci siano 1.000 euro o più in caso contrario mi deve dare il messaggio di soldi finiti. Se ci sono mi deve aggiornare la tabella 2 con i soldi residui togliendo quindi i 1.000 euro dal totale per avere il dato aggiornato per il prox acquisto. Grazie
  • Re: VBA fra maschere e tabelle

    Quelle 2 tabelle non hanno dei nomi SIGNIFICATIVI. Di conseguenza vedo che anche i campi NON SONO OMOGENEI. Di conseguenza ancora non riesco a cogliere il senso della RELAZIONE che avresti creato.
    La discussione non può proseguire se non hai uno scenario tabelle NORMALIZZATO.
    Ribadisco che i CALCOLI sono una incombenza da delegare alle QUERY...ecc...ecc...
  • Re: VBA fra maschere e tabelle

    Ciao
    non sono molto bravo, sono alle prime armi ma cerco di impegnarmi. Puoi dirmi, se vuoi, perchè sulla Select mi da un errore di sintassi (se riesco a farla funzionare forse riesco ad arrivare al risultato sperato)

    Private Sub Form_AfterUpdate()
    Dim palla As Integer
    SELECT Residuo as palla FROM Contratti WHERE N_Contratto = Form_Inserimento_ordini.N_ord_contr
    If [Tipo_documento] = "Contratto" Then
    If palla < Form_Inserimento_ordini.Importo Then
    MsgBox " ATTENZIONE BUDGET FINITO", vbOKOnly + vbCritical, "Budget"
    End If
    End If
    If [Tipo_documento] = "Contratto" Then
    DoCmd.OpenQuery "Q_Residuo", acViewNormal, acEdit
    End If
    End Sub
  • Re: VBA fra maschere e tabelle

    Aspetta, forse non hai capito il mio ultimo intervento. Occorre ripartire da zero. Consigli:
    1. Leggi attentamente il regolamento dove dice in sostanza che occorre conoscere almeno le basi di Access.
    2. Studiare Access da un manuale di base.
    3. Se non sai come strutturare il tuo database, apri un nuovo thread (consiglio nella sezione "Progettazione database") in cui fornisci dei dati COERENTI di base per poi discuterne...ricorda sempre che non è consentito fornire "pappa pronta".
Devi accedere o registrarti per scrivere nel forum
7 risposte