Newsgroup: it.comp.appl.access
Titolo: Stampa unione.....Nuova frontiera!

> Salvatore
-------------------------- INIZIO
CODICE --------------------------------------------------------
Dim rst1 As Recordset, rst2 As Recordset, rst3 As Recordset
Dim t As Integer, padre1 As Long, padre2 As Long, step1 As Long, step2 As
Long
Dim figlio As String, figli As String, num As Long
Set rst1 = CurrentDb.OpenRecordset("sopralluoghi")
Set rst2 = CurrentDb.OpenRecordset("tecnici")
Set rst3 = CurrentDb.OpenRecordset("SopralluoghiETecnici")
DoCmd.SetWarnings False
DoCmd.RunSQL "Delete * FROM sopralluoghiETecnici"
DoCmd.SetWarnings True
rst2.MoveFirst
rst2.MoveLast
num = rst2.RecordCount
rst1.MoveFirst
rst2.MoveFirst
Do Until rst1.EOF
padre1 = rst1!sopralluogo
 For t = 1 To num
    padre2 = rst2!IDsopralluogo
    figlio = rst2!IDtecnico
    If padre1 = padre2 Then
    figli = figli & ", " & figlio
    End If
    rst2.MoveNext
 Next
If figli <> "" Then
rst3.AddNew
rst3!IDsopralluogo = padre1
rst3!sopralluogoETecnico= Right(figli, Len(figli) - 1)
rst3.Update
figli = ""
End If
rst1.MoveNext
rst2.MoveFirst
Loop
-----------------------FINE CODICE -------------------------------------
Questo gli avrebbe risolto il problema, soprattutto, per la stampa unione in
quanto, nel mio caso, i tecnici intervenuti in un solo specifico
sopralluogo, sono tutti inseriti in una sola riga.
E' interessante soprattutto dal punto di vista di poterlo inserire nel
sitocomune.
Ultima cosa: l'ho provato, sembra che funioni ma, quando vado ad aprire la
tabella "SopralluoghiETecnici", la vedo vuota.
Non voglio essere petulante ma, ripeto, è un problema che potrebbe,
sicuramente, risolvere ed aprire nuove frontiere alla "stampa unione" di
Word.
Grazie per la cortese attenzione e di una squisita collaborazione.
Marco.

tabella "SopralluoghiETecnici", la vedo vuota.
Cosa contengono i campi 'sopralluoghi!sopralluogo' e
'tecnici!IDsopralluogo'?
Ciao
--
Alberto
No alle guerre

tutto [cut] - abbiamo scritto abbastanza -
Ti ringrazio, innanzitutto, per l'attenzione.
Si, in effetti la routine gira ma non mi spiego perchč la tabella č vuota.
Ti espongo come dovrebbe essere il tutto.
Tabella sopralluoghi : IDsopralluoghi, data, luogo
Tabella tecnici: IDtecnici, tecnici
Tabella sopralluoghietecnici: IDsopEtecnici, tecnici (dove dobrebbero
trovarsi, in riga, tutti i tecnici intervenuti in un determinato
sopralluogo)
La tabella tecnici č correlata con quella dei sopralluoghi "UnoAMolti".
Purtroppo il codice non č mio e l'autore sembra essere "latitante" :-))
Nell'attesa di conoscere esiti positivi (ormai č una sfida), un caro saluto
a tutti.
Marco.

