Newsgroup: it.comp.appl.access
Titolo: Duplicare certi record, ma fargli pure qualche modifica ...

Salve a tutti.
Sto cercando di fare un DB per le vendite del negozio di mia mamma e
sto tentando di renderlo il più facile possibile da usare ma ho un
problema.
Siccome molte fatture sono quasi sempre le stesse, che ne so taglio e
messa in piega con shampo e crema, vorrei creare delle fatture
standard da modificare secondo le esigenza o da usare come sono.
Così ho pensato di fare un query che prenda i record che sono relativi
alla fattura tipo desiderata, gli cambi gli ID che devono essere
cambiati (Id della Fattura e ID del dettaglio fattura) e poi scriva
questi record "corretti" nella tabella DetaglioFatture.
ecco  le tappe:
creare una fattura tipo in modo manuale così che questa venga
considerata una fattura di un certo cliente (fittizio) e sia inserita
nella tabella del dettaglio delle fatture
poi con una query di creazione tabella con parametro, che è l'ID della
fattura tipo, viene creata una tabella contente i record del dettaglio
fattura tipo in questione.
ora con una query di aggiornamento cambio l'ID della fattura tipo in
un ID fattura che sia libero, ovvero il massimo IDFattura+1
poi sempre tramite query di aggiornamento volevo modificare l'ID di
ogni record di questa tabella d'appoggio in modo da avere tutti ID
diversi tra di loro e compatibili con gli ID già presenti nella
tabella in cui alla fine dovranno essere copiati (dettaglio fatture)
poi con un quey di accodamento aggiungo questi record alla tabella
Dettaglio Fatture.
Ora il problema grande è l'aggiornamento degli ID.
Infatti non so bene come fare aggiornare IDFattura e
IDDettaglioFattura nel modo voluto.
Per IDFattura è più facile perché devono avere tutti lo stesso valore,
e a limite si può fare tramite un parametro nella query, con [] per
capirci, ma per l'ID dettaglio fattura non so proprio che inventare,
gli ID devono essere tutti diversi e non avere nessun gemello nella
tabella finale.
Quello che ho fatto è stato di creare una Query di riepilogo che
trovasse il massimo ID presente nella tabella finale per usaralo come
base della riscrittura degli IDDettaglioFattura della tabella finale,
ma ogni record dovrà essere incrementato di una quantità diversa ogni
volta.
ci vorrebbe un contatore di loop o qualcosa di simile, ma in una query
come si fa?
così ho pensato che potrei fare questa riscrittura degli ID tramite
VB, ma non so come si fa a richiamare il risultato di una query di
riepilogo tramite VB, così potrei forse fare una routine che prenden
il valre massimo dell'ID (ottenuto con una query di riepilogo) e lo
incrementa di i, dove i è un contatore di loop, fino alla fine dei
record della tabella di appoggio creata.
Cioè i parte da 1 e arriva al valore che restituisce un altra query di
riepilogo che però conta i record nella tabella di appoggio.
Quindi in sintesi la domanda è: sapete come usare il risultato di una
query di riepilogo dentro una routine VB? oppure vi viene in mente un
modo più facile di fare questa cosa delle "fatture tipo"?
Grazie e scusate per il messaggio fiume, forse incomprensibile ... 

 poi con un quey di accodamento aggiungo questi record alla tabella
cut
Gesu'!
Mai sentito parlare della linea retta?
Fai due query di accodamento, una per la fattura e una per le righe fattura.
I dati li prendi e li filtri da un'altra fattura esistene oppure da tabelle
appositamente create per memorizzare le fatture tipo da utilizzare.
Sib


