Riportare dati da una tabella in un'altra tabella di Acess

venerdì 01 luglio 2011 - 14.59
Tag Elenco Tags  Access (.mdb)

86Marco Profilo | Expert

Salve,
ho una piccola applicazione per la gestione di una piccola officina.

Ho creato una maschera preventivi con il quale emetto un preventivo ad un cliente. Tutto fin qui funziona perrettamente.

Ora ho creato anche una maschera fattura.
Come posso fare affinchè inserendo, nella maschera fatture, il numero di preventivo al quale si riferisce essa possa automaticamente popolarsi con i record del preventivo?

Spero di aver illustrato correttamente il mio problema e che qualche genio di voi riesca ad aiutarmi (magari inviandomi anche un piccolo esempio).

Come sempre GRAZIEEEE!!!!

====================================================

Ho fatto una modifica al 3d:
ho allegato il mio database facendo un piccolo esempio:

Ho 4 tabelle: Preventivo, Dettagli_preventivo, Fatture e Dettagli_Fatture
e 2 maschere:

La maschera Preventivi (all'interno della quale inserisco il cliente e la data del preventivo oltre ai dettagli del preventivo):

416x321 34Kb


ed una maschera fattura (all'interno della quale inserisco cliente, data e anche qui i dettagli della fattura):

429x310 34Kb


Io vorrei che nella maschera fattura al clic del pulsante che si trova alla destra di N_Prev, la sottomaschera si popolasse dei record della tabella preventivo che corrispondono al numero di preventivo immesso al suo interno.

Come posso fare???
Vi prego è importante!!!

renarig Profilo | Expert

Molto ma Molto sommariamente devi fare una Query di accodamento che prende i dati
dalla tabella DettaglioPreventivo e li copia nella tabella DettaglioFattura


Ho cercato di mettere i nomi dei campi che ho visto nelle tue immagini
( ma manca il nome del campo che lega la tabella DettaglioFattura a Fattura e DettaglioPreventivo a Preventivo)

Il testo della query è questo

________________________________________________________________
INSERT INTO Dettagli_Fattura ( RifFatt, Qta, Descrizione, Importo )
SELECT Forms!Fattura!idfattura AS Espr1, Dettagli_preventivo.Qta, Dettagli_preventivo.Descrizione, Dettagli_preventivo.Importo
FROM Dettagli_preventivo
WHERE (((Dettagli_preventivo.RifPrev)=[Forms]![Fattura]![N_Prev]));
_____________________________________________________________________


Poi devi fare una macro che al Clik su quel pulsante che ci indichi faccia queste cose minime.

____ EseguiComando Salva record
____ Apriquery ( il nome che hai dato alla query di accodamento vista sopra )
____ Requery ( riesegui Query )


_________________________________________________________________________


Se non funziona al primo Scrivici con precisione
____Il nome esatto delle 4 tabelle
______Il nome esatto dei campi per ogni tabella
______Il tipo di dati contenuto nei campo



Saluti









alexmed Profilo | Guru

Ciao
Non potresti soltanto aggiungere alla tabella un campo con il quale identifichi se è un preventivo o fattura?
In tal modo eviti di duplicare i dati.
Fai un preventivo e la colonna ha valore 1
Quando emetti la fattura quella colonna assumera valore 2.

Cosa ne dici?

Ciao

alexmed

86Marco Profilo | Expert

Ciao Renarix

Ma certoooo hai perfettamente ragione..

funziona tutto!!! grazieee

Un ultimissima cosa, il comando RiesequiQuery a cosa serve esattamente? COme argomento nella macro cosa devo metterci???
GRAZIEEEE

Per Alexmed: la tua è una buonissima idea, ma mi piacerebbe anche sapere come poter ovviare a questo problema (sai... sete di conoscenza ;))

renarig Profilo | Expert

Per spiegarti Requery devo spiegarti tutta la macro:

1) ____ EseguiComando Salva record
Nel prossomo passo la query di accodamento fara riferimento ai valori che hai appena
scritto nella maschera ( IDFattura e N° Preventivo )

Quanto scritto nella maschera ( per il momento è solamente "li sullo schermo"
ma non è ancora stato registrato nel DB sottostante.

Pertanto la query di accodamento ti andrebbe in errore perche non trova nel DB il N° di fattura
mentre tu adresti a scrivere i record di dettaglio fattura.

Non ho spiegato bene ma penso che hai capito !!!!!!

2) ____ Apriquery ( il nome che hai dato alla query di accodamento vista sopra )
Questo è l'obbiettivo principale.
Vai a prendere dalla tabella DettaglioPreventivo i record del preventivo N° xx
e li accodi nella tabella DettaglioFattura con Fattura N° yy


Tutto questo lavoro avviene a livello di tabelle del DB e tu non vedi nulla nelle maschere
che hai gia aperto



3) ____ Requery ( riesegui Query )
In questo momento nella tabella di DetaglioFattura sono stati aggiunti alcuni record
ma la maschera che era gia aperta mon te li fa ancora vedere perche ha bisognio di
" aggiornare la videata "

In questo caso si usa il RieseguiQuery che ricalcola tutti i valori sottostanti
ai vari controlli della maschera e aggiorna la videata.

Senza riesegui query dovresti
____Chiudere la maschera e riaprirla
____Oppure passare al record successivo e tornare al precedente

