Discussione:
raggruppamento con sottogruppi
(troppo vecchio per rispondere)
Akery
2024-01-12 11:33:05 UTC
Permalink
buongiorno,

ho la necessità di aggregare questi dati:

classe_attività cod_descr edifici e piani in uso idlocale
ALTRO 001 PTECA.I1 1I035
ALTRO 001 PTECA.I1 1I040
ALTRO 001 PTECA.I1 1I041
ALTRO 001 PTECA.I1 1I042
ALTRO 001 PTECA.I1 1I043
ALTRO 001 PTECA.I1 1I044
ALTRO 001 PTECA.I1 1I045
ALTRO 001 PTECA.I1 1I047
ALTRO 001 PTECA.I1 1I074
ALTRO 001 PTECB.T 036
ALTRO 001 PTECB.T 037
ALTRO 001 PTECB.T 038
ALTRO 001 PTECB.T 038
ALTRO 001 PTECB.T 042
ALTRO 001 PTECB.T 042
ALTRO 001 PTECB.T 042
ALTRO 001 PTECB.T 042
ALTRO 001 PTECC.1 101
ALTRO 001 PTECC.1 102
ALTRO 001 PTECC.1 105
ALTRO 001 PTECC.1 106
ALTRO 001 PTECC.1 109
ALTRO 001 PTECC.1 110

in questi:

classe_attività,cod_descr,edifici e piani in uso, idlocale
ALTRO, 001, PTECA.I1, 1I035; 1I040; 1I041; 1I042; 1I043; 1I044; 1I045;
1I047; 1I074
ALTRO, 001, PTECB.T, 036; 037; 038; 042
ALTRO, 001, PTECC.1, 101; 102; 105; 106; 109; 110

ho scritto quanto segue ma non riesco a venirne a capo

Dim RS1 As Recordset, RS2 As Recordset
Dim SourceTable As String, TargetTable As String

'-- Definizioni --
SourceTable = "02_pre_att_sicura"
TargetTable = "sicura_attività"
'------------------


Set RS1 = CurrentDb.OpenRecordset(SourceTable, dbOpenDynaset)
Set RS2 = CurrentDb.OpenRecordset(TargetTable, dbOpenDynaset)

RS1.MoveFirst

Do Until RS1.EOF
claatt = RS1!classe_attività
coddes = RS1!cod_descr
ediepi = RS1![edifici e piani in uso]
idloca = RS1!idlocale
titatt = RS1!titolo_attività
fatdir = RS1![fattore di Rischio]
RS1.MoveNext
Do While RS1!classe_attività = claatt And RS1!cod_descr = coddes And
RS1![edifici e piani in uso] = ediepi
idloca = idloca & RS1!idlocale & "; "
RS1.MoveNext
Loop
RS2.AddNew
RS2![edificio_e_piano] = ediepi
RS2![id_locale] = idloca
RS2!classe_att = claatt
RS2!cod_descr = coddes
RS2!titolo_att = titatt
RS2!fattori_di_rischio = fatdir
RS2!stato_att = "attiva"
Loop

grazie
Bruno Campanini
2024-01-12 15:20:11 UTC
Permalink
Post by Akery
buongiorno,
classe_attività cod_descr edifici e piani in uso idlocale
ALTRO 001 PTECA.I1 1I035
ALTRO 001 PTECA.I1 1I040
ALTRO 001 PTECA.I1 1I041
ALTRO 001 PTECA.I1 1I042
ALTRO 001 PTECA.I1 1I043
ALTRO 001 PTECA.I1 1I044
ALTRO 001 PTECA.I1 1I045
ALTRO 001 PTECA.I1 1I047
ALTRO 001 PTECA.I1 1I074
ALTRO 001 PTECB.T 036
ALTRO 001 PTECB.T 037
ALTRO 001 PTECB.T 038
ALTRO 001 PTECB.T 038
ALTRO 001 PTECB.T 042
ALTRO 001 PTECB.T 042
ALTRO 001 PTECB.T 042
ALTRO 001 PTECB.T 042
ALTRO 001 PTECC.1 101
ALTRO 001 PTECC.1 102
ALTRO 001 PTECC.1 105
ALTRO 001 PTECC.1 106
ALTRO 001 PTECC.1 109
ALTRO 001 PTECC.1 110
classe_attività,cod_descr,edifici e piani in uso, idlocale
ALTRO, 001, PTECA.I1, 1I035; 1I040; 1I041; 1I042; 1I043; 1I044; 1I045; 1I047;
1I074
ALTRO, 001, PTECB.T, 036; 037; 038; 042
ALTRO, 001, PTECC.1, 101; 102; 105; 106; 109; 110
ho scritto quanto segue ma non riesco a venirne a capo
Dim RS1 As Recordset, RS2 As Recordset
Dim SourceTable As String, TargetTable As String
'-- Definizioni --
SourceTable = "02_pre_att_sicura"
TargetTable = "sicura_attività"
'------------------
Set RS1 = CurrentDb.OpenRecordset(SourceTable, dbOpenDynaset)
Set RS2 = CurrentDb.OpenRecordset(TargetTable, dbOpenDynaset)
RS1.MoveFirst
Do Until RS1.EOF
claatt = RS1!classe_attività
coddes = RS1!cod_descr
ediepi = RS1![edifici e piani in uso]
idloca = RS1!idlocale
titatt = RS1!titolo_attività
fatdir = RS1![fattore di Rischio]
RS1.MoveNext
Do While RS1!classe_attività = claatt And RS1!cod_descr = coddes And
RS1![edifici e piani in uso] = ediepi
idloca = idloca & RS1!idlocale & "; "
RS1.MoveNext
Loop
RS2.AddNew
RS2![edificio_e_piano] = ediepi
RS2![id_locale] = idloca
RS2!classe_att = claatt
RS2!cod_descr = coddes
RS2!titolo_att = titatt
RS2!fattori_di_rischio = fatdir
RS2!stato_att = "attiva"
Loop
grazie
Prima di Loop:
RS2.Update

