Aiuto su Form basata su CrossTab

di il
5 risposte

Aiuto su Form basata su CrossTab

Ciao a tutti, sono nuovo del forum e arrugginito quanto a programmazione!!! Ho bisogno di aiuto.

Ho una tabella che contiene questi campi

PRODOTTO MAGAZZINO DATA (anno/settimana)
Biscotto 7 202012
Biscotto 10 202013
Biscotto 2 202014
etc.

Vorrei fare un Form dinamica che mi vada a visualizzare

Prodotto Magazzino Data
in maniera dinamica. Ad esempio se analizzo le ultime 13 settimane a partire da ora mi farà vedere dalla settimana 24 ad oggi mentre se voglio vedere 39 settimane mi fa vedere dalla settimana 50 del 2019 e cosi via.

La CrossTab è facile farla... ma si bisticcia con la Form in quanto i campi "fissi" li visualizzo, ma non riesco a rendere dinamico la parte PIVOT (quindi valore e settimana).

Vi posto il comando che ho scritto in VBA

Private Sub OPT_7_Click()
Dim sqla As String dichiarazione stringa query
Dim x, l As Integer dichiarazione contatori
Dim c_text, c_lbl As Control dichiarazione controlli da creare

Me.OPT_1.VALUE = 0 scelta optionbutton
Me.OPT_13.VALUE = 0 scelta optionbutton
Me.OPT_26.VALUE = 0 scelta optionbutton
Me.OPT_39.VALUE = 0 scelta optionbutton
'Me.OPT_7.VALUE = 0 scelta optionbutton
Me.OPT_F.VALUE = 0 scelta optionbutton

DoCmd.DeleteObject acQuery, "QueryFGHist" cancellazione vecchia query

sqla = "PARAMETERS [Like [Forms]]![MainForm]![C_STK_BU] Text ( 255 ), [Like [Forms]]![MainForm]![C_STK_LINE] Text ( 255 ), [Like [Forms]]![MainForm]![C_STK_PART] Text ( 255 ), [Like [Forms]]![MainForm]![C_STK_MC] Text ( 255 ), [Like [Forms]]![MainForm]![C_STK_MP] Text ( 255 ), [Like [Forms]]![MainForm]![C_STK_PLANT] Text ( 255 ), [Like [Forms]]![MainForm]![C_STK_STORE] Text ( 255 ) " _
& "TRANSFORM Sum([FG History].[FG Cons Quantity]) AS [SumOfFG Cons Quantity] " _
& "SELECT [FG History].[Product BU Code], Mid([Raw Line Code],6,4) AS LINE, [FG History].[Finished Good Code], [FG History].[Product Maturity Code], [FG History].[Macro Package Code], [FG History].Plant, [FG History].Store, [FG History].[FG Store Type Description], [FG History].[FG Avai Type Name] " _
& "FROM Week_7D INNER JOIN [FG History] ON Week_7D.YYYYWW = [FG History].[Hist Date] " _
& "GROUP BY [FG History].[Product BU Code], Mid([Raw Line Code],6,4), [FG History].[Finished Good Code], [FG History].[Product Maturity Code], [FG History].[Macro Package Code], [FG History].Plant, [FG History].Store, [FG History].[FG Store Type Description], [FG History].[FG Avai Type Name] " _
& "PIVOT [FG History].[Hist Date];" SQL
Set qdf = db.CreateQueryDef("QueryFGHist", sqla) creazione query

DoCmd.OpenForm "FormFGHist", acDesign apertura form in design view --- non riesco ad evitarlo
l = 12888 left
For x = 1 To 7
Set c_text = CreateControl("FormFGHist", acTextBox, acDetail, , "", l, 72, 1800, 288) creazione testo
Set c_lbl = CreateControl("FormFGHist", acLabel, acDetail, , "", l, 72, 1800, 288) creazione label
c_text.ControlName = "C_WK_" & x
c_lbl.ControlName = "L_WK_" & x
DoCmd.Save acForm, "FormFGHist"
l = l + 2016
Next x
DoCmd.Close acForm, "FormFGHist"

End Sub

Questo quanto fatto. Nelle proprietà del form ho inserito i record fissi della query ... ma non riesco ad associare la parte SETTIMANE/QTY.

