Newsgroup: it.comp.appl.access
Titolo: Popolare campi su scelta in casella riepilogo.

Buongiorno a tutto il Ng. Sono alle prese con un nuovo problema; sto
costruendo un nuovo db nel quale importo una tabella dal mio db
principale. ho creato una nuova tabella copiando solo la struttura di
quella importata e aggiungendo alcuni campi che mi servono. Vorrei
creare una maschera che punti alla seconda tabella con all'interno una
casella di riepilogo con origine records nella prima. Come posso, su
scelta nella casella di riepilogo, popolare tutti i campi uguali delle
due tabelle lasciando poi all'inseritore di compilare quelli aggiunti
nella seconda tab?
Un grazie a chi vorrà darmi lumi...
Ciao, Marco.

 nella seconda tab?
Qualcosa del genere:
Dim RS as recordset, FL as field
Set RS=currentdb.openrecordset("Tabella1", dbOpenTable)
RS.FindFirst("[ID]=" & me.CasellaCombinata0)
For each FL in RS.Fields
  Me.controls(FL.name)=RS!FL.name
  next
Scritto di getto, quindi probabilmente e' strapieno di errori di
sintassi, ma il senso e' quello.
cia'
Max


Domani la provo in ufficio e nel caso ti riporto eventuali errori.
Grazie 1k, Marco.

 wrote:

Eccomi qua, ho provato a mettere la routine sul click della casella di
riepilogo (giusto?)
Mi da errore 3251 operazione non supportata per questo tipo di oggetto
e mi evidenzia questa riga:
RS.FindFirst ("[N° ID]="& Me.Elenco1)

 - Mostra testo tra virgolette -
Non riesco ad andare avanti, spero che qualcuno voglia darmi una
mano....

 ha scritto nel messaggio 
news:1192712327.9...@v23g2000prn.googlegroups.com...
Eccomi qua, ho provato a mettere la routine sul click della casella di
riepilogo (giusto?)
Mi da errore 3251 operazione non supportata per questo tipo di oggetto
e mi evidenzia questa riga:
RS.FindFirst ("[N° ID]="& Me.Elenco1)
[risposta]
Prova ad impostare il recordset come DAO non ADO:
'---
Dim RS as dao.recordset, FL as dao.field
Set RS=currentdb.openrecordset("Tabella1", dbOpenSnapShot)
RS.FindFirst "[ID]=" & me!CasellaCombinata0
For each FL in RS.Fields
  Me.controls(FL.name)=RS!FL.name
next
set fl = nothing
set rs = nothing
'---
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggionews:1192712327.9...@v23g2000prn.googlegroups.com...

Grazie Sergio.
Ora mi da errore di elemento non trovato in questo insieme
La riga evidenziata è:
Me.controls(FL.name)=RS!FL.name

 ha scritto nel messaggio 
news:1192786316.0...@e9g2000prf.googlegroups.com...
Grazie Sergio.
Ora mi da errore di elemento non trovato in questo insieme
La riga evidenziata č:
Me.controls(FL.name)=RS!FL.name
[risposta]
Se vai in debug e visualizzi il contenuto di 
fl.name
 vedi il perché...
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA
Ci ho provato ma non sono sicuro di sapere come si fa, ho aperto la
finestra immediata (da Help), ci ho incollato la riga ma mi ripete la
definizione dell'errore "3265". Se ti va di spiegarmi come si fa te ne
sarei grato, almeno imparo un'altra cosa :)
Ciao.

 ha scritto nel messaggio 
news:1192794984.8...@t8g2000prg.googlegroups.com...
Ci ho provato ma non sono sicuro di sapere come si fa, ho aperto la
finestra immediata (da Help), ci ho incollato la riga ma mi ripete la
definizione dell'errore "3265". Se ti va di spiegarmi come si fa te ne
sarei grato, almeno imparo un'altra cosa :)
Ciao.
[risposta]
Quando si blocca l'esecuzione del programma puoi controllare il valore 
contenuto delle variabili, in alcuni casi anche modificarne il contenuto e 
ripartire con l'esecuzione (F5).
Quindi; bloccata l'esecuzione (debug) puoi:
- portare il cursore sopra l'istruzione FL.name e attendi il tooltip
- nella finestra immediata (CTRL-G) scrivere: ? FL.name e batti INVIO
- scrivere prima della istruzione che si blocca: debug.print FL.name la 
debug.print visualizza l'output nella finestra immediata...
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggionews:1192794984.8...@t8g2000prg.googlegroups.com...