Se ancon non va carico i dati e rifaccio.

Bruno
Bruno Campanini
2024-01-12 18:00:53 UTC
Permalink
Post by Bruno Campanini
Post by Akery
buongiorno,
RS2.Update
Se ancon non va carico i dati e rifaccio.
Sostituisci i campi Fx con gli orribili nomi che hai dato
ai campi della tabella originale e otterrai una nuova tabella
(TT_NewTable) contenente quanto richiesto.
Ho chiamato T2 la tabella originale.
=============================================
Public Sub CreateNewTable()
Dim SQL As String

On Error Resume Next
DoCmd.DeleteObject acTable, "TT_NewTable"
On Error GoTo 0

SQL = "SELECT F1, F2, F3, F4 "
SQL = SQL & "INTO TT_NewTable FROM T2 "
SQL = SQL & "GROUP BY F1, F2, F3, F4 "
SQL = SQL & "ORDER BY F2, F3, F4;"
CurrentDb.Execute SQL

End Sub
==============================================

Bruno
james
2024-01-13 11:08:35 UTC
Permalink
Post by Akery
buongiorno,
classe_attività    cod_descr    edifici e piani in uso    idlocale
ALTRO        001        PTECA.I1    1I035
ALTRO        001        PTECA.I1    1I040
ALTRO        001        PTECA.I1    1I041
ALTRO        001    PTECA.I1    1I042
ALTRO        001    PTECA.I1    1I043
ALTRO        001    PTECA.I1    1I044
ALTRO        001    PTECA.I1    1I045
ALTRO        001    PTECA.I1    1I047
ALTRO        001    PTECA.I1    1I074
ALTRO        001    PTECB.T        036
ALTRO        001    PTECB.T        037
ALTRO        001    PTECB.T        038
ALTRO        001    PTECB.T        038
ALTRO        001    PTECB.T        042
ALTRO        001    PTECB.T        042
ALTRO        001    PTECB.T        042
ALTRO        001    PTECB.T        042
ALTRO        001    PTECC.1        101
ALTRO        001    PTECC.1        102
ALTRO        001    PTECC.1        105
ALTRO        001    PTECC.1        106
ALTRO        001    PTECC.1        109
ALTRO        001    PTECC.1        110
classe_attività,cod_descr,edifici e piani in uso,    idlocale
ALTRO,    001,    PTECA.I1, 1I035; 1I040; 1I041; 1I042; 1I043; 1I044;
1I045; 1I047; 1I074
ALTRO,    001,    PTECB.T, 036; 037; 038; 042
ALTRO,    001,    PTECC.1, 101; 102; 105; 106; 109; 110
ho scritto quanto segue ma non riesco a venirne a capo
Dim RS1 As Recordset, RS2 As Recordset
Dim SourceTable As String, TargetTable As String
'-- Definizioni --
SourceTable = "02_pre_att_sicura"
TargetTable = "sicura_attività"
'------------------
Set RS1 = CurrentDb.OpenRecordset(SourceTable, dbOpenDynaset)
Set RS2 = CurrentDb.OpenRecordset(TargetTable, dbOpenDynaset)
RS1.MoveFirst
Do Until RS1.EOF
claatt = RS1!classe_attività
coddes = RS1!cod_descr
ediepi = RS1![edifici e piani in uso]
idloca = RS1!idlocale
titatt = RS1!titolo_attività
fatdir = RS1![fattore di Rischio]
RS1.MoveNext
Do While RS1!classe_attività = claatt And RS1!cod_descr = coddes And
RS1![edifici e piani in uso] = ediepi
idloca = idloca & RS1!idlocale & "; "
RS1.MoveNext
Loop
RS2.AddNew
RS2![edificio_e_piano] = ediepi
RS2![id_locale] = idloca
RS2!classe_att = claatt
RS2!cod_descr = coddes
RS2!titolo_att = titatt
RS2!fattori_di_rischio = fatdir
RS2!stato_att = "attiva"
Loop
grazie
io interrogherei la SourceTable con una query con group by e order by
senza considerare idlocale