Come faccio e come fare se, al variare del range, aumentano o diminuiscono le settimane a aumentare/diminuire questi campi?

Infine, il form è settato come DATASHEET VIEW e non come CONTINUOUS FORM.

Non so che altre info darvi se necessarie... in caso sono qua!

Grazie a chi mi potranno dare una mano.

Ciao

5 Risposte

  • Re: Aiuto su Form basata su CrossTab

    Non ho letto tutto, ma mi è bastato guardare che apri in modalità Struttura una maschera per creare controlli Runtime per fermarmi.
    A prescindere che non è una tecnica da usare per MILLE motivi, non si distribuisce MAI un ACCDB o MDB, e soprattutto non funzionerebbe mai con il Runtime.
    Detto ciò ogni volta che apri quella maschera Crea 7 controlli...? quindi dopo 4 volte che esegui questo codice ne hai 28...? No perchè va in errore prima dal momento che li hai nominati sempre fissi e sono sempre quei 7...
    Nella sostanza quel codice è insensato.

    E' evidente che prima di tutto devi usare la modalità ContinuosForm.
    Devi ragionare in modo diverso, io proverei a mettere N controlli già creati(50) nel Corpo della Form Continua, su Load della maschera aprendo in lettura il RecordsetClone leggi quante Settimane ha generato la QUery, sono il numero massimo di settimane da visualizzare, ovvero il numero di COnrtrolli da rendere visibili.
    Lo ricavi leggendo il Nome dei controlli Delle settimane e contandoli, oppure per differenza da una query con 0 Settimane contando i campi ed usandolo come costante.
    Quindi sempre su LOAD fai un ciclo sui controlli del Corpo e leddi dai campi del RSCLONE il nome dei Campi di CrossTab ed assegni ai controlli della Maschera, il ControlSource=NomeCampoSettimana, li rendi VISIBILI, li riposizioni e ridimensioni se questo è fonte di ottimizzazione grafica, alla fine fai il requery.
  • Re: Aiuto su Form basata su CrossTab

    Grazie per la risposta Alex. Due note:
    1- ho messo solo la prima parte del codice, alla chiusura cancello i controlli creati cosi ne genero sempre di nuovi
    2- non posso inserire N controlli in quanto l'analisi può andare da 1 settimana a 2 o più anni… quindi dovrei mettere da 1 a oltre 100 controlli da abilitare/disabilitare/ridimensionare ogni volta… quindi non so se sia la strada migliore
  • Re: Aiuto su Form basata su CrossTab

    emm980 ha scritto:


    Grazie per la risposta Alex. Due note:
    1- ho messo solo la prima parte del codice, alla chiusura cancello i controlli creati cosi ne genero sempre di nuovi
    2- non posso inserire N controlli in quanto l'analisi può andare da 1 settimana a 2 o più anni… quindi dovrei mettere da 1 a oltre 100 controlli da abilitare/disabilitare/ridimensionare ogni volta… quindi non so se sia la strada migliore
    Puoi metterne Fino a 754 controlli qual'è il problema... ma non crearli che non ha senso, tanto il limite fisico è il medesimo.
    Ho realizzato un GANTT con i controlli nativi di Access che ha 365 TextBox + 365Label + vari controlli tra corpo ed intestazione, che poi gestisco per Zoomare in caso passi alla visualizzazione giornaliera/settimanale/mensile/Trimestrale ecc... funziona tutto perfettamente anche a Runtime con ACCDE.

    Vedi tu.
    La soluzione giusta sarebbe una FlexGrid o una ListView... ma io non uso Activex.
  • Re: Aiuto su Form basata su CrossTab

    Cosa sono la FlexGrid o la ListView? Mi dai qualche link da leggere? Mi sa che sia la soluzione migliore...
  • Re: Aiuto su Form basata su CrossTab

    Sono Controlli Activex che però puoi usare solo se hai la Licenza di VB6, o la Developer che non esiste più, oltretutto non sono compatibili con la versione 64Bit, insomma lascia perderem l'uso di controlli non nativi con Access è un problema.
Devi accedere o registrarti per scrivere nel forum
5 risposte