Newsgroup: it.comp.appl.access
Titolo: Problemi con sottomaschere e esportazione dati (lunghetto)

Ciao a tutti,
seguo il ng da tantissimo tempo ed ho imparato più leggendo i vostri post e
il sito comune che i manuali. COMPLIMENTI!!!
Ho preparato un db per la gestione dei clienti, è quasi completo ma ora ho
questi dubbi e difficoltà.
Ho creato una maschera in cui inserisco i dati del cliente (codice cliente,
nome, cognome, etc.). Al campo "codice cliente", nell'evento "dopo
aggiornamento" ho legato (se così si può dire) un modulo di ricerca, che
funziona. All'interno della maschera ho inserito una sottomaschera che
dovrebbe avere la funzione di evidenziarmi eventuali doppioni. Le 2 maschere
sono collegate alla stessa tabella. Ora i dubbi sono:
1 - Quando mi trova un doppione, nella sottomaschera trovo sia il doppione
trovato che il nuovo codice inserito come se lo avesse già salvato, invece
io vorrei vedere solo il precedente e decidere cosa farne.
2 - Nella maschera principale ho inserito nell'evento "dopo aggiornamento"
il codice per la richiesta di salvataggio dei dati (come trovato nel sito
comune), questo comando entra in contrasto con la visualizzazione dei
doppioni nella sottomaschera, cioè nel momento in cui voglio vedere i dati
nella sottomaschera, spostandomi con le barre mi chiede se voglio salvare i
dati modificati. Come posso risolvere il problema? Magari visualizzando i
risultati della ricerca in una nuova maschera, invece che in una
sottomaschera? E magari utilizzare un comando "utilizza"? L'idea forse non è
male, ma come si fa?
Inoltre ho un'altra maschera dalla quale estrapolo dei dati che devo
trasferire in excel. Fino a qui il problema non c'è perché utilizzo la macro
"outputsu" che me li trasferisce tranqui. Il problema è che i dati devono
essere riportati direttamente in una tabella pivot. Quando i dati li esporto
in excel con l'autocomposizione li visualizzo in una tabella pivot, ma non è
possibile farlo direttamente da access? Oppure una volta esportati in excel
non è possibile usare una macro? Come posso fare?
Perdonatemi se sono stata logorroica e magari imprecisa nell'utilizzo dei
termini, spero di essere stata il più chiara possibile.
Grazie anticipatamente a chiunque avrà la pazienza di rispondermi
Paola


--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------


Ciao Roberto
Trovato, grazie!

Roberto, innanzitutto ti ringrazio per la risposta, ma ti devo chiedere una
gentilezza,
pensa di star spiegando le cose ad una bambina, dimmi qualche passaggio in
più in quello che devo fare,
magari qualche esempio. Mi sono persa.
Ho creato la "Maschera doppione". Nella maschera iniziale, nel campo codice
cliente inserisco la funzione
DLookup. Ho letto l'help e ho trovato:
Dim varX As Variant
varX = DLookup("[Cognome]", " Impiegati ", "[IDImpiegato] = 1")
Inserisco al posto di "cognome", il nome del campo; al posto di "impiegati"
la tabella, al posto di "IDImpiegato" il criterio.
A questo punto mi impallo, che fare? Come collegare questa funzione a quella
per cui se trova qualcosa si apre la maschera doppione? Mi esce il fumo
dalle orecchie.
Grazie anche per l'ultimo punto, sarà un altro divertimento anche quello!!
Scusa se non lo riporto ma non vorrei rendere troppo lungo il post.
Paola

 magari qualche esempio. Mi sono persa.
OK, possiamo provarci.
Visto però che gradiresti avere anche degli esempi, mi sembra logico che
questi risultino il più vicini possibile alla realtà del tuo database, che
se non ho capito male, è ormai in uno stadio avanzato di realizzazione.
Ti propongo di dare qualche notizia in più, rispondendo a queste mie
domande:
1) Quale è la chiave primaria della tabella che è origine record della tua
maschera "inizale"?
2) Che tipo dato (contatore, testo, numerico ecc.) ha detta chiave primaria?
3) In base a quale campo o campi determini se già esiste o no un "doppione"
in tabella?
4) Che tipo dato (contatore, testo, numerico ecc.) ha o hanno detto/i
campo/i?
5) Quali informazioni vuoi dare all'operatore quando tenta di inserire un
"doppione"?
[CUT]


Innanzitutto ti ringrazio per l' immensa disponibilità che mi hai mostrato!
Provo a rispondere alle tue domande sperando che le risposte siano chiare e
ti servano:
1) Quale è la chiave primaria della tabella che è origine record della tua
maschera "inizale"?
*La chiave primaria sta sul contatore
2) Che tipo dato (contatore, testo, numerico ecc.) ha detta chiave primaria?
*Contatore
3) In base a quale campo o campi determini se già esiste o no un "doppione"
in tabella?
*In base al codice cliente che inserisco
4) Che tipo dato (contatore, testo, numerico ecc.) ha o hanno detto/i
campo/i?
*testo
5) Quali informazioni vuoi dare all'operatore quando tenta di inserire un
"doppione"?
*Che il codice cliente è già stato inserito e che mi permetta a questo punto
di utilizzarlo
Spero di essere stata chiara e ti ringrazio ancora.
Paola

 ha scritto nel messaggio
news:99a0kf$v8s$1...@nreadB.inwind.it...