quindi farei due cicli
Do Until RS1.EOF

query = "SELECT .... from SourceTable where classe = '"& RS1!classe &"'
and descr= '"& RS1!descr &"' and edifici = '"& RS1!edifici &"' "

Set RS3 = CurrentDb.OpenRecordset(query, dbOpenDynaset)

elenco = ""

Do Until RS1.EOF
elenco = elenco & RS3!idlocale & ";"

RS3.MoveNext
loop

'adesso poi puoi aggiungere un record alla TargetTable inserendo nel
campo idlocale la variabile elenco magari con left se non vuoi vedere
l'ultimo punto e virgola
RS2!idlocale = left(elenco, len(elenco)-1)

RS1.MoveNext
loop
Bruno Campanini
2024-01-13 16:43:32 UTC
Permalink
Post by Akery
buongiorno,
classe_attività    cod_descr    edifici e piani in uso    idlocale
ALTRO        001        PTECA.I1    1I035
ALTRO        001        PTECA.I1    1I040
ALTRO        001        PTECA.I1    1I041
ALTRO        001    PTECA.I1    1I042
ALTRO        001    PTECA.I1    1I043
ALTRO        001    PTECA.I1    1I044
ALTRO        001    PTECA.I1    1I045
ALTRO        001    PTECA.I1    1I047
ALTRO        001    PTECA.I1    1I074
ALTRO        001    PTECB.T        036
ALTRO        001    PTECB.T        037
ALTRO        001    PTECB.T        038
ALTRO        001    PTECB.T        038
ALTRO        001    PTECB.T        042
ALTRO        001    PTECB.T        042
ALTRO        001    PTECB.T        042
ALTRO        001    PTECB.T        042
ALTRO        001    PTECC.1        101
ALTRO        001    PTECC.1        102
ALTRO        001    PTECC.1        105
ALTRO        001    PTECC.1        106
ALTRO        001    PTECC.1        109
ALTRO        001    PTECC.1        110
classe_attività,cod_descr,edifici e piani in uso,    idlocale
ALTRO,    001,    PTECA.I1, 1I035; 1I040; 1I041; 1I042; 1I043; 1I044;
1I045; 1I047; 1I074
ALTRO,    001,    PTECB.T, 036; 037; 038; 042
ALTRO,    001,    PTECC.1, 101; 102; 105; 106; 109; 110
ho scritto quanto segue ma non riesco a venirne a capo
Dim RS1 As Recordset, RS2 As Recordset
Dim SourceTable As String, TargetTable As String
'-- Definizioni --
SourceTable = "02_pre_att_sicura"
TargetTable = "sicura_attività"
'------------------
Set RS1 = CurrentDb.OpenRecordset(SourceTable, dbOpenDynaset)
Set RS2 = CurrentDb.OpenRecordset(TargetTable, dbOpenDynaset)
RS1.MoveFirst
Do Until RS1.EOF
claatt = RS1!classe_attività
coddes = RS1!cod_descr
ediepi = RS1![edifici e piani in uso]
idloca = RS1!idlocale
titatt = RS1!titolo_attività
fatdir = RS1![fattore di Rischio]
RS1.MoveNext
Do While RS1!classe_attività = claatt And RS1!cod_descr = coddes And
RS1![edifici e piani in uso] = ediepi
idloca = idloca & RS1!idlocale & "; "
RS1.MoveNext
Loop
RS2.AddNew
RS2![edificio_e_piano] = ediepi
RS2![id_locale] = idloca
RS2!classe_att = claatt
RS2!cod_descr = coddes
RS2!titolo_att = titatt
RS2!fattori_di_rischio = fatdir
RS2!stato_att = "attiva"
Loop
grazie
io interrogherei la SourceTable con una query con group by e order by senza
considerare idlocale
quindi farei due cicli
Do Until RS1.EOF
query = "SELECT .... from SourceTable where classe = '"& RS1!classe &"' and
descr= '"& RS1!descr &"' and edifici = '"& RS1!edifici &"' "
Set RS3 = CurrentDb.OpenRecordset(query, dbOpenDynaset)
elenco = ""
Do Until RS1.EOF
elenco = elenco & RS3!idlocale & ";"
RS3.MoveNext
loop
'adesso poi puoi aggiungere un record alla TargetTable inserendo nel campo
idlocale la variabile elenco magari con left se non vuoi vedere l'ultimo
punto e virgola
RS2!idlocale = left(elenco, len(elenco)-1)
RS1.MoveNext
loop
La via più semplice:
============================
Public Sub VBA_Sorting()
DoCmd.OpenTable ("T2")
DoCmd.SetOrderBy "F3 ASC, F4 ASC"
End Sub
=============================

