Newsgroup: it.comp.appl.access
Titolo: tabelle&maschere

Salve
sono ai primi approcci con Access, ho un database con alcune tabelle. il
tutto funziona se immetto tramite tabella, ma non funziona se l'immissione
la eseguo tramite maschera. Mi spiego.
Ho una tabella Preventivi con relazione a Clienti e Agente tramite IDClienti
e IDAgente, e altre informazioni non relazionate.
Se immetto tramite tabella, nessun problema.
Se apro la maschera Preventivi con i medesimi campi della tabella  e vario
ad 
es.il
 Cliente in un record esistente lo varia. ma se immetto un nuovo
record (IDPreventivo nuovo) , la cosa non è possibile, in quanto vengo
avvertito che stò tentando di duplicare i valori nell'indice nella chiave
primaria o nella relazione.
La mia domanda è, perchè nella tabella che esegue la stessa cosa questo non
succede ?

 ha scritto nel messaggio
news:8m5ps2$la3$1...@pinco.nettuno.it...

Quale è la chiave primaria della tabella Preventivi?
Quale è il suo Tipo dati?
Come hai definito nella maschera il controllo relativo a tale campo?
Roberto


Ciao Roberto, ti ringrazio della risposta, ti fornisco i dati richiesti.
La chiave  primaria della tabella Preventivi č IDPreventivo e i dati sono
tipo contatore(duplicati non ammessi).
Nella maschera, l' origine controllo del campo č IDPreventivo.
Mi permetto di aggiungere alcune cose.
I campi nella tabella sono :
IDPreventivo ........  č in relazione con la tabella Ordini 1 a °°
referenziale
DataPreventivo
IDCliente  ............č in relazione con tabella Clienti   1 a °°
referenziale
Importo
IDContatto..........č in relazione con tabella Contatti  1 a°° senza
referenziale
IDAgente............č in relazione con tabella Agente     1 a °° senza
referenziale
info
tabella Clienti:
IDCliente..........chiave primaria, dati tipo contatore (duplicati non
ammessi)
nomeCliente
cognomeCliente
indirizzo........e altre informazioni del cliente ( tutti campi testo)
tabella Contatto
IDContatto........chiave primaria, dati tipo contatore(duplicati non
ammessi)
nomeContatto...testo
premio..............numerico
tabella Agente:
IDAgente..........chiave primaria, dati tipo contatore(duplicati non
ammessi)
nomeAgente....testo
sede ............boleano
 Le relazioni le ho cambiate gią un pņ a tutti i modi e non cambia niente.
La tabella Preventivi funziona senza problemi. Se perņ faccio una maschera
Preventivi e metto tutti i campi della tabella Preventivi , e come mi sembra
logico aggiungo alcuni campi, ad es. il nome del cliente in base
all'IDCliente, mi esce la scritta che ti ho detto.
Questa č attualissima. Se immetto solo i campi della tabella , nella
maschera l'inserimento sembra essere regolare.
Con una maschera con altri dati presi con l'ID, sempre lo stesso errore.
Perņ ho visto che scorrendo i record presenti  gli ultimi 4, non sono in
ordine di ID.
Spiego brevemente come faccio la maschera Preventivi. (forse č li' che
sbaglio)
Dalla tabella Preventivi : IDPreventivo,DataPreventivo, IDCliente, ecc.
dalla tabella Clienti :nome,cognome, indirizzo,ecc, poi dalla tabella
Preventivi continuo la scelta. E' giusto ?
Nel campo IDCliente imposto :origine controllo IDCliente,origine riga=SELECT
Clienti.* FROM Clienti ORDER BY [Clienti].[Cognome]; colonna
associata=1,solo in elenco=si, espansione automatica=si. Visualizzo poi 3
colonne in modo da non avere solo l'ID. Se faccio una scelta nei Clienti in
record gią presenti , OK, se vado alla fine dei records e immetto un cliente
gią in tabella nel nuovo record non riesco a salvarlo per il motivo gią
descritto.
Mi scuso per la lungaggine e ti ringrazio
Ciao Tullio

 Preventivi continuo la scelta. E' giusto ?
E qui non ti seguo piů: cosa hai come "Origine record" della maschera
preventivi?
Io immaginavo la tabella Preventivi, ma mi sembra che non sia cosě.
Ho il dubbio che tu abbia, come "Origine record", una query non
aggiornabile.
Fammi sapere
Roberto

 Fammi sapere