Presupposti
========
Hai una tabella chiamata tblClienti che ha una struttura simile a questa:
IdTAbella            Contatore e chiave primaria
CodiceCliente      Testo
RagioneSociale    Testo
ecc. ec..
Hai una maschera con visualizzazione a Maschera singola che ha come origine
record tblClienti, si chiama MaskClienti e i controlli in essa contenuti
hanno lo stesso nome dei campi di tblClienti cui sono associati. MaskClienti
la adoperi per aggiornare tblClienti.
Hai poi un'altra maschera di tipo popup del tutto simile a MaskClienti, che
ha tblClienti come origine record ed è chiamata MaskDoppioni; vuoi che
MaskDoppioni ti si apra automaticamente nel caso in cui, tramite
MaskClienti, si tenti di inserire un nuovo record che abbia un CodiceCliente
uguale a quello di un record inserito precedentemente: MaskDoppioni deve
visualizzarti tale record.
Soluzione
=======
La prima cosa che ti conviene fare è quella di aprire la struttura di
tblClienti, e per la proprietà di campo Indicizzato del campo CodiceCliente
scegli Sì (Duplicati non ammessi). Tieni conto che Access ti permetterà di
applicare tale proprietà di campo solo a condizione che attualmente in
tblClienti non esistano "doppioni"; se ci sono eliminali facendoti aiutare
da una query creata con l'Autocomposizione ricerca duplicati.
Dal momento che avrai inserito la proprietà di campo di cui sopra, Access
non ti permetterà di inserire un nuovo record che abbia il CodiceCliente
uguale a quello di un altro record già presente in tabella; ti avvertirà
dell'anomalia con un messaggio standard.
Per avere in alterenativa a tale messaggio un tuo messaggio personalizzato,
e visualizzare il record precedentemente inserito, a fronte dell'evento
"Prima di aggiornare" del controllo CodiceCliente di MaskClienti genera il
seguente codice VBA:
Private Sub CodiceCliente_BeforeUpdate(Cancel As Integer)
' Ricerca se in tblClienti esiste già un record con uguale CodiceCliente
Dim Doppio As Variant
Doppio = DLookup("[IdTabella]", "tblClienti", "CodiceCliente=" & Chr$(34) &
CodiceCliente & Chr$(34))
If IsNull(Doppio) Then
' Se non esiste, torna a MaskClienti
Exit Sub
End If
'Se invece c'è, visualizza un tuo messaggio di errore...
MsgBox "Codice Cliente " & Me!CodiceCliente & " già esistente"
'... e apri MaskDoppioni sul record già esistente
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "MaskDoppioni"
stLinkCriteria = "[IdTabella]=" & Doppio
DoCmd.OpenForm stDocName, , , stLinkCriteria, , acDialog
' cancella l'evento e torna a MaskClienti
Cancel = True
End Sub
Prova e facci sapere.



Roberto non so proprio come ringraziarti. Va benissimo.
Grazie ancora
Paola


 Paola
Sono contento che ti ha funzionato tutto.
Devo ammettere che sei stata una bambina ubbidiente e non hai fatto i
capricci mentre ti portavo per mano. ;-)
--
Roberto


Roberto
Robertooooo!!!!! AIUTOOOOO!!!!!!
Stamattina a casa lavorando su access 2000 il l'evento dopo aggiornamento
inserito funzionava correttamente.
Ora in ufficio, con l'access 97, mi
chiama il seguente errore "Impossibile trovare il progetto o la libreria" e
mi evidenzia in blu il "Chr$" nella seguente riga: Doppio =
DLookup("[IdTabella]", "tblClienti", "CodiceCliente=" & Chr$(34) &
CodiceCliente & Chr$(34))
Che succede?
Cosa devo fare?
thanks
Paola
*
*
--------------------------------
Inviato via 
http://usenet.iol.it
 

 Paola
Prova a scrivere quella riga di codice VBA cosě:
Doppio = DLookup("[IdTabella]", "tblClienti", "CodiceCliente='" &
CodiceCliente & "'")
ovvero, per la parte finale :
DoppiapiciCodiceCliente=ApiceDoppiapici & CodiceCliente &
DoppiapiciApiceDoppiapici)
Resta il fatto che nel database che usi in ufficio con A97 non hai
disponibili tutti i Riferimenti alle librerie; controlla, devi avere
disponibili nell'ordine i seguenti riferimenti:
Visual Basic For Applications
Microsoft Access 8.0 Object Library
Microsoft DAO 3.51 Object Library



Ciao Roberto,
potrebbe anche essere che nella conversione  da access 2000 a access 97
possa esserci stato un errore?
Cmq proverò e ti farò sicuramente sapere. Tra l'altro lo stesso problema
l'ho riscontrato aprendo altre maschere, come il pannello dei comandi. Credo
che dovrò lavorare direttamente in access97.
Ho per te un altro interessante quesito, scusami so che ti sto creando
confusione, ma il problema sta proprio nel fatto che anche io ho le idee
confuse.
Ho riscontrato una criticità (a cui avrei dovuto pensare prima) nel db
quando trovo un record doppione. In realtà può capitare di dover
riutilizzare i dati già inseriti, in quanto ai dati del cliente (che sono
sempre gli stessi) vengono associati altri dati che possono essere diversi,
ad esempio a seconda delle sue richieste. Quindi in realtà devo poter
riutilizzare i dati se ne avessi bisogno. Con la soluzione che mi hai
fornito, che è utilissima, ho un limite perchè non mi permette il riutilizzo
dei dati.
Lo so il problema è che non te l'ho spiegato subito, cacchio, mi dispiace.
Spero di essere stata più chiara e sopratutto che tu mi possa aiutare.
Un salutone
Paola
PS: mi auguro di non star esagerando e di non approfittarmi troppo della tua
disponibilità. Grazie ancora ;-)

 disponibilità. Grazie ancora ;-)
Se dovessi  stancarmi, vorrà dire che dovrai cercarti qualcun altro che ti
porterà per mano:
avresti solo l'imbarazzo della scelta. ;-)


 Roberto
CiaoCiao
Paola



--
Roberto
