Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 9 su 9

Visualizzare un record tante volte quanto richiesto da un campo numerico

  1. #1
    L'avatar di nman
    nman ora è in linea Scribacchino
    Post
    1,671
    Like Inviati  
    0
    Like Ricevuti  
    4
    Ricollegandomi a questa discussione
    http://forum.masterdrive.it/access-7...88/#post328433

    solo a livello didattico per tenerci la mente occupata in queste calde serate di estate

    immaginiamo di avere questa tabella di nome T1 con i campi:
    -- C1 ------- C2 ---
    -- aaa ------ 2
    -- bbb ------ 3
    -- ccc ------ 1

    vogliamo arrivare con una ( o più ) query SQL a questo risultato
    -- aaa
    -- aaa
    -- bbb
    -- bbb
    -- bbb
    -- ccc

    come potremmo fare ??
    Ultima modifica di nman; 09-06-2015 22:24 

  2. #2
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Post
    6,235
    Like Inviati  
    20
    Like Ricevuti  
    11
    Ti ripropongo la risposta che ho dato su quella stessa discussione a cui ti riferisci.

    A mio avviso le strade sono due:

    1. Creare un recordset disconnesso (in memoria) e copiarvi i dati dei record che servono
    oppure
    2. Creare una tabella di appoggio, ed aprire un recordset su quella

    Se non vi sono particolari esigenze, io userei il 1° metodo, soprattutto se lavoro in LAN multi-utenza.

    Infine si passa il recordset al report.

    Ovviamente è possibile farlo solo da codice; è assolutamente impensabile poterlo fare solo con il linguaggio SQL.
    Osservazioni
    Naturalmente questo se si sta stampando un report, ma non è detto che la stessa soluzione sia fattibile in tutti gli scenari.
    Ad esempio, proprio la settimana scorsa ho dovuto affrontare la stessa problematica, ma in uno scenario completamente diverso: la stampa di etichette adesive (su stampante dedicata) gestita tramite l'automazione con il software BarTender che è un gran bel programma, ma che richiede di sottostare alle proprie regole.
    Nello specifico, partendo da un Ordine Fornitore si devono stampare <n> etichette per articolo tante quante sono le quantità ordinate (quindi esattamente l'esempio che hai fatto tu).
    Ma la soluzione adottata è completamente differente.
    ℹ️ Leggi di più su gibra ...

  3. #3
    L'avatar di nman
    nman ora è in linea Scribacchino
    Post
    1,671
    Like Inviati  
    0
    Like Ricevuti  
    4
    Io invece ( come Muttley ) penso che si possa fare solamente con SQL,

    naturalmente a livello didattico come da premessa perché la query andrebbe a "mangiare" le risorse del sistema

    tuttavia nella mia limitatezza ho uno scoglio .......
    .......riuscirei a gestire solamente dei numeri bassi di ripetizioni
    ( massimissimo 50 ma ragionevolmente una decina )
    perché si tratterebbe di estendere i campi in orizzontale e successivamente di fare una UNION

    ero pero curioso di sapere se ci sono altre idee che possano superare lo scoglio


    .

  4. #4
    L'avatar di willy55
    willy55 non è in linea Scribacchino
    Post
    730
    Like Inviati  
    0
    Like Ricevuti  
    0
    Se si è interessati a realizzarlo esclusivamente in linguaggio SQL, si impiegano due query fra loro annidate.
    Per cui se la Tabella1 ha i campi Codice e Qta, un esempio è il seguente:
    SELECT T2.*
    FROM Tabella1 AS T2 LEFT JOIN [ select (select count(*) from Tabella1 c2 where c2.Codice <=T2.Codice) as n
          from Tabella1 T2    
     ]. AS n ON n.n <=T2.Qta;
    
    come presentato anche (nei vincoli e limiti riportati) nel seguente link:
    Create duplicate records in a query for MS Access - ciiycode.com

    Comunque le valutazioni di Gibra sull'impiego di recordset in memoria o tabella di appoggio sono valide.
    ℹ️ Leggi di più su willy55 ...

  5. #5
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Post
    16,804
    Like Inviati  
    0
    Like Ricevuti  
    23
    Rimango dell'idea che una Tabella di APPOGGIO sia la soluzione più performante e controllabile... anche alla luce della non propria facilità di assegnazione dell'Oggetto Recordset alla proprietà dei Report che ben ricordavo:
    https://support.microsoft.com/en-us/kb/132881
    ℹ️ Leggi di più su @Alex ...

  6. #6
    L'avatar di muttley005
    muttley005 non è in linea Topo di biblioteca
    Post
    2,045
    Like Inviati  
    0
    Like Ricevuti  
    0
    io nell'altra discussione ho proposto una via alternativa a VBA (che ritengo comunque la via migliore)
    penso che la mia soluzione finale via SQL possa tranquillamente funzionare ... con le premesse fatte a cui manu05 non ha dato risposta però

    per questo 3D penso che la via di Willy sia la più semplice

  7. #7
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Post
    6,235
    Like Inviati  
    20
    Like Ricevuti  
    11
    Quote Originariamente inviato da willy55 Visualizza il messaggio
    Se si è interessati a realizzarlo esclusivamente in linguaggio SQL, si impiegano due query fra loro annidate.
    Create duplicate records in a query for MS Access - ciiycode.com
    Ottimo! L'ho appena testata ed è proprio perfetta per la mia routine di stampa delle etichette.
    E dato che io non ho problemi di sorta con i Report (uso ActiveReports), potrò eventualmente sfruttarla anche in quelli.

    E' proprio vero che non si finisce mai di imparare (per fortuna).

    Grazie 1.000.000 !

    ℹ️ Leggi di più su gibra ...

  8. #8
    L'avatar di nman
    nman ora è in linea Scribacchino
    Post
    1,671
    Like Inviati  
    0
    Like Ricevuti  
    4
    Si, ma non è tutto oro quello che luccica ........
    Qui va a finire che @Alex ( come al solito ) ha ragione.



    In effetti risolvere quel problema solo con SQL pone dei limiti in qualunque modo si tenti di rigirarlo:

    Se sfruttiamo le UNION query come immaginavo io all'inizio abbiamo il problema che
    ragionevolmente non possiamo fare UNION più di una cinquantina di volte.
    se ricordo bene c'è proprio una soglia oltre la quale si stoppa


    Il sistema linkato da Willy sembra brillante ma poi in effetti è un NON JOIN fra 2 tabelle
    pertanto il numero totale dei record disponibili è il prodotto cartesiano del numero di record della tabella
    - Quindi se la tabella dell'esempio ha 3 record
    e come nell'esempio voglio prelevare l'ultimo record 2 volte allora tutto fila liscio
    - ma se volessi visualizzare l'ultimo record 3000 volte allora NO, si ferma alla 3° visualizzazione
    perché la tabella ha solo 3 record


    Ci sarebbe anche la possibilità di usare una tabella "Muletto" creata ad hoc per fare il NON JOIN
    ma il limite sarebbe sempre il numero di record della tabella Muletto.


    Io ci sto anora pensando su.
    Mi sembra un giochino matematico di quando si andava a scuola

    .

  9. #9
    L'avatar di muttley005
    muttley005 non è in linea Topo di biblioteca
    Post
    2,045
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quote Originariamente inviato da nman Visualizza il messaggio
    ...
    Ci sarebbe anche la possibilità di usare una tabella "Muletto" creata ad hoc per fare il NON JOIN
    ma il limite sarebbe sempre il numero di record della tabella Muletto.
    ...
    che è poi quello che avevo proposto qui al post #8

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Risposte: 2
    Ultimo Post: 26-08-2019, 16:46
  2. Valore numerico ripetuto 3 volte
    Da ziopio nel forum Microsoft Excel
    Risposte: 1
    Ultimo Post: 25-10-2015, 08:02
  3. Unire tante celle in tante colonne in tanti fogli
    Da 25agosto nel forum Microsoft Excel
    Risposte: 9
    Ultimo Post: 01-07-2013, 18:11
  4. Risposte: 2
    Ultimo Post: 21-05-2010, 13:02
  5. visualizzare un campo di un record in una label
    Da panatronic nel forum ASP 3, ASP .Net
    Risposte: 1
    Ultimo Post: 12-05-2008, 15:27