Newsgroup: it.comp.appl.access
Titolo: identificare ed aggiornare campo

Salve a tutti ho un campo di testo ( es. campo1) che passato come parametro
identifica il nome del campo di una tabella (es. tabella1) che va aggiornata
tramite un tasto si/no/forse. Come faccio a dire alla routine che la stringa
contenuta nel campo1 č uguale al nome campo contenuto nella tabella1?
grazie
F

 contenuta nel campo1 è uguale al nome campo contenuto nella tabella1?
Prova a rispiegare il tutto a parole tue, facendo attenzione anche alla
notazione corretta (campi, controlli ecc.)
Antonio

 ha scritto nel messaggio
news:bd60a.85089$ZE.23...@twister2.libero.it...

Allora cerco di spiegarmi meglio:
ho una tabella (tab1) con dei campi (nome, cognome, acquista, vende,ecc) e
una tab2 con dei valori nei record predefiniti. In una maschera seleziono un
nome (es. pasquale) da tab1 con una combo e poi seleziono con una II combo
la tipologia (es: acquisto vendo,ecc contenuta in tab2). Fatto ciò si apre
una nuova maschera che riporta i dati nome e tipologia in due campi testo
con tre tasti identificati con si, no, forse. Io voglio ottenere che alla
pressione di uno dei tre tasti il record nome=pasquale e campo acquisti o
vendita ecc. a seconda della scelta effettuata, sia aggiornato con si o no o
forse. Cosi' descritto è semplice l'aggiornamento ma diventa complicatuccio
perchè il nome del campo da scegliere (acquisto o vendita) è attinto dalla
II combo da tab2 con valori predefiniti che diventano nomi di campo in tab1.
Spero di esserti stato piu' chiaro
Grazie sempre per gli aiuti
F

 Spero di esserti stato piu' chiaro
Sarà la stanchezza dell'ora... ma no... mi spiace...
Antonio

 ha scritto nel messaggio
news:7cd0a.86936$ZE.23...@twister2.libero.it...

vediamo adesso:
tabella1             nome, cognome, acquisto,vendita,riserva,premio (nomi
dei campi)
tabella2            valori: (nome campo)
                        acquisto
                        vendita
                        riserva
                        premio
maschera1        campo1=nome                    campo2=valori
Seleziono un nome e un valore (es.: nome=ciro e valori=vendita)
maschera2        text1=ciro                    valori=vendita
nella maschera2 ci sono tre tasti. L'evento click puo' essere si oppure no
oppure forse. Devo andare al record della tabella1 nome=ciro e campo=vendita
che è dato da valori=vendita e inserire si o no o forse. Il parametro valori
deve identificare il campo di tabella1 corrispondente.
Spero adesso di essere stato piu' chiaro
Scusami
ciao
Francesco

 Spero adesso di essere stato piu' chiaro
Direi proprio di sì!
Allora, facciamo prima un distinguo:
1) SE ogni record della tabella 1 può avere solo uno dei campi riempito,
associando un solo valore della tabella 2, allora è sbagliata la tua
struttura dati che dovrebbe essere così
Nome, cognome, TipoValore, Valore ed avresti record di questo tipo
paolo rossi Vendita Sì
mario bianchi Premio Forse
e così via
Quindi, al clic del pulsante, fai una query di aggiornamento sul record
desiderato scrivendo sia la tipologia che il valore e scegliendo la
tipologia dal valore scelto in combo.
2) SE più valori sono riempibili (cioè se per la stessa persona vale per
esempio sia l'acquisto che il premio) si potrebbe fare in due modi:
a) di nuovo cambiare la struttura della tabella1 e mettendo un'altra su cui
applicare una relazione uno a molti
ID, nome, cognome per la tabella1 con
1 paolo rossi
2 mario bianchi
Rif_ID, TipoValore, Valore per la nuova tabella e quindi avresti
1 Vendita Sì
1 Premio Forse
2 Acquisto No
In questo caso al clic vai ad accodare un nuovo record alla nuova tabella
con l'ID della persona scelta e i valori della combo e del pulsante usato.
b) Se infine vuoi invece usare la tua struttura, devi lavorare via codice
aprendo un recordset sulla tabella1, editando il record della persona scelta
e quindi farai
rst.fields(me.combo) = XXX
con XXX sì, forse o no
me.combo conterrà il nome del campo e quindi andai a scrivere proprio in
quel campo!!!
Fine
Antonio

...

Carissimo ho provato come tu dici al punto b). La maschera si apre con
i parametri passati dalla maschera precedente per identificare il
record specifico e cioè, in un evento after update faccio aprire la
maschera SCELTE in questo modo:
Dim stLinkCriteria As String
 
    stDocName = "SCELTE"
 
    DoCmd.OpenForm stDocName, , , stLinkCriteria
    Forms("scelte").nome = Me!nome
    Forms("scelte").protot = Me!proprietà
dove nome è il cliente e proprietà è il valore che identifica il campo
della tabella (es. acquisti, vendita, ecc.) che puntano al record
specifico.
All'apertura della maschera SCELTE, quando apro il recordset con le
seguenti istruzioni:
Dim MioDb As database, rst As TableDef
Set MioDb = OpenDatabase("tav.mdb")
Set rst = MioDb.TableDefs("comp")
e poi aggiungo la linea:
rst.Fields(me.protot)= "FS"
dove FS è il dato da inserire nel record specifico nel caso di click
sul tasto FORSE, mi va in errore di run-time 3219 - Operazione non
valida
Il parametro che identifica il nome campo passa, perché lo vedo in
fase di debug, però va in errore
spero di essermi spiegato bene
grazie ancora per l'aiuto
ciao
Francesco

 fase di debug, però va in errore