NB. Rieseguiquery del punto 3 non c'entra niente con ApriQuery del punto 2


NB Gli argomenti di RieseguiQuery sono facoltativi e si usano su maschere
piu complesse quando vuoi essere sicuro di aggiornare un controllo particolare.
Nel nostro caso abbiamo sperimentato che anche senza argomenti aggiorna tutto



__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
Per migliorare ulteriormente puoi aggiungere
__fra il punto 1 e il punto 2
_____ImpostaAvvisi Falso

__fra il punto 2 e il punto 3
_____ImpostaAvvisi Vero

Ti evita il fastidioso messaggio di conferma alla aggiunta di record


Saluti




86Marco Profilo | Expert

Inutile dire che sei stato + chiaro di un manuale!!

VERAMENTE GRAZIE!!!

86Marco Profilo | Expert

ultime domande pero :)
1) come argomento di rieseguiquery non devo inserire nulla???


2) In più nonostante metta l'azione riesegui query nella sottomaschera non mi vengono visualizzati i dati, in poke parole la maschera non si aggiorna.
Se invece la chiudo e la riapro tutto è ok... come mai??

3) Ho provato a inserire l'imposta avvisi a NO. Nonostante abbia anche considerato attendibile il percorso del file l'azione non viene presa in considerazione ed esce fuori sempre il messaggio di accodamento :)

Mi aiuti ache in questo??

Grazieee

Ti allego se non è di tanto disturbo il file mdb.

renarig Profilo | Expert

L'argomento di riesegui query è facoltativo, se non lo indichi ti aggiorna
tutto ( Tutto quello che può ) nel Ns caso ho sperimentato che senza argomento
aggiorna la sottomaschera e questo ci basta, percio io lo ometterei,
In maschere piu complesse spesso devi fare più volte rieseguiquery sui vari controlli specifici
( io talvolta per sicurezza mando al record successivo e poi ritorno al precedente )



Il problema del Riesegui Query e Imposta avvisi era divuto al fatto che
la macro che andavi a modificare non lavorava perche in effetti il tuo pulsante di comando
andava a agire non sulla macro ma su una routine interna alla maschera.


In questo momento ho fra le mani un office 2003 ma prima di rimandarti i
file li voglio testare questa sera a casa con office 2007

Saluti

86Marco Profilo | Expert

Ok a stasera allora :)
Grazie!!!

renarig Profilo | Expert

Ho testato il tutto con Access 2007 e ho trovato qualcosa che
non andava in quello che ti avevo scritto.



Ti ho fatto una versione minimale solo con la tua domanda e una versione
piu evoluta

______________________________________________________________________


Le varianti della versione evoluta sono:

1) Viene preimpostato anche il nome del Cliente prima dei
record di dettaglio,
( in questo caso non ho appositamente usato la query di aggiornamento per
indicarti una altra strada percorribile )

2) Nella maschera del preventivo e della fattura c'è una sottomaschera)
con l'importo totale del preventivo/fattura

3) Mi chiedo perche nel preventivo hai 2 campi con cognome e nome
e nella fattura hai un sol campo solo con il Cliente ???
Ma qiesto e parte di tue considerazioni per cui le ho mantenute,

4) Se cognome e nome sono 50 caratteri cad ho impostato il cliente
a 110 per poter concatenare e lasciare un po di spazio fra i 2

5) Nella tabella Preventivo ho aggiunto un campo " PrAtt " ( Attivo )
se vuoto il preventivo è ancora in essere
Se scrivi qualunque cosa in quel campo il preventivo è superato
( si tratta di una evoluzione del campo Si/No ma ti lascia la possibilita
di scrivere qualcosa sul motivo della perdita del preventivo )

6) Sarebbe bello quando il preventivo si trasforma in fattura scrivere
automaticamente qualcosa nel campo " PrAtt " cosi da togliere
quel preventivo dall'elenco
_____Questo potrai farlo te

7) Ho notato che i campi quantita e prezzo li hai impostati come "Numerico"
in quel modo non puoi scrivere i decimali,
Li ho reimpostati a Valuta
( Il formato numerico va bene per gli Id e i suoi riferimenti esterni )


___________________________________________________________________________


Comunque ho mantenuto una impostazione molto semplice e comprensibile
anche da un utente non esperto


____________________________________________________________________________


Ho notato che hai scritto del codive in VBA


Ho notato anche che nel tuo file nella casella di scelta
delle macro da applicare ai vari eventi compare uno strano
nome di macro " ~TMPCLPMacro " ma non ho capito
a cosa si riferisce ??? Forse un oggetto di sistema ???


NB: Quando quardi le macro dovrai selezionere " NoniMacro " e " Condizioni Macro "

Allego 2 File .mdb


Saluti

86Marco Profilo | Expert

Ei ciao,
intanto grazie!!!

Mi metto subito a vedere i tuoi file.

Ciò che trovi nel database (campi, nomi campi e tipi di dati) sono assolutamente casuali, nel senso che ho creato queste tabelle proprio per fare l'esempio di funzionamento oggetto del 3d :)

Per l'oggetto che dici tu dentro la categoria macro nn so dirti!!!

Intanto se posso ancora disturbarti, hai un aiuto per questa altra mia discussione :)
http://www.dotnethell.it/forum/messages.aspx?ThreadID=39623

Grazie mille!!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5