Ciao Roberto
Cosa intendi per origine record nella maschera Preventivi?
Dove lo trovo ?
Nel campo IDCliente della maschera Preventivi ho:
origine controllo =IDCliente
origine riga =SELECT Clienti.* FROM Clienti ORDER BY [Clienti].[Cognome];
e quando creo la maschera la salvo in base alla tabella Preventivi.
Nel campo es. Cognome della maschera ho:
Origine controllo = Cognome ( senza riferimenti a nessuna tabella)
Ricerca con filtro = impostazione predefinita database.
Cerco di spiegarmi meglio su quello che ho fatto.
La tabella Preventivi per quel che riguarda il cliente, contiene unicamente
l'ID.
Dal momento che non è semplice capire dall'ID se è un cliente già catalogato
e sceglierlo o un cliente nuovo  e immetterlo ho fatto in modo che cliccando
nel campo ID della tabella Clienti comparisse anche Nome e Cognome.
Come fare ? ho guardato nei db già confezionati e ho copiato il comando SQL
descritto adeguando i nomi al mio.
La tabella funziona e quindi ho pensato è buono.
Quando ho scoperto le maschere, mi è sembrato un modo molto più bello e
comodo di vedere e aggiungere i records.
Dal momento che posso mettere i campi anche da più di  una tabella, ne ho
approfittato per mettere oltre l'ID, anche le informazioni del cliente.
(Nome,Cognome,indirizzo e altro, che prendo dalla tabella Clienti) Il
risultato è molto bello e molto più comprensibile, io scelgo un ID dal campo
IDCliente della tabella Preventivi in cui mi compare ID,Nome,Cognome, e una
volta scelto nei campi sotto mi compaiono tutti i dati relativi al cliente.
Non sò quanto sia giusto, in quanto in tal modo vado a variare dei records
che dovrebbero essere già definiti, e non sarebbe giusto poter cambiare il
cliente, ma questo invece lo permette senza fare una piega........per me va
bene anche così, il guaio è che se scorro tutti i record e quindi vado ad
immettere un nuovo record scegliendo un cliente fra quelli già esistenti
nella tabella Clienti,( se fosse un cliente nuovo, dovrei prima immetterlo
in tabella Clienti)  al momento di salvarlo vengo avvisato che stò tentando
di duplicare ho la chiave primaria ,ho ecc......e questo con le tabelle non
succede. Quindi direi che tento di variare la tabella Clienti , che viene
usata nella maschera Preventivi, ma perchè ?  scelgo un ID corrispondente a
un cliente già catalogato ?
Mi permetti un paio di domande? La relazione (esatta) tra le tabelle Clienti
e Preventivi come dovrebbe essere ? I 3 tipi di Join in cosa influiscono ?
E infine un domandone. Qualche cliente ha più di un indirizzo dove si
effettuano i lavori. Quindi un cliente, più indirizzi. Io li chiamo
riferimenti.
Sino ad ora li ho messi nella tabella Ordini, cliente tale, dati presi dalla
tabella clienti, poi riferimento per questo ordine, tale indirizzo. Mi
andrebbe bene. Però.......ho provato a mettere il riferimento nella  tabella
Clienti (IDRiferimento, relazionato a IDRiferimento della tabella
Riferimenti), i dati sono di tipo numerico e in origine riga ho messo:
SELECT Riferimenti.* FROM Riferimenti WHERE
[Riferimenti].[Cliente]=Cliente.IDCliente;
La tabella Riferimenti è formata da 3 campi
IDRiferimento = contatore
Riferimento     = testo
Cliente             = all'ID del cliente
La cosa funziona, però non del tutto. L'ID devo immetterlo in una mascherina
( immetti parametro) che compare quando clicco su IDRiferimanto . Anche quì
mi può andar bene così, però dal momento che è un dato già presente nella
tabella ( ne fà addirittura un controllo con Where per mostrarmi solo i
riferimenti di quel cliente, perchè devo immetterlo come parametro, tra
l'altro me lo chiede solo una volta, se lo rivoglio devo fare aggiorna
record.
Mi rendo conto di essere pesante, mi scuso.
Ciao Tullio


Se sei d'accordo, io sarei per ricominciare d'accapo.
Insomma, penso che sia utile per te, far chiarezza sull'architettura del tuo
database.
Per quello che riguarda le tabelle e le relazioni tra tabelle, non vale la
pena di spendere altre parole: mi sembra che tu abbia progettato in maniera
corretta; lo dimostra il fatto che quando operi gli inserimenti direttamente
sulle tabelle (non tramite una maschera) le cose ti funzionano.
Mentre per quanto riguarda la maschera, se come "Origine record" hai una
query, per la visualizzazione dei dati non avrai problemi, ma avrai problemi
ad effettuare aggiornamenti e/o inserimenti di record nel caso in cui la
query non è aggiornabile. Ed è il caso tuo: infatti, se da un unica maschera
riesci a visualizzare dati contenuti in differenti tabelle, sicuramente
Access ha creato, come origine record, una query.
La giusta organizzazione per poter aggiornare, in un'unica schermata, i dati
distribuiti su quattro tabelle è quella di dichiararti una maschera che
abbia come origine record la tabella Preventivi e quindi contenga solo i
controlli relativi ai campi di questa tabella; dovrai poi inserire, in
questa maschera principale, tre sottomaschere che ti serviranno a
visualizzare e/o aggiornare/inserire i dati relativi alle altre tre tabelle
collegate (una sottomaschera per ogni tabella).
Sicuramente così non avrai più i problemi che hai segnalato.
Fammi sapere se sono stato chiaro.
Roberto

 Dove lo trovo ?
Se apri la struttura di una maschera, nella scheda Dati delle proprietą
della maschera, la prima riga si chiama appunto "Origine record"; in Origine
record va indicato l'oggetto del database (normalmente tabella o query) che
rappresenta appunto l'origine dei dati che vengono visualizzari e/o
aggiornati in una maschera.
A me interessava sapere cosa trovi scritto in questa proprietą della
maschera.
Roberto