Caselle combinate e di riepilogo tra più tabelle

venerdì 13 gennaio 2012 - 12.44
Tag Elenco Tags  Access (.mdb)  |  Office 2003

thebigger Profilo | Newbie

Ciao a tutti...devo risolvere un problema con access (2003) e non ne vengo proprio fuori...da cui si capisce quanto bravo sono con access

Ho 2 tabelle:
- operatori: matricola, nominativo, cat. protetta (SI/NO) ecc...
- registrazione presenza: matricola op, nominativo, data inizio, data fine, linea, postazione.

Per compilare la tab 1 ho creato una maschera che registra i vari campi.
Vorrei creare una maschera per la tab. 2 che, selezionato il numero matricola da elenco (casella combinata legata a tab.1 che salva il valore del campo selezionato su "matricola op" di tab.2) mostri automaticamente, su caselle di testo ad es, i restanti campi corrispondenti (nominativo, cat. protetta, ecc ecc) e li salvi sul campo corrispondente in tab. 2.
Si può fare una cosa del genere??? Spero di essermi spiegato bene

Vi ringrazio infinitamente per l'aiuto

Alberto.

renarig Profilo | Expert

>Vorrei creare una maschera per la tab. 2 che, selezionato il
>numero matricola da elenco (casella combinata legata a tab.1
>che salva il valore del campo selezionato su "matricola op" di
>tab.2) mostri automaticamente, su caselle di testo ad es, i restanti
>campi corrispondenti (nominativo, cat. protetta, ecc ecc) e li
>salvi sul campo corrispondente in tab. 2.
>Si può fare una cosa del genere???


Si si puo fare Ma temo sia un grave errore dettato dall'inesperienza

Nella Tabella2 devi registrare ( tu dici salvare ) SOLAMENTE
il numero di matricola
Gli altri campi ( nominativo, cat.protetta, ecc ) li puoi
tranquillamente visualizzare in Maschera
ma NON li devi registrare ( salvare ) nella Tabella2


__________________________________________________________

Del resto con un po di logica ci arrivi

Nella Tabella 1 registri
____La matricola della persona
____tutto il resto della persona

Nella tabella 2 registri
___la matricola della persona ( e con questo sotointendi tutto il resto )
___Tutto della presenza ( dataIngresso datauscita ecc )

_____________________________________________________________

Questa è la base dei DB relazionali
Solo in alcuni casi particolari e a ragion veduta puoi fare eccezioni



thebigger Profilo | Newbie

Sull'inesperienza ci hai preso in pieno: infatti lavoro su access da poco più di una settimana!!!

Rispiego ciò che devo fare perchè ammetto di non essere stato molto chiaro: la tab1 verrà utilizzata come semplice db degli operatori (anagrafica, matricola, livello lavorativo, cat.protetta, ecc) e quindi consultata (poco) solo per questo genere di informazioni.
La tab2 invece deve poter essere utilizzata quando (caso 1), a fronte di un'assenza in una certa postazione di linea, serve sapere quali operatori in passato hanno già lavorato in quella postazione o, viceversa (caso 2), dato il nominativo (che è più gestibile del n° di matricola) vedere in che postazioni/linee la persona ha già lavorato per cercare di evitare i tempi di formazione.
Dunque la tab1 contiene TUTTI i dati relativi al profilo professionale dell'operatore, e viene compilata da un'apposita maschera.
La tab.2 contiene IN PARTE gli stessi campi della tab.1 più quelli relativi alla registrazione della presenza.

Ho capito perfettamente la tua osservazione (in effetti per come avevo posto il problema avrei duplicato una serie di informazioni per niente): rimane il fatto però che, specie nel caso 2 di interrogazione della tab.2, scelto il nominativo nella maschera di registrazione dati devo poter visualizzare anche altri campi relativi tab.1.

Mi serve capire allora come visualizzare questi dati, senza salvarli per la 2^a volta nella tab.2, come mi hai fatto giustamente notare.

Spero di essermi spiegato meglio stavolta

Grazie per l'aiuto!!!

schumy2000 Profilo | Junior Member

ma non puoi farti una vista (query in Access) e fare una join tra le tabelle rispetto al numero di matricola?


