Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    209

    [JSP] Visualizzare dati su due record successivi

    Ciao a tutti,
    sto cercando di creare una piccolo sito internet che mi permetta di visualizzare dei dati presente su un db.
    Questo DB non è modificabile nella struttura da sottoscritto, e quindi dopo svariati tentativi sono riuscito a comprendere il suo funzionamento.
    In pratica è una lavanderia che registra il passaggio in ingresso e in uscita della lavanderia tramite dei chip installati nei vari capi.
    Questi chip passano sotto delle antenne che poi registrano il passaggio su DB.
    Vi sono due tabelle che permettono la registrazione dei passaggi:

    La prima MOVGEN:
    [ANNO][STATO][NUMEROMOVIMENTO][TAGID][CODMERCE][CODCLI][CODSTRUTTURA]

    La seconda MOVDETT
    [NUMEROMOVIMENTO][ANNO][STATO][DATA]

    Le due tabelle si collegano tra loro tramite i campi [ANNO][NUMEROMOVIMENTO][STATO] delle due tabelle.

    La prima tabella tiene i dati generali del capo mentre la seconda registra i passaggi all'interno dell'azienda.
    Quindi un capo quando viene registrato in ingresso viene creato il record in MOVGEN con tutti i dati e viene creato un record in MOVDETT con tutti i dati e lo stato impostato a 1(ovvero sporco).
    Quando il capo è lavato e pronto per essere impacchettato viene passato sotto un'altra antenna e viene registrato un'altro record in MOVDETT con tutti i dati necessari e lo stato a 2 (Pulito)

    Il capo è registrato tramite un chip installato sui capi e l'id del chip viene tenuto nel campo [TAGID].

    [CODMERCE] contiene il tipo di capo (maglietta, pantalone, calzino,...).

    Ora finalmente arrivo al problema. In pratica una volta che seleziono l'utente desiderato devo visualizzare il dettaglio dei capi visualizzando quando entra e quando esce. Quindi devo presentare un record:
    [MERCE][DATA DI INGRESSO][DATA DI USCITA].

    Come si può vedere dalla struttura soprastante non esistono riferimenti al capo che possa metterli insieme direttamente.
    Infatti il collegamento tra le due tabelle avviene per i tre campi sopracitati e sono vincolati al singolo passaggio. Quindi un capo in ingresso viene registrato con un [NUMEROMOVIMENTO] differente rispetto all'uscita.

    Inoltre non è detto che la sequenza avvenga sempre in maniera corretta... Infatti potrebbe non funzionare un giorno la macchina che registra l'ingresso e quindi non verrebbe registrato l'ingresso al database ma solo l'uscita o viceversa...

    Insomma un bel pasticcio.

    Qualcuno è in grado di instradarmi un'attimo verso la soluzione migliore?

    io avrei pensato ad una query così:
    codice:
    SELECT     MOVGEN.CODCLI, MOVGEN.CODMERCE, MOVGEN.CMPNUM, MOVGEN.TAGID, MOVDETT.STATO, MOVDETT.DATA
    FROM         MOVGEN INNER JOIN
                          MOVDETT ON MOVGEN.NUMEROMOVIMENTO = MOVDETT.NUMEROMOVIMENTO AND MOVGEN.ANNO = MOVDETT.ANNO AND 
                          MOVGEN.STATO = MOVDETT.STATO
    WHERE CODCLI="xxxx" ORDER BY TAGID, DATA
    Solo che così mi crea l'elenco dei movimenti...
    come faccio a riunire tutto in unico record?

    Uso JSP con tomcat 7.0 e il DB e SQLSERVER 2008 EXPRESS.

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    209
    Io avrei abbozzato un'idea così:
    codice:
    try {
         DatabaseConnection connection = new HsqldbConnection("PRONTOEPULITO");
         Statement stm = connection.createStatement();
    
         sql = "select * from dbo.View_DettaglioIndumento "
                    + "where CLIEID=" + codCli + " "
                    + "AND CMPNUM=" + struttura + " "
                    + "AND TAGID='" + tagId + "' "
                    + "ORDER BY MOVDAT, STATO DESC";
    
         ResultSet rs = stm.executeQuery(sql);
    
         boolean controlSingleLine = false;
         int primaRiga = 0;
    
         while (rs.next()) {
                verifica = 0;
                //Utilizzo la variabile Prima riga per verificare se sto leggendo una record
                //nuovo o ne sto leggendo uno successivo e verificare che si tratti dello stesso
                //capo
                //Setto le variabili con i valori correnti
                if (primaRiga == 0) {
                      corr_TagId = rs.getString("TAGID");
                      corr_NomeMerce = rs.getString("MERCE");
                      corr_MovDat = sdf.format(rs.getDate("MOVDAT"));
                      corr_Stato = rs.getInt("STATO");
                } 
                //Mi sposto al record successivo per memorizzare le variabili del recor
                //successivo e effettuare così i confronti successivi
                else {
                       prev_TagId = corr_TagId;
                       prev_NomeMerce = corr_NomeMerce;
                       prev_MovDat = corr_MovDat;
                       prev_Stato = corr_Stato;
    
                       corr_TagId = rs.getString("TAGID");
                       corr_NomeMerce = rs.getString("MERCE");
                       corr_MovDat = sdf.format(rs.getDate("MOVDAT"));
                       corr_Stato = rs.getInt("STATO");
                }
                //Comincio i controlli sui record...
                //il ResultSet arriva alla fine con la variabile fine a true non viene
                //effettuato più nessun controllo e tutto esce
                //Con la variabile controlSingleLine si controlla se vi è qualche capo che
                //manca di ingresso o uscita
                if (primaRiga == 1) {
                    controlSingleLine = true;
    
                    if (prev_Stato == 20) {
    
                            if (corr_Stato == 10) {
                                  record = "<tr class=\"tr\">\n"
                                        + "<td>"
                                        + corr_TagId
                                        + "</td>\n"
                                        + "<td>"
                                        + corr_NomeMerce
                                        + "</td>\n"
                                        + "<td>"
                                        + prev_MovDat
                                        + "</td>\n"
                                        + "<td>"
                                        + corr_MovDat
                                        + "</td>\n"
                                        + "</tr>\n";
    
                                        out.print(record);
                                        controlSingleLine = false;
                                        primaRiga=0;
    
                              }
                          } else {
                              if (controlSingleLine == true) {
                                    if (corr_Stato == 20) {
                                        record = "<tr class=\"tr\">\n"
                                        + "<td>"
                                        + corr_TagId
                                        + "</td>\n"
                                        + "<td>"
                                        + corr_NomeMerce
                                        + "</td>\n"
                                        + "<td>"
                                        + "N.D"
                                        + "</td>\n"
                                        + "<td>"
                                        + prev_MovDat + " (" + prev_Stato + ")"
                                        + "</td>\n"
                                        + "</tr>\n";
    
                                        out.print(record);
                                        controlSingleLine = false;
                                        //primaRiga=0;
    
                                   } else {
                                        record = "<tr class=\"tr\">\n"
                                        + "<td>"
                                        + prev_TagId
                                        + "</td>\n"
                                        + "<td>"
                                        + prev_NomeMerce
                                        + "</td>\n"
                                        + "<td>"
                                        + prev_MovDat + " (" + prev_Stato + ")"
                                        + "</td>\n"
                                        + "<td>"
                                        + "N.D."
                                        + "</td>\n"
                                        + "</tr>\n";
    
                                        out.print(record);
                                        controlSingleLine = false;
                                        //primaRiga=0;
    
                                   }
                               }
                          }
      
                     } else {
                          primaRiga = 1;
                }
         }
          stm.close();
         // close the database connection
         connection.close();
    } catch (Exception cnfex) {
           cnfex.printStackTrace();
           out.println(cnfex);
    }
    In pratica utilizzo una variabile primaRiga per vedere se il record che vado a leggere è il successivo o il primo.
    In pratica, al primo ingresso primaRiga è 0 allora vengono solo memorizzate nelle variabili i valori del record e viene portata primaRiga a 1.
    Al secondo record con primaRiga=1 vengono impostate le variabili prev_[nomevariabile] con le variabili corr_ del record precedente risettando poi le variabili corr_ con i nuovi valori del record.
    Inizio i controlli:
    - se lo stato del record precedente è 20 e quello del record attuale è 10 (in pratica ingresso e uscita) allora stampami il record con quei valori.
    - altrimenti se controlSingleLine non viene modificato allora vorrà dire che quel record è singolo non è registrato o un movimento in ingresso o uno in uscita. Faccio un controllo per vedere lo stato. Se lo stato è su 20 allora mi scrivi il record lasciando libero il dato in uscita. Se è 10 lasci libero il conto in ingresso.
    la variabile controlSingleLine diventa true ad ogni ciclo while ma appena viene scritto un record ritorna a false,
    la variabile primaRiga va a 1 se al primo giro è 0 o se viene eseguito qualsiasi controllo...

    Così sembrerebbe leggermente funzionante.
    Se la sequenza è giusta lui la trascrive giusta... Il problema è quando vi è un record fuori sequenza.
    In questo caso comincia a perdersi...
    su una query, per esempio ho una sequenza così: 20-10-10-10-20-20-10
    L'algoritmo mette nella sequenza giusta i primi 3 record. Dal quarto si perde....
    Qualche buona anima che sa farmi capire dove sbaglio?

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    209
    Sembra che ci sia riuscito! vi posto il codice casomai qualcuno abbia avuto i miei stessi problemi...
    codice:
    try {
        DatabaseConnection connection = new HsqldbConnection("PRONTOEPULITO");
        Statement stm = connection.createStatement();
    
        sql = "select * from dbo.View_DettaglioIndumento "
             + "where CLIEID=" + codCli + " "
             + "AND CMPNUM=" + struttura + " "
             + "AND TAGID='" + tagId + "' "
             + "ORDER BY MOVDAT, STATO DESC";
    
        ResultSet rs = stm.executeQuery(sql);
    
        boolean controlSingleLine = false;
        int primaRiga = 0;
        int i = 1;
        while (rs.next()) {
     
            //Utilizzo la variabile Prima riga per verificare se sto leggendo una record
            //nuovo o ne sto leggendo uno successivo e verificare che si tratti dello stesso
            //capo
            //Setto le variabili con i valori correnti
            if (primaRiga == 0) {
                corr_TagId = rs.getString("TAGID");
                corr_NomeMerce = rs.getString("MERCE");
                corr_MovDat = sdf.format(rs.getDate("MOVDAT"));
                corr_Stato = rs.getInt("STATO");
            } 
            //Mi sposto al record successivo per memorizzare le variabili del recor
            //successivo e effettuare così i confronti successivi
            else {
                 prev_TagId = corr_TagId;
                 prev_NomeMerce = corr_NomeMerce;
                 prev_MovDat = corr_MovDat;
                 prev_Stato = corr_Stato;
    
                 corr_TagId = rs.getString("TAGID");
                 corr_NomeMerce = rs.getString("MERCE");
                 corr_MovDat = sdf.format(rs.getDate("MOVDAT"));
                 corr_Stato = rs.getInt("STATO");
             }
             //Comincio i controlli sui record...
             //il ResultSet arriva alla fine con la variabile fine a true non viene
              //effettuato più nessun controllo e tutto esce
              //Con la variabile controlSingleLine si controlla se vi è qualche capo che
              //manca di ingresso o uscita
              
              if (primaRiga == 1) {
                  controlSingleLine = true;
                       if ((prev_Stato == 20) && (corr_Stato == 10)) {
                             record = "<tr class=\"tr\">\n"
                                  + "<td>"
                                  + i + ") "
                                  + "</td>\n"
                                  + "<td>"
                                  + corr_TagId
                                  + "</td>\n"
                                  + "<td>"
                                  + corr_NomeMerce
                                  + "</td>\n"
                                  + "<td>"
                                  + prev_MovDat
                                  + "</td>\n"
                                  + "<td>"
                                  + corr_MovDat
                                  + "</td>\n"
                                  + "</tr>\n";
    
                              out.print(record);
                              controlSingleLine = false;
                              primaRiga = 0;
                              i++;
                       } else {
                               if (controlSingleLine == true) {
                                      if (prev_Stato == 20) {
                                             record = "<tr class=\"tr\">\n"
                                                  + "<td>"
                                                  + "</td>\n"
                                                  + "<td>"
                                                  + corr_TagId
                                                  + "</td>\n"
                                                  + "<td>"
                                                  + corr_NomeMerce
                                                  + "</td>\n"
                                                  + "<td>"
                                                  + prev_MovDat 
                                                  + "</td>\n"
                                                  + "<td>"
                                                  + "N.D"
                                                  + "</td>\n"
                                                  + "</tr>\n";
    
                                             out.print(record);
                                             controlSingleLine = false;
                                             
                                         } else {
                                              record = "<tr class=\"tr\">\n"
                                                   + "<td>"
                                                   + i + ") "
                                                   + "</td>\n"
                                                   + "<td>"
                                                   + prev_TagId
                                                   + "</td>\n"
                                                   + "<td>"
                                                   + prev_NomeMerce
                                                   + "</td>\n"
                                                   + "<td>"
                                                   + "N.D."
                                                   + "</td>\n"
                                                   + "<td>"
                                                   + prev_MovDat 
                                                   + "</td>\n"
                                                   + "</tr>\n";
    
                                              out.print(record);
                                              controlSingleLine = false;
                                              i++;
                                         }
                                   }
                             }
    
                       } else {
                             primaRiga = 1;
                       }
                  }
                  stm.close();
                  // close the database connection
                 connection.close();
            } catch (Exception cnfex) {
                    cnfex.printStackTrace();
                    out.println(cnfex);
            }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.