Bruno
james
2024-01-16 20:55:18 UTC
Permalink
Salve a tutti,
mi chiedevo... se dovessi iniziare adesso a implementare un nuovo
gestionale quale programma/codice usereste?
Non credo access. Giusto?

Diciamo che servirebbe un gestionale che al 90% venga usato da pc, ma
un'interfaccia web almeno per visualizzare dei dati non dispiacerebbe.
Per le due situazioni si utilizzano soluzioni diverse (Es. Visual Studio
.NET per la parte web e FileMaker per la parte desktop) o ci sono
sistemi con cui fare tutto insieme?

Se questo newsgroup é ancora in piedi credo che comunque access venga
utilizzato ancora parecchio.. Vi siete trovati nella situazione di
dismettere un programma access? Qual é stata la motivazione principale?

Grazie mille per le vostre opinioni!
RobertoA
2024-01-17 06:54:20 UTC
Permalink
Post by james
Salve a tutti,
mi chiedevo... se dovessi iniziare adesso a implementare un nuovo
gestionale quale programma/codice usereste?
Non credo access. Giusto?
No
Post by james
Diciamo che servirebbe un gestionale che al 90% venga usato da pc, ma
un'interfaccia web almeno per visualizzare dei dati non dispiacerebbe.
Terminal server, browser web lato client
Post by james
Per le due situazioni si utilizzano soluzioni diverse (Es. Visual Studio
.NET per la parte web e FileMaker per la parte desktop) o ci sono
sistemi con cui fare tutto insieme?
Se vuoi confrontare Filemaker vs Access, credo che sia il primo a
prenderle, soprattutto quando andiamo in multiutenza (costi server db)
Prevenendo domande del tipo "..ma tu hai mai usato Filemaker.."
Si, fin da quando e' stato importato in italia
E ricordo ancora con piacere il regalo di una versione nfr, ad una delle
prime conferenze di presentazione, una splendida scatola con manuale e
cd-rom, la 1.0 per capirci, la tengo ancora con piacere sulla libreria
delle 'robe da pc'
Post by james
Se questo newsgroup é ancora in piedi credo che comunque access venga
utilizzato ancora parecchio.. Vi siete trovati nella situazione di
dismettere un programma access? Qual é stata la motivazione principale?
In piedi???
Guarda che qua c'abbiamo anche il videomaker che fa le gag con la
figlia, che ti credi, gli altri gruppi se le sognano ste robe qua
BFS
2024-01-17 09:39:47 UTC
Permalink
Post by james
Salve a tutti,
mi chiedevo... se dovessi iniziare adesso a implementare un nuovo
gestionale quale programma/codice usereste?
pyton
java script
php
flutter
Post by james
Non credo access. Giusto?
no, prodotto a mio avviso finito da almeno un decennio.
Post by james
Diciamo che servirebbe un gestionale che al 90% venga usato da pc, ma
un'interfaccia web almeno per visualizzare dei dati non dispiacerebbe.
Per le due situazioni si utilizzano soluzioni diverse (Es. Visual Studio
.NET per la parte web e FileMaker per la parte desktop) o ci sono
sistemi con cui fare tutto insieme?
esempio con flutter e db mysql in un unico linguaggio programmi windows
ios, android.
Post by james
Se questo newsgroup é ancora in piedi credo che comunque access venga
utilizzato ancora parecchio.. Vi siete trovati nella situazione di
dismettere un programma access? Qual é stata la motivazione principale?
siamo 4 gatti nostalgici ormai.
sul fatto di dismettere applicazioni desktop non mi è ancora capitato.
Girano ancora tutte una meraviglia...certo che si iniziano a livello
visivo a notare che sono prodotti "vecchi".

Ho invece dismesso da anni tutte le applicazioni che giravano su tablet
windows (reparto agenti, tecnici esterni etc) rimpiazzandole con
applicazioni Android.


BFS
Post by james
Grazie mille per le vostre opinioni!
Loading...