Newsgroup: it.comp.appl.access
Titolo: Casella di testo che prende la prima parte di dati da un record di un'altra tabella

Sto sviluppando un'applicazione che gestisce i dati degli iscritti ad
un'associazione nazionale.
L'applicazione verrà utilizzata in ogni sede provinciale.
Ho creato una maschera iniziale che chiede all'utilizzatore di inserire in
un campo il nome della provincia, e in un altro la sigla della provincia.
Questi dati vengono salvati in una tabella, che rimarrà sempre solo con un
record, cioè quello relativo al nome ed alla sigla della provincia.
In una successiva maschera, più complessa, vengono gestiti i dati dei
singoli iscritti, presi da una tabella di un gruppo di professionisti della
provicia. In pratica, il database contiene 5400 record, da questi pesco il
record che di volta in volta aderisce all'associazione. Fin qui tutto bene.
Il problema nasce dal campo che gestisce il numero di tessera.
La mia intenzione sarebbe quella di assegnare a tale valore le prime due
cifre pescate dalla sigla della provincia (nella tabella che ho citato
all'inizio) e poi seguite da 4 numeri, randomizzati oppure inseriti
manualmente in ordine crescente.
Naturalmente questo campo deve essere univoco e quindi non deve consentire
duplicati. Se imposto tale condizione nella struttura della tabella, access
mi risponde che le modifiche non sono riuscite perchè si è cercato di
dupplicare i valori nell'indice, nella chiave primaria o nella relazione.
Questa risposta risiede nel fatto che tra i 5400 record tale campo non è
riempito, dato che solo un centinaio sono iscritti all'associazione e quindi
hanno già un numero di tessera?
Per il primo problema, ho provatoa scrivere questo codice:
    Private Sub TesseraNumero_Click ()
        If IsNull (TesseraNumero) Then
        TesseraNumero = SiglaProvincia
    End Sub
Alla prova della Sub Routine, il programma mi risponde :Errore di
comunicazione con il server OLE o con il controllo ActiveX.
*L'espressione non corrisponde al nome di una macro, di una funzione
definita dall'utente oppure a [Routine Evento]
*Si è verificato un errore durante la valutazione di una funzione, di un
evento o di una macro.
Chiedo cortesemente aiuto a qualcuno più esperto.
Grazie

 ha scritto nel messaggio
news:am1b84$h3s$1...@serv1.albacom.net...

Fammi capire.
La tua tabella è già riempita? Quindi hai una tabella con dei record, alla
quale aggiungi un nuovo campo e lo metti in chiave.
Quando salvi si imbufalisce perchè un campo chiave non può avere valori
null, come è visto che i record già esistono e quindi in quel campo non c'è
nulla.
Se è così, devi prima aggiungere un campo testo normale, quindi fare una
query di aggiornamento mettendo il codice univoco, quindi trasformi quel
campo come chiave.
Il problema è se non tutti i record devono avere quel codice e quindi cosa
mettere di univoco.
Allora, se è così, direi di fare un'altra cosa.
Metti un campo contatore, cosicchè ci pensa lui a tenere il numero univoco.
A questo punto, il codice provincia numero te lo ricavi tutte le volte come
concatenazione di provincia & numero (per esempio in maschera avrai un
controllo calcolato), ma questo lo farai SOLO se l'utente deve avere questo
codice, testando magari un campo Sì/No di associazione.
Un esempio pratico sarebbe, origine controllo del controllo codice:
=iif([Associato]=true;[SiglaProvincia] & [IDCONT];"-")
Antonio

Ho provato ad inserire la stringa if che mi hai consigliato come origine
controllo della casella di testo che dovrebbe assegnare il numero di tessera
in questo modo
    =if([ISCRITTO NURSIND]=vero;[SiglaProvincia] & [id])
ma il risultato è   #nome?  come risposta dell'applicazione al mio codice.
???
Provando ad inserirla sull'evento click mi ridà l'errore precedente.
Grazie del tuo interessamento
Ciao

 testo del numero tessera?
Esatto!
Antonio

 Provando ad inserirla sull'evento click mi ridà l'errore precedente.
Su clic non c'entra niente!!!
Antonio

 ha scritto nel messaggio
news:hx2h9.15840$eG6.3...@twister1.libero.it...

Ho provato ad inserire la stringa che mi hai proposto:
=if([ISCRITTO NURSIND]=vero;[SiglaProvincia] & [id])
ed ho provato a riscriverla specificando il percorso:
=IIf([Forms]![dati COLLEGIO IPASVI]![ISCRITTO
NURSIND]=Vero;[Forms]![Segreteria Provinciale]![SiglaProvincia] & [id];"-")
La [SiglaProvincia] si trova su una maschera diversa mentre [ISCRITTO
NURSIND] e [id] sono sulla stessa maschera del controllo che voglio creare.
La risposta continua ad essere #Nome?
Ho provato a creare una nuova casella testo nella stessa maschera, pensando
che ci fossero problemi col campo [NumeroTessera] ed ho ottenuto solo la
visualizzazione della sigla provincia mettendo in origine controllo il
percorso:
=[Forms]![Segreteria Provinciale]![SiglaProvincia]
Anzichè pescare il dato dalla maschera (che deve essere necessariamente
aperta a quanto ho capito) non posso pescarlo dal record della tabella?
Il campo [TesseraNumero] come ti dicevo nei post precedenti, ha un centinaio
di record empty ed i restanti notempty.
Sarà questo che disturba?
Grazie

 NURSIND] e [id] sono sulla stessa maschera del controllo che voglio
creare.
Ah...
Allora diventa così
=IIf([ISCRITTO NURSIND]=Vero;[Forms]![Segreteria
Provinciale]![SiglaProvincia] & [id];"-")
Antonio

 ha scritto nel messaggio
news:7ZBh9.4531$Hc7....@twister1.libero.it...

FINALMENTE FUNZIONA!!!
anche se non ho ancora capito qual'era il problema.
In fondo, scritto come me l'avevi postato all'inizio
=iif([Associato]=true;[SiglaProvincia] & [IDCONT];"-")
e come me l'hai postato ora
=IIf([ISCRITTO NURSIND]=Vero;[Forms]![Segreteria
Provinciale]![SiglaProvincia] & [id];"-")
cambiano due cose:
1. iif con IIf
è importante?
2. il percorso della maschera.
Ho provato a ciudere la maschera e mi sono reso conto che deve restare
aperta altrimenti non funziona.
Non potrei fare riferimento alla tabella invece? Perchè la maschera d'avvio
serve solo per l'inizializzazione del database e poi la faccio chiudere. So
che potrei nasconderla, ma sarebbe meglio pescare il valore della
SiglaProvincia nella tabella (che fra l'altro, contiene solo il record della
provincia di appartenenza.
Altro piccolo problema:
Il database contiene 5400 record.
Pescando l'id tra i primi record mi risultano numeri di tessera con soli 3
caratteri.
Per es. BG1
oppure BG12
oppure BG123
mentre vanno bene le quattro cifre dopo la provincia.
Come potrei fare a realizzare
BG0001
BG0012
BG0123
?
Comunque ti ringrazio infinitamente per l'aiuto
anche se so che a volte le parole non sono sufficienti
per esprimere la gratitudine.
Ciao
Donato
ps. porta pazienza, avrai capito che non sono un professionista, anche se
uso access dalla versione 2.0
solo che non lo uso quotidianamente, bensì solo per risolvere dei problemi.
Un fai da te, per intenderci.