Purtroppo il codice non è mio e l'autore sembra essere "latitante" :-))
Ok,
se la tabella 'sopralluoghiEtecnici' la vuoi riempire solo al momento
in cui generi una stampa unione, significa che - in quel momento - gli
unici dati disponibili sono i seguenti:
tabella Sopralluoghi
- IDsopralluoghi
- ecc ecc
tabella tecnici
- IDtecnici
- ecc ecc
Quindi non vedo come si possa sapere quali sono i tecnici che hanno
partecipato ad un determinato sopralluogo. Dovresti già avere quindi
anche una tabella di questo tipo
tabella Soprall-Tecn
- IDsopralluoghi
- IDtecnici
in cui, per ogni sopralluogo, saranno presenti tanti record quanti
sono i tecnici che ne hanno preso parte
In questo modo avrai a disposizione i dati per alimentare la tabella
'sopralluoghietecnici'. Ovviamente il codice di cui sopra andrà
opportunamente modificato.
Se intendi seguire questa strada devi prima di tutto adattare la tua
base di dati; poi se hai bisogno di una mano per il codice fatti
sentire.


 ha scritto nel messaggio
news:j3ik40pa9fmcdl2q0...@4ax.com...

Effettivamente tra un po di casino (forse per errore di battitura creato
dall'autore originale (Salvatore)) e qualcosa di non proprio esatto è stato
riportato, credo che hai ragione: il codice va rivisto!
Allora, vedo che sei alquanto tenace e cerco di ricapitolare il tutto.
Fermi su questo concetto e, cioè, che da una tabella sopralluoghi, una
tabella tecnici, ovviamente correlate, su una nuova tabella
"SopralluoghiETecnici" devo ottenere in un solo campo, ad esempio,
"tecnici", tutti i tecnici intervenuti, ad esempio Ing.Caio, Arch.Tizio
ecc., di quel determinato sopralluogo.
Dobbiamo verificare perchè la routine funge ma non crea nessun dato nella
nuova tabella.
La stampa unione, in questo momento, non ci occorre. Dovrà servire solo
quando la nuova tabella avrà i dati necessari.
Ho ragione di credere che a Salvatore, è sfuggito qualcosa. Purtroppo,
siccome "latitante" :-)), tocca a noi scoprirlo (mi sembra un puzzle, alla
fine si vincerà qualcosa???)
Grazie ancora dell'attenzione!
Marco.

fine si vincerà qualcosa???)
Fai in modo che il tuo database contenga tutte le informazioni
necessarie: fai come ho suggerito io oppure in un altro modo a tua
scelta. Poi per aggiornare la tabella 'sopralluoghiEtecnici' se ne può
riparlare (sarà un po' elaborato ... ma neanche tanto ...)


 ha scritto nel messaggio
news:itrl40pspdoaof7i7...@4ax.com...

Caro Alberto :-);
facciamo una cosa..........
per non creare dubbi e/o disguidi, errore di battitura, errore
d'interpretazioni ecc.ecc.,
creiamoci un piccolissimo dbase e le necessarie tabelle atte a dimostrare
che il codice funzioni egregiamente.
Ti chiedo se, gentilmente, ne potresti crearne uno, di tua fantasia,
permettendomi di suggerirti tipo una gestione di acquisti presso una ditta:
maschera che contiene una ditta ed una sottomaschera che contiene i suoi
prodotti.
Quindi una tabella delle ditte, una tabella dei prodotti ed infine la
tabella che conterrà il campo desiderato dove verranno inseriti, magari
separate da una virgola, tutte i prodotti acquistati presso quella ditta.
Penso che sia meglio in questa maniera anche per capire se il codice,
effettivamente, ha qualche "bug".
Siccome non sono molto "ferrato" per il codice Visual Basic (conosco solo
piccolissime e pochissime nozioni), noto che nel codice in questione, ci
sono delle dichiarazioni "Step1 e Step2" ma non le vedo utilizzate. Boh?
Attendo con ansia tue nuove.
Ciao.
Marco.

 
non ti sembra di chiedere un po' troppo?
Quel codice a occhio funziona anche se personalmente l'avrei scritto in 
altro modo:
sSql = "select sopralluoghi.*, tecnici.* from sopralluoghi, tecnici 
where sopralluoghi.sopralluogo = tecnici.idsopralluogo"
'------>questa e' una "classica" inner join.
Set rst1 = CurrentDb.OpenRecordset(sSql)
..........
do until rst1.eof
     wk_id = rst1!sopralluogo
     figli=""
     do until rst.eof or wk_id <> rst1.sopralluogo
         figli=figli & ", " & rst1!idtecnico
	rst1.movenext
         if rst1.eof then exit do
     loop
     rst3.addnew
     rst3......aggiunge i campi
     rst3.update