Eh certo!
Riprova!!!
Antonio

...

Ops ho fatto delle ca**ate.....cmq ho provato come dici tu, e cioè,
nell'evento click di un tasto ho messo:
Private Sub NO_Click()
Set MioDb = CurrentDb
Set rst = MioDb.OpenRecordset("comp")
rst.Fields(protot) = "NO"
DoCmd.Close
End Sub
ma l'errore adesso è cambiato; mi dice che la tabella è già aperta con
accesso esclusivo da un altro utente o tramite l'interfaccia utente e
quindi non si puo' manipolare attraverso la programmazione. Boh!...non
riesco proprio a capire dove mi sono impantanato.
Scusami e grazie ancora
Francesco

 riesco proprio a capire dove mi sono impantanato.
Intanto prova a fare così, poi vediamo
Antonio

...

Allora......ho provato e adesso c'e' "errore di sintassi (operatore
mancante) nell'espressione". Il parametro però passa (lo vedo in fase
di debug)nella parte dell'istruzione me. Fammi capire una cosa:
nell'istruzione rst.findfirst "[ID] = " & me.ID, ID l'hai messo come
esempio del nome campo oppure dev'essere l'id reale del record?
grazie
Francesco

 esempio del nome campo oppure dev'essere l'id reale del record?
Primo: quando segnali un errore di run time indica il punto dove lo fa.
Inoltre posta il TUO codice, come l'hai scritto tu.
Infine OVVIAMENTE io scrivo nomi che tu devi sostituire con i tuoi
Nella riga "[ID] = " & me.ID
[ID] è il nome del campo chiave nella tabella, me.ID è il nome del controllo
della maschera che contiene l'ID del record corrente
Antonio

 ha scritto nel messaggio
news:iQ05a.137167$YG2.3...@twister1.libero.it...

Sorry forse ti sto infastidendo un po' e mi rendo conto di aver fatto un po'
di confusione, lo deduco dalle tue spiegazioni e forse ti sto depistando.
Cerco in breve di rispiegare il problema:
nella maschera n.1 io tramite un elenco seleziono il cliente; nella stessa
maschera seleziono cosa lui vuole fare da un altro elenco (cioè acquistare,
vendere, cedere,ecc.). Con questi due valori selzionati io apro una
maschera2, dove il nome del cliente selezionato è il valore del record della
tabella, mentre la scelta (cioè acquistare, vendere, cedere,ecc.) sarà il
nome del campo da selezionare per l'aggiornamento; quindi:
evento click della maschera1:
Private Sub proprietà_AfterUpdate()
Dim stDocName As String
    Dim stLinkCriteria As String
    stDocName = "SCELTE"
    DoCmd.OpenForm stDocName, , , stLinkCriteria
    Forms("scelte").cliente = Me!cliente
    Forms("scelte").scelta = Me!scelta
    End Sub
si apre la maschera2 contenente tre tasti (si/no/forse) e tre campi nascosti
che identificano i parametri passati, e nell'evento click di un tasto, ad
esempio tasto NO:
Private Sub NO_Click()
Set MioDb = CurrentDb
Set rst = MioDb.OpenRecordset("clienti", dbOpenDynaset)
rst.FindFirst "[scelta] =" & Me!scelta**************
DoCmd.Close
End Sub
Avvio il tutti e l'errore avviene sull'istruzione asteriscata, cioè errore
di sintassi.....ecc.
Scusami se sono prolisso e rompip****e
grazie ancora
Francesco

 di sintassi.....ecc.
NONEEEE
La rst.findfirst ti serve per saltare ad un record del recordset aperto.
Il record deve essere lo stesso aperto sulla maschera, quindi devi usare
l'ID della maschera e andarlo a cercare sul recordset
Pertanto il campo tra [] deve essere il nome del campo chiave della tabella
e me!XXX XXX deve essere il nome del controllo nella maschera2 contenente il
campo chiave della tabella (controllo che può anche essere nascosto)
Antonio

 ha scritto nel messaggio
news:iH95a.139785$ZE.39...@twister2.libero.it...

Scusami ma sarò un po' tonto ma non ho capito. Se sei così gentile da
spiegarti meglio mi fai un grosso favore. Lo so che è difficile colloquiare
in questo modo ma forse sono io che non ti ho fatto capire bene il
problema...scusami
Come faccio a inserire il nome campo tra le parentesi quadre se esso è
ricavato dal passaggio di parametro di apertura tabella? Fammi capire un po'
meglio, ti prego
grazie e scusa ancora
F

 ha scritto nel messaggio
news:b33eek$nt6$1...@lacerta.tiscalinet.it...

UH CAZZAROLA!!!!
Il passaggio di parametro che ti da il campo, ti da il campo DOVE ANDRAI A
SCRIVERE il valore, ma non il campo chiave del record dove devi andare a
scrivere.
Quello SARA' SEMPRE LO STESSO, per tutti i record!!!!!
Antonio

 ha scritto nel messaggio
news:53daef02.03021...@posting.google.com...

Quello che ti volevo chiedere e questo:
se si aumentano i campi della tabella con un'altra funzione nella maschera,
si puo' da codice incrementare automaticamente la query dell'origine riga
che mostra dati e colonne esistenti?
grazie
F

 che mostra dati e colonne esistenti?
Se metti un campo nella tabella clienti, dovrai aggiungere un record nella
tabella proprietą, ovviamente con lo stesso nome...
Antonio