Avevo in effetti iniziato in questo modo, ma mi sono arenato su un
fatto, eccolo:
Faccio una query di aggiornamento che lavora sui record della tabella
dettaglio fatture e che accoda nouvi record sempre a dettaglio
fatture.
La query lavora tutti i cmapi della tabella Dettaglio Fattura tranne
IDDettaglio e ha come criterio per il campo IDFattura un []. Così
quando viene eseguita l'utente immette il numero relativo alla fattura
tipo che vuole usare e la query aggiunge alla tabella Dettaglio
Fatture i nuovi record con i giusti IDDettaglio fatture, cioè non
duplicati rispetto ai precedenti, ma con un IDFattura che è rimasto
immutato essendo ancora quello scelto con [].
Io invece lo vorrei cambiare in qualcosa che sia impostato a mano
dall'utente o, meglio ancora, determinato in automatico in base al
risultato di una query di riepilogo che trova l'IDFattura massimo
usato nella tabelle Fatture.
Come faccio tramite una sola query di aggiornamento a selezionare i
record che rispettano un certo criterio e poi a chiedere che vengano
scritti, cioè aggiunti, cambiando il valore del campo su cui ho
imposto il criterio? non trovo altra soluzione che passare per una
tabella di appoggio e una query di aggirnamento ...
Quello che sono riuscito a fare è questo e pare funzionare.   Putroppo
sono 5 passi ovvero cinque azioni invece che una e questo potrebbe
rallentare l'operazione 
al primo passo si lancia una query di creazione tabella che prende i
record in base al criterio digitato dall'utente e li mette in una
tabella di appoggio
al secondo si modifica, con una query di aggiornamento, il valore di
IDFattura in quello desiderato.
al terzo si salva il record della fattura che si sta scrivendo (perché
se questo non è stato fatto in precedenza il successivo passo di
aggiungere i record alla tabella DettaglioFatture non va a buon fine)
al quarto si lancia come detto sopra una query di accodamento che
prende i dati dalla tabella di appoggio e li mette nella tabella
DettagliOrdini
e infine il quinto passo aggiorna la maschera per fare felice il
lavoratore che deve fare cassa.
sembra funzionare, e l'ho relalizzato con un solo bottone che esegue
le 5 operazioni tutte assieme chiedendo le due informazioni
necessarie.
ora però vorrei personalizzare la finestra in cui access mi fa
inserire i valori dei parametri, [], con un messaggino che spieghi
cos'è il valore che si sta inserendo, 
p.es
 dica "indicare il n° della
fattura da riprodurre" o qualcosa del genere ...
la ciliegina sulla torna sarebbe scegliere questo valore del
paramentro con una casella combo che mostri alcuni campi della tabella
fatture.
sono in grado di fare la casella combo che mostri i valori dei campi
che potrebbero essere utili alla selezione, ma non di usarla come
selezione per il parametro di query. qualcuno ha idee?
ho visto che per avere semplicemente un messaggio di testo esplicativo
basta usare la funzione MsgBox di VB, ma non l'ho mai usato, quindi
non so se poi sia la soluzione, mentre per fare la combo gli devo
associare una tabella, ma l'help di Access qui mi ha dato buca nel
senso che non spiega bene come collegare la maschera creata per fasrla
essere una finestra di dialogo con la query.
mi spiego: in criteri ho messo al posto di [] un bel
[Forms]![DialogoConfig]![CasellaCombinata0]
ma poi devo pure trovare il modo di fargli aprire la maschera al
momento giusto, attendere che io faccia la mia scelta e poi fare
partire, o continuare ad eseguire,  la query che userà la mia
selezione come criterio.
l'help dice di creare una routine di apertura della maschera ed eccola
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "DialogoConfig"
 DoCmd.OpenForm stDocName, , , stLinkCriteria
ma qui casca l'asino.
Dove infilo questo codice per aprire la machera? prima o dopo di 
stDocName = "01 Duplicazione Config"
    DoCmd.OpenQuery stDocName, acNormal, acEdit
dove chiaramente 01 Duplicazione Config è la prima query dell'iter,
quella usata al primo passo descritto sopra.
Se la metto dopo, la query mostra la sua finestra di dialogo normale,
se la metto prima invece compare la maschera ma anche la finestra di
dialogo della query.
insomma non sono riuscito a dire ad access di usare quella maschera
come finestra di dialogo, ma solo a informarlo che se per caso trova
quella maschera aperta con un valore selezionato lo deve usare, se no
me lo chiede lui ... cosa gli manca per usare la maschera come
finestra di dialogo?
grazie a tutti dell'aiuto e di avere letto questo lungo messaggio

 record che rispettano un certo criterio e poi a chiedere che vengano
Quando fai la query di accodamento, lascia vuoto o con un valore "strano"
es. "$$$$" uno dei campi dei record nuovi.
Poi aggiorni solo i nuovi record filtrando per valori "strani" e modificando
anche il loro valore
Antonio

anche il loro valore
Quindi uso due query un di accodamento e una di aggiornamento, ebbene
ho provato col campo vuoto, ma mi da problemi poi nell'aggiornamento.
Ho usato Is Null come criterio per aggiorare e credo vada bene, poi
perň mi da problemi di violazione chiave.
Passando per la tabella appoggio invece tutto fila, forse non č il
modo ideale, ma per ora mi accontento, infatti mi sto concentrando
sulla finestra di dialogo.
Grazie dell'help.
Credo che per la finestra di dialogo sia meglio aprire un tread
diffferente se no diventa un casino.
grazie ancora.
Roberto

 però mi da problemi di violazione chiave.
Beh, puoi usare un altro campo per discriminare, che non sia chiave
Antonio