loop
............
rst2 non serve.
P.S. non mi sembra poi che sia una cosa da "sitocomune" (fermo restando 
che qualcosa del genere dovrebbe gia' esserci)
--
a.cara

 che qualcosa del genere dovrebbe gia' esserci)
Ti sarei grato se mi indicassi, precisamente, dove si trova, nel sitocomune,
una soluzione analoga.
Rinnovo la mia stima e ti chiedo, gentilmente, di provare con un tuo
esempio, il codice da te "autorevolmente" suggerito.
Grazie ancora dell'attenzione.
Marco.

 
uffi.... ;<)
Dim rst1 As DAO.Recordset, rst3 As DAO.Recordset
Dim sSql as string, figli as string, wk_id as long
sSql = "select sopralluoghi.*, tecnici.* from sopralluoghi, tecnici 
where sopralluoghi.sopralluogo = tecnici.idsopralluogo"
Set rst1 = CurrentDb.OpenRecordset(sSql)
Set rst3 = CurrentDb.OpenRecordset("SopralluoghiETecnici")
DoCmd.SetWarnings False
DoCmd.RunSQL "Delete * FROM sopralluoghiETecnici"
DoCmd.SetWarnings True
do until rst1.eof
     wk_id = rst1!sopralluogo
     figli=""
     do until rst.eof or wk_id <> rst1.sopralluogo
         figli=figli & ", " & rst1!idtecnico
         rst1.movenext
         if rst1.eof then exit do
     loop
     with rst3
         .addnew
         !IDsopralluogo = wk_id
         !sopralluogoETecnico= mid(figli,2)
         .update
     end with
loop
set rst1 = nothing
set rst3 = nothing
questo e' quanto.
Se in sopralluogoEtecnico non c'e' nulla e' perche' non c'e' 
accoppiamento fra sopralluoghi e tecnici.
L'ho scritta al  volo, senza provarla, ma mi stupirei se non funzionasse
P.S. E' circa la stessa routine da te proposta.
Per verificare se esistono i dati e' sufficiente che esegui la query in 
"sSql" direttamente sotto la sezione query di access
-----
a.cara

 > Putroppo più di qualcuno ha detto che "a occhio" funziona ma quando l'ha

Ammappete che tempestività!!!!
La provo al volo e ti farò sapere.
Grazie ancora!
Marco.

 set rst3 = nothing
Mi dispiace molto, credimi, che purtroppo non succede nulla. Il codice funge
ma la tabella "SopralluoghiETecnici" è sempre vuota.
Dai, non ti arrabbiare! Cerchiamo di "spegnere" questo 3d.
Un salutone.
Marco.

loop
Ciao Alessandro,
ma hai visto quale è - a detta di Mark - la struttura della base dati?
a) tabelle già presenti
-----------------------
Tabella sopralluoghi : IDsopralluoghi, data, luogo
Tabella tecnici: IDtecnici, tecnici
b) tabella che deve generare
----------------------------
Tabella sopralluoghietecnici: IDsopEtecnici, tecnici (dove dobrebbero
trovarsi, in riga, tutti i tecnici intervenuti in un determinato
sopralluogo)
Penso che, se le cose stanno così, manco con la sfera di cristallo di
Roberto ...


 ha scritto nel messaggio
news:Bnj2c.6334$O31.2...@news4.tin.it...

