View Full Version : Varie domande su Access
Musketeer Fly
23-10-2003, 11:14
Sto cercando aiuto per la creazione di un mio progetto. Dato che sono un neofita, accetto volentieri i vostri pareri e suggerimenti.
Il mio progetto è il seguente:
Vorrei creare una semplice Tabella nella quale inserire 3 campi:
- quantità: Numerico
- importo: Numerico/Valuta
- totale: Numerico/Valuta
Nei primi due campi devo inserire i valori, ma nel terzo il risultato dovrebbe comparirmi subito (del tipo [quantita]*[importo]). Come posso fare dato che Access 97 (credo anche per le versioni successive) mi dice che posso solo inserire valori e no campi? Come posso creare un inserimento automatico di valori dovuto ai campi precedenti ([quantita] e [importo])?
Ho trovato una semplice soluzione: creare una Tabella con i soli campi "quantita" e "importo"; generare una Query che si rifaccia alla Tabella appena creata; modificarla aggiungento il campo "totale:[quantita]*[importo]". Il mio problema sembra risolto, ma solo in apparenza. Infatti quando visualizzo la Query appena creata vedo che il valore di "totale" non è espresso in valuta, ma come un semplice numero. Che devo fare? Esiste un modo più sbrigativo per fare tutto con una sola Tabella (senza Query)?
Cerco questa risposta perchè il mio progetto non finisce qui:
Questa Tabella da creare, diventerebbe una "Tabella Figlia" di una "Tabella Madre" nella quale vorrei creare un campo "spesa" (del tipo "spesa:Somma([totale])"). Creando una Query della "Tabella Madre" ho notato che non mi convalida il campo "spesa:Somma([totale])". Cosa posso fare? Se mi fosse noto come sia possibile creare un campo di Tabella con inserimento automaticco ("totale":[quantita]*[importo]), come posso ricavare un risultato automatico "spesa" da un' altra Tabella?
Ci sarebbero altre domande, ma per adesso spero di risolvere questi due primi intoppi.
Se quello che ho scritto non fosse del tutto chiaro, non rinunciate a chiedermi spiegazioni.
zakzakit
23-10-2003, 16:20
Originariamente inviato da Musketeer Fly
...
Il mio problema sembra risolto, ma solo in apparenza. Infatti quando visualizzo la Query appena creata vedo che il valore di "totale" non è espresso in valuta, ma come un semplice numero.
...
Nella finestra di visualizzazione struttura della query, clicca con il pulsante destro sul campo "totale", seleziona "proprietà", imposta la proprietà "Formato" come valuta, e, se necessario, la proprietà "Posizioni decimali" al valore desiderato.
zakzakit
23-10-2003, 16:25
Originariamente inviato da Musketeer Fly
Che devo fare? Esiste un modo più sbrigativo per fare tutto con una sola Tabella (senza Query)?
In linea di massima, in un database relazionale, i campi che sono deducibili da altri campi come somma, prodotto, eccetera, NON vanno inseriti in una tabella, ma, appunto, in una query. Il tuo approccio è corretto.
zakzakit
23-10-2003, 16:40
Originariamente inviato da Musketeer Fly
Cerco questa risposta perchè il mio progetto non finisce qui:
Questa Tabella da creare, diventerebbe una "Tabella Figlia" di una "Tabella Madre" nella quale vorrei creare un campo "spesa" (del tipo "spesa:Somma([totale])"). Creando una Query della "Tabella Madre" ho notato che non mi convalida il campo "spesa:Somma([totale])". Cosa posso fare? Se mi fosse noto come sia possibile creare un campo di Tabella con inserimento automaticco ("totale":[quantita]*[importo]), come posso ricavare un risultato automatico "spesa" da un' altra Tabella?
Se ho ben capito, potresti fare così.
Primo, creare la tua tabella con quantità e prezzo unitario
Secondo, creare una query aggiungendo il campo prezzo totale
Terzo, creare una seconda query contenente un campo con formula "somma" basata sul campo "prezzo totale" della prima query.
Musketeer Fly
27-10-2003, 11:35
Grazie per avermi risposto.
Non ti ho scritto subito poichè ero impegnato ( e ancora adesso) a fare delle prove per il mio progetto. Sono riuscito a crearmi la Query che volevo (in grado di calcolarmi totale:[quantita]*[importo]).
Come mi hai suggerito, ho creato una nuova Query per calcolarmi spesa:Somma([totale]), ma adesso mi servirebbe metterla in relazione con una tabella Acquisti.
Mi spiego meglio. Creata la Tabella Merci (con [quantita] e [importo]) e la Query Merci (nella quale ho aggiunto totale:[quantita]*[importo]), vorrei crearmi una Tabella Acquisti nella quale far comparire il seguente campo:
[dataAcquisto]
Mi piacerebbe avere un campo aggiuntivo che mi indicasse la spesa giornaliera. Questo campo non può essere incluso nella tabella Acquisti?
Creando la Query Acquisti (contenente il solo capo spesa:Somma([totale])) come posso associarla alla Tabella Acquisti (ossia a fare corrispondere ad ogni Acquisto giornaliero la sua relativa spesa)?
Queste domande non sono solo rovolte a zakzakit, ma anche a tutti coloro che sono disposti a darmi suggerimenti.
Musketeer Fly
27-10-2003, 15:35
Utilizzando l' "espediente" che hai suggerito a Panhas (http://forum.hwupgrade.it/showthread.php?threadid=544191), sono riuscito a creare la Tabella Merci e la Maschera Merci (utilizzando il generatore di codice) senza utilizzare alcuna Query. (I calcoli avvengono in automatico e inseriti nella tabella - cosa che mi premeva di più da risolvere!)
Adesso, attraverso il generatore di codice, come posso rendere l' inserimento automatico Somma(totale) nella Tabella Acquisti?
Mi spiego meglio atraverso la descrizione delle fasi che ho seguito (Ti potrà sembrare un riassunto di tutto quello che ho detto in questa discussione).
Ho creato la Tabella Merci, con i seguenti campi:
IDAcquisti - Numerico (come collegamento alla Chiave Primaria della Tabella Acquisti, campo necessario per la creazione di una tabella Figlia e per Le Relazioni)
quantita - Numerico
importo - Numerico,Valuta
totale - Numerico,valuta
Subito dopo ho creato la Tabella Acquisti, con i seguenti campi:
IDAcquisti - Contatore (Chiave primaria, necessaria per la creazione di una tabella Madre)
spesa - Numerico,Valuta
Con l' autocomposizione ho creato la Maschera Acquisti e la SottoMaschera Merci . A questo punto sono entrato in "Visualizzazione struttura", spostato su "importo" e dalla linguetta "Evento", selezionando "prima di aggiornare", ho generato il codice:
totale = quantita * importo
Poi mi sono spostato sulla linguetta "Dato" e ho bloccato il campo (in modo da non inserire dati).
Attraverso l' uso della maschera appena creata e senza utilizzare query, come posso inserire in autoamtico la somma dei valori di "totale" in "spesa"? Ho provato a generare il codice del tipo:
spesa = Somma(totale), ma viene riconosciuta come instruzione errata.
Ho risolto il problema della somma attraverso il comando DSum("totale", "tMerci"), ma come faccio a dire al programma che "spesa" fa parte della tabella Acquisti? E dove devo generare questo codice: sempre in "importo" o in un altro campo? E a quale "evento" devo associarlo?
zakzakit
28-10-2003, 09:01
Se ho ben capito, non dovresti avere bisogno di scrivere codice.
Per creare un campo totalizzatore nella sottomaschera, crea per prima cosa un campo numerico generico non legato, quindi seleziona "proprietà", linguetta "dati", imposta la proprietà "origine controllo" come
=Somma(x)
dove "x" è il nome del tuo campo.
E' anche opportuno impostare la proprietà "nome elemento" ad un valore mnemonico apprpriato, per esempio "spesa totale".
Se poi vuoi fare riferimento nella maschera principale al campo "spesa totale" della sottomaschera, sia nel codice sia nella proprietà "origine dati", devi fare riferimento a:
[Nome sottomaschera].[Form]![spesa totale]
(sostituendo a "nome sottomaschera" appunto il nome della tua sottomaschera).
Musketeer Fly
28-10-2003, 15:07
Il procedimento che mi hai descritto, lo conoscevo, ma non serve al mio scopo, poichè non mi memorizza il dato nella tabella Acquisti e in più mi da pure l' errore "#NOME?".
Se hai letto come ho creato le due tabelle e come ho programmato il codice nell' evento "Prima di aggiornare" di "importo", sono arrivato al punto che devo fare inseire in automatico la somma di "totale" nel campo "spesa" della Tabella Acquisti attraverso l' uso della sua maschera. Ma il comando Somma() non viene riconosciuto dal generatore di codice. L' unico comando-somma che conosce è DSum (ma ho avuto dei risultati non positivi con questo comando). Allora scartato la riga di codice spesa = Somma(totale), sono passato alla riga spesa = DSum("totale", "tMerci"), ma attraverso questo comando non viene inserito alcun valore nel campo spesa della maschera Acquisti (per essere sinceri la riga di codice che ho inserito è la seguente
spesa = totale + DSum("totale", "tMerci")). Non ottengo alcun valore nel campo spesa della maschera Acquisti, perchè il codice non riconosce la posizione del campo spesa (non presente nella sottomaschera)(1) o bisogna utilizzare comandi diversi di codice(2)? Se il problema è dovuto solamente al caso (1), ti sarei grato se mi scrivessi la riga corretta di codice e mi specificassi dove deve essere inserita (dato che io pensavo di inserirla nell' evento "prima di aggiornare" della voce "importo").
Grazie ancora per la tua disponibilità.
zakzakit
29-10-2003, 08:12
Ok, ti faccio un esempio di come potresti gestire records della tabella acquisti nella maschera merci, ipotizzando che la tabella acqisti abbia solamente i campi [id acquisti] e [spesa], e che la maschera merci sia una semplice maschera contenente i campi della tabella merci.
in visualizzazione struttura, cliccando col pulsante destro sul quadratino nero in alto a sinistra per selezionare le proprietà della maschera, seleziona "proprietà", linguetta "evento", proprietà "dopo aggiornamento" ed inserisci:
Let strsql = "delete from acquisti where [id acquisti] =" & [id acquisti]
CurrentDb().Execute (strsql)
Let strsql = "insert into acquisti([id acquisti],spesa) select [id acquisti],sum(totale) from merci where [id acquisti]=" & [id acquisti] & " group by [id acquisti]"
CurrentDb().Execute (strsql)
Nella proprietà "su eliminazione" inserisci:
Let strsql = "delete from acquisti where [id acquisti] =" & [id acquisti]
CurrentDb().Execute (strsql)
(Fai attenzione alla sintassi delle istruzioni perchè degli spazi omessi possono generare errori di esecuzione non rilevati in fase di editing).
Le istruzioni "let" generano una stringa con un comando sql, che viene poi eseguito dal comando "execute".
L'istruzione sql "delete" comanda di cancellare dalla tabella acquisti tutti i records che abbiano il valore [id acquisti] uguale a quello impostato in maschera (associato alla tabella merci).
L'istruzione sql "insert" comanda di generare un record nella tabella acquisti con il campo [id acquisti] uguale a quello presente in maschera e con il campo spesa uguale alla somma del campo totale di tutti i records della tabella merci che abbiano [id acquisti] uguale a quello presente in maschera.
"strsql" è un nome di variabile arbitrario.
L'evento "dopo aggiornamento" viene eseguito anche dopo un inserimento, per cui non è necessario inserire codice nella proprietà "dopo inserimento".
(Tieni sempre presente, però, che è più conveniente gestire i campi calcolati tramite le query piuttosto che memorizzarli in tabelle e doverli poi gestire con del codice).
Musketeer Fly
29-10-2003, 09:01
Ho provato a inserire le righe da te suggerite, ma il programma da subito un errore riguardo alla parola "strsql" nell' istruzione "Let strsql". Mi dici che è possibile utilizzare le Query per calcolarmi la Somma di totale nella Tabella Acquisti? E come?
Riesco a crearmi una Query solamente di riepilogo per calcolarmi la Somma, ma se ci aggiungo un campo come IDAcquisti, la Query non mi fornisce alcun dato. Ho sbagliato qualcosa? C' è un modo differente di agire? Devo utilizzare solamente Query per i calcoli o posso tenermi le due Tabelle create (tAcquisti,tMerci) e la sottomaschera Merci con i campi calcolati in automatico con l' inserimento del codice
totale = quantita * importo e poi crearmi la Query di calocolo per la "spesa"?
zakzakit
29-10-2003, 09:35
Per "strsql", se l'errore che ti dà è di variabile non definita, aggiungi un'istruzione
dim strsql
all'inizio della funzione.
Per le query, per esempio
1. crei la tabella merci con i campi [id acquisti],quantità,prezzo.
2. crei una query basata sulla tabella merci aggiungendo il campo totale=quantità * prezzo
3. crei una seconda query basata sulla prima query contenente i campi [id acquisti] e somma(totale).
oppure puoi creare la seconda query direttamente sulla tabella così:
3. crei una query basata sulla tabella contenente i campi [id acquisti] e somma(quantità * prezzo)
Il vantaggio delle query rispetto al codice non è il risparmio di spazio sul disco, che è irrilevante, ma è l'integrità del database così creato. Qualsiasi modifica apportata alle tabelle si riflette automaticamente sulle query, mentre con l'approccio del codice vb i totali risultano corretti solamente se passi attraverso la maschera che li gestisce.
Musketeer Fly
29-10-2003, 10:18
Ma le righe di codice che mi hai scritto dove devo metterle esattamente: come evento della Maschera Acquisti o come evento della SottoMaschera Merci?
zakzakit
29-10-2003, 10:32
Il codice deve essere inserito in una maschera contenente [id acquisti] della tabella merci
zakzakit
29-10-2003, 10:53
Il codice di esempio non funziona in una sottomaschera.
Comunque la soluzione migliore è creare un campo totalizzatore ("origine controllo"=somma(totale)) nella sottomaschera, e se vuoi farne riferimento nella maschera principale, riferirti ad esso come
[nomesottomaschera].[form]![nomecampototalizzatore]
Musketeer Fly
29-10-2003, 12:08
Conosco bene il modo per calcolarmi la Somma(totale). Difatti ho creato una casella di testo "spesa" nella SottoMaschera Merci del tipo =Somma(totale). Il risultao che volevo sono riuscito ad ottenerlo, ma a questo punto, nalla maschera Acquisti, ho impostato il campo "spesaTotale" come =[Form]![nomeSottoMaschera]![spesa] (questo il comando giusto riconosciuto da Access) - Tuttavia il risultato ottenuto non viene salvato nella Tabella Acquisti. Come faccio a far memorizzare questo risultato nel campo "spesaTotale" della Tabella Acquisti? E' possibile? Ti sarei grato se mi spiegassi passo per passo le istruzione da inserire.
Come avrai capito il mio obbliettivo è di inserire in automatico la spesa giornaliera nella relativa Tabella Acquisti.
zakzakit
29-10-2003, 14:23
Ho provato in diversi modi, ma non riesco ad aggiornare il record nella maschera principale.
Comunque, scusami se insisto, se tu non inserisci il campo spesa totale nella tabella acquisti, bensì crei una query
SELECT [acquisti].[id acquisti], Sum([merci].[totale]) AS spesatotale
FROM acquisti INNER JOIN merci ON [acquisti].[id acquisti]=[merci].[id acquisti]
GROUP BY [acquisti].[id acquisti];
ottieni il valore che cerchi.
Nella maschera usi la tabella e calcoli la spesa totale tramite il campo [sottomaschera].[form]![nomecampo], mentre in qualsiasi altra applicazione usi la query, e non devi scrivere neanche una riga di codice.
Musketeer Fly
29-10-2003, 23:41
Alla fine il risultato della spesa sono riuscito a farlo comparire nella Maschera Acquisti, ma la mia richiesta è:
esiste un comando o una riga di istruzione che memorizzi la spesa della Maschera Acquisti nella Tabella Acquisti?
zakzakit
30-10-2003, 10:50
Ho creato nel mio database:
-tabella "acquisti", con campi [id acquisti], spesa
-tabella "merci", con campi [id acquisti], quantità, prezzo
-maschera acquisti con sottomaschera merci.
Ho inserito il codice qui sotto negli eventi di aggiornamento e cancellazione della sottomaschera.
Questo codice aggiorna il campo "spesa" della tabella "acquisti" come totale del prodotto quantità*prezzo della tabella "merci", per tutti i record della tabella "merci" che abbiano [id acquisti] corrispondente.
Dim rec As Recordset
Dim sqlstring As String
Dim spesatot
sqlstring = "select * from merci where [id acquisti]=" & [id acquisti]
Set rec = CurrentDb().OpenRecordset(sqlstring, dbOpenDynaset)
rec.MoveFirst
spesatot = 0
Do Until rec.EOF
Let spesatot = spesatot + rec!quantità * rec!prezzo
rec.MoveNext
Loop
sqlstring = "update acquisti set spesa =" & spesatot & " where [id acquisti]=" & [id acquisti]
CurrentDb().Execute sqlstring
(Rimango sempre dell'idea, però, che la query sia la soluzione migliore).
Musketeer Fly
30-10-2003, 11:11
Ma se apro la SottoMaschera in Visualizzazione Struttura e accedo agli eventi, ho una lista nella quale trovo:
Prima di inserire
Dopo inserimento
Prima di aggiornare
Dopo aggiornamento
Su eliminazione
Prima di conferma eliminazione
Dopo conferma eliminazione
Su apertura
Su caricamento
Su scaricamento
Su chiusura
Su attivazione
su disattivazione
In quali di questi eventi devo mettere il codice da te suggerito?
TI ringrazio sempre per il tempo che mi stai dedicando.
Una domanda sempre su Access che non centra con questo progetto:
ho visto che con la creazione di "Maschere di input" per i campi di una tabella, mi succede una strana cosa - Ad esempio quando ho creato il campo "CodFiscale" e ho inserito la seguente "Maschere di input" >LLLLLL00L00L000L;;_ con Access 97 non ho alcun problema (difatti ottengo CCCCCC22C22C222C); invece con Access 2000 e con Access XP all' immissione del codice fiscale, mi creano sempre dei problemi e un output diverso da quello desiderato (mi fa inserire 17 caratteri al posto di 16, poichè legge il segno ">" come un carattere e non come una operazione per rendere Maiuscoli i caratteri). E' un problema che ho solo io, dovuto al mio sistema operativo (Windows XP Home, invece con Access 97 utilizzo WIndows NT4) o succede anche ad altri? e se succede ad altri, esiste una patch o bisogna fare una modifica al programma?
zakzakit
30-10-2003, 17:49
Io l'ho messo in questi due:
Dopo aggiornamento
Su eliminazione
che dovrebbero garantirti che ad ogni modifica di "merci" corrisponda una modifica di "acquisti", a meno di crolli della macchina ed errori di programma, nel qual caso l'integrità del database va ristabilita "a mano" (mentre con il metodo della query questo problema non esiste).
Musketeer Fly
03-11-2003, 09:18
Ho inserito il codice da te suggerito nei due eventi. Il programma funziona; l' unico neo è che quanto inserisco un prezzo nel campo "importo" la sottomaschera Merci mi si rimpicciolisce, lasciandomi soltanto intravvedere un nuovo record della sottomaschera (se desidero vedere il record appena creato, devo utilizzare la freccia "sinistra" per spostarmi fra i record). E' normale o dovuto ad Access 97? Come mai ho dovuto inserire il codice anche nell' evento "eliminazione", quando ho notato che anche senza, il programma mi fa le stesse cose?
Come posso migliorare il codice per farmi calcolare "spesaIvata" nella Maschera Acquisti?
Mi suggerisci che è meglio utilizzare delle query per fare calcoli automatici: nel mio caso come?
Ho pensato di creare:
- la Tabella Merci con i campi "IDAcquisti", "quantita" e "importo"
- la Query tMerci rifacendomi alla Tabella Merci, ma aggiungendo il campo "totale:quantita*importo" (e fino a qui TUTTO BENE).
A questo punto che cosa devo fare? Se creo la tabella Acquisti oltre ai campi "IDAcquisti", "dataAcquisti - data/ora" e "riferimento - testo" che cosa deve mettere come campo affinchè possa creare la Query con "spesa:Somma(totale)"? Ti ricordo che io ho fatto diversi tentativi, ma ogni volta che cercavo di creare la Query con "spesa", mi diceva che qualsiasi campo aggiunto non faceva parte di un raggruppamento. Che cosa intendeva? Inoltre se non mi dava questo errore, la Query creata non visualizzava alcun campo di inserimento dati,ma solo l' etichette dei campi della Query.
Riguardo alla domanda che ti ho fatto in precedenza sull' "inserimento di maschere di Input nelle tabelle", a cosa è dovuto?
zakzakit
03-11-2003, 14:59
Probabilmente hai dimensionato la sottomaschera troppo piccola; vai in visualizzazione struttura della maschera principale e amplia la dimensione della sottomaschera.
Il codice non vincola il campo spesa della tabella acquisti al totale della tabella merci, ma alle operazioni che fai nella maschera, per questo devi gestirti anche il caso della cancellazione.
Per aggiungere un campo spesa in una query basata sulla tabella acquisti:
Seleziona "query", poi "nuovo", poi "visualizzazione struttura".
Ti appare la maschera di selezione delle tabelle, seleziona la tabella acquisti e clicca "aggiungi".
Seleziona adesso la linguetta delle query e seleziona la query tmerci contenente anche il prezzo totale, e poi clicca "aggiungi" e poi "chiudi".
clicca su [id acquisti] della tabella acquisti e trascinalo sull' [id acquisti] della query tmerci per creare il join.
Trascina uno per uno tutti i campi della tabella acquisti nella parte inferiore della maschera (NON usare l'asterisco).
Trascina allo stesso modo il campo "totale" della query tmerci.
Seleziona "visualizza" nel menu, quindi "totali".
Nella parte inferiore della maschera, modifica, nel campo "totale", la formula da "raggruppamento" a "somma".
Salva ed esci.
Musketeer Fly
05-11-2003, 11:26
Il problema non è la sottomaschera dato che la sua dimensione è 80% della videata; ma non importa. Come suggerito da te ho provato ad usare le Query: attraverso l' autocomposizione ho ottenuto la query di riepilogo che volevo, ma non utilizzabile per la mia maschera. Allora ho creato la maschera Madre partendo dalla Tabella tAcquisti e aggiungendo a mano la voce relativa alla "spesa" (cercavo un modo più veloce ed automatico, ma pazienza).
A questo punto vorrei creare (non so se deve essere una tabella o una query) in modo da rifarmi alla Tabella tMerci: ho deciso di crearmi una nuova tabella che avesse gli stessi campi di tMerci e impostati come caselle combinate in modo tale da avere in automatico le merci nei campi della tabella creata. Selezionando un campo della nuova Tabella e ottenendo la possibilità di scelta tra le varie merci, come faccio a vincolare il prezzo della merce selezionata? E possibile aggiungere delle nuove voci nelle caselle combinate senza che siano memorizzate nei campi della Tabella tMerci? Ho fatto bene a crearmi questa nuova Tabella o devo agire in un altro modo?
zakzakit
05-11-2003, 13:45
Originariamente inviato da Musketeer Fly
Selezionando un campo della nuova Tabella e ottenendo la possibilità di scelta tra le varie merci, come faccio a vincolare il prezzo della merce selezionata?
Se vuoi vincolare un campo della maschera al valore di un altro campo di tabella devi usare del codice vb, sul tipo degli esempi precedenti.
Originariamente inviato da Musketeer Fly
E possibile aggiungere delle nuove voci nelle caselle combinate senza che siano memorizzate nei campi della Tabella tMerci?
La risposta la trovi nella proprietà "solo in elenco".
Musketeer Fly
05-11-2003, 15:39
"Se vuoi vincolare un campo della maschera al valore di un altro campo di tabella devi usare del codice vb, sul tipo degli esempi precedenti. "
Ti chiedo troppo se mi facessi un esempio attinente con il codice coretto ?
zakzakit
05-11-2003, 16:45
Una cosa del genere:
Dim rec As Recordset
Dim sqlstring As String
Dim valprezzo
sqlstring = "select * from merci where [id acquisti]=" & [id acquisti]
Set rec = CurrentDb().OpenRecordset(sqlstring, dbOpenDynaset)
rec.MoveFirst
valprezzo = 0
Do Until rec.EOF
Let valprezzo = rec!prezzo
exit do
Loop
prezzo = valprezzo
(Forza un generico campo "prezzo" nella maschera corrente al valore del prezzo del primo record della tabella "merci" che trova, usando il campo [id acquisti] della maschera come chiave di ricerca nella tabella "merci")
Musketeer Fly
06-11-2003, 08:56
Allora ho creato una Tabella Consultazioni, figlia di una Tabella Uscite. Ho impostati i campi come "caselle combinate" per prelevare i dati dalla Query Merci ed ho inserito il codice da te suggerito (come evento "Prima di aggiornare"). Visto che mi dava errore (non riconosce [id acquisti]), ho pensato di aver sbagliato evento, così l' ho inserito nell' evento "Dopo aggiornamento", ma le cose non sono cambiate : si ripresenta sempre lo stesso errore (non riconosciuto [id acquisti]. Come mai?
Il codice da te suggerito va bene anche per un campo diverso da Numerico/Valuta (ossia diverso da "importo", ma che sia un campo "Testo")?
zakzakit
06-11-2003, 12:53
sqlstring = "select * from merci where [id acquisti]=" & [id acquisti]
in questa riga, il primo [id acquisti] è il campo della query, il secondo è il nome di campo della maschera. Devi adattare questi due nomi ai valori effettivi che hai usato.
Sì, il codice funziona con qualsiasi tipo di campo.
Musketeer Fly
07-11-2003, 15:23
Mi da errore su rec.MoveFirst
zakzakit
07-11-2003, 16:38
L'esempio che ti ho dato è molto generico.
rec.movefirst indirizza il primo record dell'insieme selezionato dalla query. Se la query non seleziona records, dà errore.
Devi gestire l'errore con la "on error goto ...".
on error goto label1: 'imposto gestione errori personalizzata
...istruzione di cui gestire l'errore...
on error goto 0 'reimposto gestione errori standard
...
label1:
...gestione dell'errore...
Nell'esempio ti ho lasciato anche un "do ... loop" inutile, se al posto della "exit do" metti una rec.movenext ti posizioni sul record successivo e ti gestisci tutto il set di records della query...
do until rec.eof
...elaboro il record...
rec.movenext 'mi posiziono sul record successivo
loop
Nella guida comunque trovi diversi esempi.
Musketeer Fly
10-11-2003, 12:36
1) Non riesco ad ottenere la sottomaschera filtrata che desidero in base alla selezione del primo campo della sottomaschera (es. ho tre campi "macchina" , "colore" e "velocita" nella sottomaschera. Selezionando un valore del campo "macchina" - per es. 'Punto', vorrei ottenere il "colore" relativo alla mia scelta e non tutti i colori che ho inserito in precedenza - per es. 'Bianca' arrivando a 'Punto Bianca' dati che ho inserito in precedenza e non vorrei arrivare a scegliere 'Nera'poichè non esiste una 'Punto Nera' inserita da me; ottenuto questo mi piacerebbere avere la possibilità scegliere la velocità filtrata in base alla scelta della "macchina" e del "colore" - per es. '120 km/h' ottenendo 'Punto Bianca 120 km/h' e non '130 km/h' che non fa riferimento ad alcuna "macchiana" 'Punto' di "colore" 'Bianca'.
2) Dopo aver creato una maschera ed inserito dei dati, ho osservato che una volta chiusa e riaperta la maschera mi fa vedere i campi da me inseriti (non ricordo se il primo record o l' ultimo). Esiste un comando o un' istruzione che ogni volta che apro questa suddetta maschera visualizzi un record vuoto o nuovo senza vedere i record che ho inserito (ossia mi piacerebbe trovarmi come se fosse la prima volta a utilizzare la maschera tutta bella pulita)?
3) Ho creato una maschera (madre) con ben 4 sottomaschere (figlia) e sono riuscito ad ottenere quello che volevo. A questo punto è possibile creare un report che assomigli alla maschera creata con le 4 sottomaschere ben definiti e distinte? Ho provato a crearmi il report attraverso la maschera madre e la prima sottomaschera figlia. Il risultato ottenuto è quello voluto; a questo punto ho provato ad inserire le altre sottomaschere attraverso il 'tool' 'inserisci sottoMaschera / sottoReport', ma il risultato non è quello che volevo. E' possibile partire da un report vuoto e aggiungere singolarmente ogni sottomaschera avendo per ciascuna un' 'intestazione' e un 'corpo'?
Musketeer Fly
11-11-2003, 14:46
Il punto 2) sono riuscito a risolverlo e utilizzando due comandi nei rispettivi eventi sono riuscito a modificare le maschere in apertura e una volta chiuse, le rimanenti maschere non risentono dei cambiamenti. Finalmente un punto in meno da risolvere!!!!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.