Il tooltip non l'avevo mai visto!!!! Grazie per le preziose dritte
Sergio, solo il debug.print non sono riuscito ad usarlo (l'ho messo
prima di FL.Name dentro le parentesi ma mi da errore di prevista
istruzione).
In ogni caso FL.Name mi dice essere "N° ID" che è il contatore della
mia tabella1 (non commentare la scelta del nome, non l'ho deciso io e
quanto ho cominciato a mettere mani sul db era già troppo tardi per
fare modifiche) e RS!FL.name mi dice essere l'elemento non trovato in
questo insieme. Non riesco proprio a capire, il campo N° ID è presente
in entrambe le tabelle ed anche nella listbox, perchè me lo da non
presente?
Forse nella seconda tabella, quella che ho creato copiando solo il
formato della prima e aggiungendo i campi dovrei metterlo a numerico
invece che contatore? Boh, ora provo.
Se hai qualche idea su come risolvere te ne sarò davvero grato,
intanto provo a fare qualche esperimento...
Ciao!


Il problema potrebbe essere lo spazio e il carattere particolare nel nome 
del campo.
Prova in questo modo:
Me.controls(chr$(34) & FL.name & chr$(34))=RS(chr$(34) & FL.name & chr$(34))
Oppure indicando l'indice del controllo nella collection:
Me(12)=RS(13)
Ammesso che il 12mo controllo nella form sia il N° ID e il 13mo campo nel 
recordset sia sempre il N° ID...
Ciao.
-- 
Sergio MAZZA 

 - Mostra testo tra virgolette -
Non ci riesco in nessun modo! provo a rispiegare la procedura che
seguo perchè sicuramente c'è qualcosa che non va.
Dal mio db principale faccio una query di creazione tabella chiamata
PresXConv e creo la tabella nel db dove sto lavorando.
La tabella è un'anagrafica (Cognome, nome etc) ed ha un campo
contatore che si chiama N° ID. Faccio un copia e incolla solo
struttura della tabella e ne creo un'altra che si chiama Presenti alla
quale aggiungo dei campi che mi servono. Creo una maschera
"Inserimento" con origine dati sulla tabella Presenti la popolo con
tutti i campi della tabella. Nella maschera inserisco una listbox
(Elenco1) non associata che ha come origine riga la tabella PresXConv
(N° ID ,Cognome, Nome, DataNascita etc).
Su click della listbox inserisco la routine seguente:
Option Compare Database
Private Sub Elenco1_Click()
Dim RS As DAO.Recordset, FL As DAO.Field
Set RS = CurrentDb.OpenRecordset("PresXConv", dbOpenSnapshot)
RS.FindFirst ("[N° ID]=" & Me!Elenco1)
For Each FL In RS.Fields
'Me.Controls(Chr$(34) & FL.Name & Chr$(34)) = RS(Chr$(34) & FL.Name &
Chr$(34))
'Me(1) = RS(1)
Me.Controls(FL.Name) = RS!FL.Name
Next
Set FL = Nothing
Set RS = Nothing
End Sub
Come vedi ho provato in tutti i modi; N° ID è il primo campo
nell'ordine di tabulazione della maschera ed è anche il primo campo in
PresXConv.
Ho provato anche, per esperimento, a dare un nome più normale ai campi
contatori di entrambe le tabelle ma non va neanche così.
Non so proprio dove possa essere l'errore.
Ti ringrazio per la pazienza, Marco.

 Ti ringrazio per la pazienza, Marco.
Ma la casella combinata che colonna associata ha?
Spero la 1 = N° ID
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA
Ciao, Marco.


Chiedo scusa se sono petulante ma proprio non ci sto riuscendo, ci sto
provando anche a casa con due tabelle, una maschera e una listbox con
A00 mentre in ufficio ho A03.
Qualcuno ha voglia di provare questa routine per vedere se a lui
funziona o dov'è l'errore?
Un grosso saluto, Marco.


il tuo problema è qui:
Me.Controls("[" & FL.Name & "]") = RS("[" & FL.Name & "]")
in questo modo cerchi di assegnare hai controlli il nome dei fields 
inesistenti:
rs!
fl.name
 dopo "For each fl in rs.fields" è = RS!RS!
fl.name
è siccome devi assegnare la proprietà value (cioe' quello che contengono) i 
fields e non il loro nome prova cosi:
Me.controls(
fl.name
) = fl.value
-- 
Ciao
Access


Grazie Access ma....(ç@*£$$ç%ç@@!!!!!!) NON VAAAAA!!!! Tu hai provato?
ti funziona?
a me dice che è impossibile assegnare un valore all'oggetto.
Vado a cercarmi dei calmanti...

 Vado a cercarmi dei calmanti...
Questo è il calmante..
-- 
Ciao
Access 


Alla fine, grazie a tutti voi che mi avete aiutato e ad Access che mi
ha dato il "calmante" :) ce l'ho fatta!!!!
Posto il codice finale se dovesse mai servire a qualcun'altro:
Private Sub Elenco1_Click()
Dim RS As DAO.Recordset, FL As DAO.Field
Set RS = CurrentDb.OpenRecordset("Tabella1", dbOpenSnapshot)
    RS.FindFirst "[N° Id]=" & Me!Elenco1
       For Each FL In RS.Fields
            If Not FL.Name = "N° Id" Then
       Me.Controls(FL.Name) = FL.Value
End If
Next
   Set FL = Nothing
   Set RS = Nothing
End Sub
Sempre in debito.... Marco.