Prova ad impostare il database in questo modo:
crea quattro tabelle:
1) Tecnici
2) Sopralluoghi
3) SopralluoghiETecnici
4) Sintesi
Nella prima tabella inserisci come chiave primaria IDTecnico ed un campo di
tipo testo "Tecnico" dove riporterai il nominativo dei tecnici
Nella seconda tabella inserisci IDSopralluogo (chiave primaria) ed altri
campi a tua scelta per descrivere i dati del sopralluogo
Nella terza tabella inserisci IDSopralluogo e IDTecnico. La coppia delle
righe impostala come chiave primaria.
La tabella sintesi sarà composta da un campo IDSopralluogo e da un campo
testo (forse è meglio memo) chiamato Tecnici.
Usa, poi, il codice seguente:
Dim rst1 As DAO.Recordset, rst2 As DAO.Recordset, rst3 As DAO.Recordset
Dim padre1 As Long, padre2 As Long, figlio As String
Set rst1 = CurrentDb.OpenRecordset("Sopralluoghi")
Set rst3 = CurrentDb.OpenRecordset("sintesi")
DoCmd.SetWarnings False
DoCmd.RunSQL "Delete * FROM sintesi"
DoCmd.SetWarnings True
rst1.MoveFirst
rst1.MoveLast
numero = rst1.RecordCount
rst1.MoveFirst
Do Until rst1.EOF
padre1 = rst1!IDSopralluogo
Set rst2 = CurrentDb.OpenRecordset("SELECT Sopralluoghi.IDSopralluogo,
Tecnici.Tecnico FROM Tecnici INNER JOIN (Sopralluoghi INNER JOIN
SopralluoghiETecnici ON Sopralluoghi.IDSopralluogo =
SopralluoghiETecnici.IDSopralluogo) ON Tecnici.IDtecnico =
SopralluoghiETecnici.IDTecnico")
rst2.MoveFirst
rst2.MoveLast
num = rst2.RecordCount
rst2.MoveFirst
 For t = 1 To num
    padre2 = rst2!IDSopralluogo
    figlio = rst2!tecnico
    If padre1 = padre2 Then
    figli = figli & ", " & figlio
    End If
    rst2.MoveNext
 Next
If figli <> "" Then
rst3.AddNew
rst3!IDSopralluogo = padre1
rst3!Tecnici = Right(figli, Len(figli) - 1)
rst3.Update
figli = ""
End If
rst1.MoveNext
rst2.Close
Loop
Ciao,
Salvatore.
P.S. ti ho inviato il database di esempio.

Alberto S. wrote:

ciao
A dir la verita' non ho proprio guardato la struttura. Davo per scontato 
    che la relazione fra sopralluogo e tecnico ci fosse e che gli 
servisse di "allineare" i tecnici.
Sono intervenuto semplicemente perche' quel codice mi sembrava un po' 
incasinato.
Hai perfettamente ragione se non mette la "associativa" fra sopralluoghi 
e tecnici partecipanti neanche San Gennaro risolve il problema.
;<)
--
a.cara

Mark wrote:
[cuttone]
guardati la mia risposta ad Alberto S.
Per quanto riguarda rst-->rst1 certo e' un errore di battitura
Cmq se "non" associ i tecnici al sopralluogo  ( deve esserci una nuova 
tabella) e' difficile che ne vieni fuori
--
a.cara

 ha scritto nel messaggio
news:c2ft1t$38f$1...@lacerta.tiscalinet.it...

Ok, grazie Esimio Salvatore, finalmente possiamo chiudere questo 3d. Il tuo
codice ed il tuo database d'esempio funziona alla grande.
Ho solo aggiunto una query in più, alla fine del codice, la quale mi crea
una tabella dove, dal numero del sopralluogo nella maschera inserimenti,
immette solo l'id e i tecnici di quel solo sopralluogo e........FINALMENTE,
da questa tabella si può inserire, successivamente, in Word per la stesura
del verbale.
Ringrazio, ovviamente e squisitamente tutti gli altri che hanno partecipato
(e avuto molta pazienza) a questo 3d.
Ancora un grazie a Salvatore!
Marco.