Se comunque segui questa logica, puoi fare un insert condizionato ovvero
INSERT INTO TAB2(SELECT MATRICOLA 'PIPPO' /*NOME PERSONA*/ . . . //TUTTI I CAMPI FROM TAB2 WHERE NOT EXISTS(SELECT 'X' FROM TAB2 WHERE MATRICOLA='/*MATRICOLA IMPEIGATO*/'))

In modo tale che se la matricola e le altre informazioni non esistono esse vengono inserite altrimenti l'inserimento viene abortito xche la subquery non ritorna nulla.

Ciao.

-------------------------------------------------------------------------------------------------------------
Talvolta un pensiero mi annebbia l'Io: sono pazzi gli altri o sono pazzo io?
A. Einstein

thebigger Profilo | Newbie

Uh!! si va sul complicato...per me che sono un cavernicolo intendo

Ho capito ciò che dici, però essendo ai primi passi con access, e non sapendo una mazza codice, non riuscirei a fare il tutto senza che qualcuno mi guidi passo passo...e non mi pare il caso.

Per finire sto lavoro mi serve solo capire come visualizzare i dati nella maniera di cui scrivo sopra (operativamente intendo) sperando che sia spiegabile via post.
..poi x imparare ad usare bene access avrò tempo (tra l'altro ho ordinato un libro sull'uso di access e VBA)

Grazie comunque per l'aiuto!!!

schumy2000 Profilo | Junior Member

Beh quello che ti ho scritto non è access...è semplicemente SQL....
Però dal punto di vista operativo non saprei come aiutarti...mentre per il codice SQL posso darti una mano.
-------------------------------------------------------------------------------------------------------------
Talvolta un pensiero mi annebbia l'Io: sono pazzi gli altri o sono pazzo io?
A. Einstein

thebigger Profilo | Newbie

Se hai tempo e pazienza di spiegarmi bene i passaggi ti ringrazio infinitamente!!!

posso provare a farlo con SQL...penso sia chiaro cosa mi serve fare.

schumy2000 Profilo | Junior Member

come ti ho già scritto
fai una insert sulla tabella tab2 all'interno della quale fai il select di tutti i campi della tab due con i dati che vuoi variare fra apici (come il nome nell'esempio) o anche la stessa matricola alla fine nella clausola where
gli chiedi se già esiste una matricola, sulla tab2, uguale a quella che cerchi.
Se non esiste la clausola è vera e ti insierisce il codice altrimenti ti ritorna null e l'insert non viene effettuato....
INSERT INTO TAB2(SELECT MATRICOLA 'PIPPO' /*NOME PERSONA*/ . . . //TUTTI I CAMPI FROM TAB2 WHERE NOT EXISTS(SELECT 'X' FROM TAB2 WHERE MATRICOLA='/*MATRICOLA IMPEIGATO*/'))


Questo da quello che ho potuto capire...e con le informazioni di cui sono a conoscenza...
Ciao.
-------------------------------------------------------------------------------------------------------------
Talvolta un pensiero mi annebbia l'Io: sono pazzi gli altri o sono pazzo io?
A. Einstein

thebigger Profilo | Newbie

Dunque, ho cercato di risolvere il problema in questo modo. Scrivo la procedura operativa sperando si capisca cosa ho fatto:

Tabella operatori: matricola, nominativo, liv. esperienza, limitazioni
Tabella registrazione: matricola, nominativo, data, linea, postazione

creo una maschera SUB_MASK per visualizzare il risultato di una query (legata a tab. operatori) che dato il nominativo estrae gli altri valori del record. Il nominativo lo "legge" da MASK_1, nella quale vi è una casella di testo dove inserire il nome che funge da valore parametro alla query.

MASK_1 è quindi composta da:

-casella di testo per inserire il nome
-SUB_MASK inserita come sottomaschera
- pulsante di comando che esegue la query e aggiorna la maschera
- caselle per registrare in tab. registrazione linea, postazione e data

La procedura dovrebbe essere quindi:
1) inserisco il nominativo
2) eseguo la query e aggiorno maschera con comando macro
3) visualizzo i campi relativi al nominativo in sottomaschera
4) inserisco linea, postazione ecc
5) salvo record "nome, data, linea, postaz" in tab. registr.

Problema: se nella macro aggiorno sia la SUB_MASK che la MASK_1 mi da errore perchè rileva MASK_1 chiusa (e comunque la sottomasch non visualizza i risultati della query). Se aggiorno solo la SUB_MASK, eseguendo la query mi visualizza i risultati nel foglio dati e non nella sottomaschera!!!!
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