Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    45

    controllare se un determinato dato è presente in una array(funzione e ciclo while)

    Buongiorno a tutti,
    avrei bisogno di un piccolo aiutino, sto costruendo una piccola applicazione dove inserire vari articoli che andranno poi a comporre un template tipo, per velocizzare l'inserimento e la creazione di una scheda per una determinata persona.

    La tabella articoli ha circa 300 record ma, nella realtà quando verranno create le schede, gli articoli che solitamente devono essere visibili sono circa un 40. Per facilitare questa operazione e rendere più leggibile la scheda all'operatore ho pensato di creare un template così da estrarre solamente i record (articoli) che interesseranno in quel momento. Ho creato una tabella "Tbl_TEMPLATE" dove andrò a scrivere, separati da una virgola, gli ID degli articoli, es: "22,34,56,67,58,89,96". Questo campo poi mi servirà per estrarre gli articoli come sopra descritto ma, non è questo il problema.

    Per evitare che venga lasciato un ID orfano nella tabella template, eliminando un articolo, ho pensato di creare un controllo che vada a verificare la presenza dell'ID dello stesso, all'interno della tabella template e così bloccare il processo. Anticipo che i template possono essere anche essere più di uno.

    Per controllare ciò ho trovato una funzione che fa appunto questo:

    codice:
    Function InArray(MiaArray, CosaCercare)
      Dim i
        InArray = False
         If IsArray(MiaArray) And CosaCercare <> "" Then
           For i = 0 To UBound(MiaArray)
             If LCase(CosaCercare) = LCase(MiaArray(i)) Then
              InArray = True
             Exit For
           End If
         Next
      End If
    End Function
    Il problema lo incontro utilizzando la funzione all'interno del ciclo While, per verificare all'interno del campo TEMPLATE, di ogni singolo record presente nella tabella Tbl_TEMPLATE:

    codice:
       ID_DENOMINAZIONE = Request.QueryString("ID_DENOMINAZIONE")
    
       Sql = "SELECT * FROM Tbl_TEMPLATE ; "
               Set Rs = Server.CreateObject("ADODB.Recordset")
                     Rs.Open Sql, Conn, 1, 2
    
                     While Not Rs.Eof
                     
                     ARRTEMPLATE               = Split(RS("TEMPLATE"), ",")
                     TROVACORRISPONDENZA = ARRTEMPLATE
                     
                     If InArray(TROVACORRISPONDENZA, ID_DENOMINAZIONE) = True Then
                        Response.Write "Il record è relazionato....bla bla bla..."
                        Rs.Close
                        Set Rs = Nothing  
                        Conn.Close
                        Set Conn = Nothing
                        Response.End
                     End If   
                        Rs.MoveNext
    	            Wend               
                   
                        Rs.Close
                        Set Rs = Nothing

    Il problema è che se provo ad eliminare l'articolo che, nel campo della tabella template è posizionato come primo es: io cancello l'articolo con ID "15" e nel campo della tabella template ho "15,52,89,93" lo script trova l'ID nel capo e interrompe l'eliminazione, se invece elimino un ID che all'interno del campo della tabella template è posizionato da secondo in poi, l'eliminazione va a buon fine ed io invece vorrei che venisse fermato ugualmente, perchè gli sto passando un valore che è presente in tale campo.

    Dal tipo di comportamento pare che la funzione non riesca a "ciclare" su tutto il campo della tabella template.

    Avete qualche dritta da darmi? Anticipatamente ringrazio.
    *Tempista*

  2. #2
    forse sconvolgo un po' il ragionamento, ma se invece di fare una SELECT * e poi scremare, tu facessi una

    Sql= "SELECT * FROM tabella WHERE ID in(" & template & ")"

    ????

    avresti già il recordset pulito...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    45
    Ciao Optime,
    prima di tutto ti ringrazio per la gentile risposta e per avermi sconvolto un po' il ragionamento

    Non so se è corretto e se esiste un modo migliore per farlo ma sembra funzionare:

    codice:
        ID_DENOMINAZIONE = Request.QueryString("ID_DENOMINAZIONE")
    
        Sql = "SELECT DESCRIZIONE, TEMPLATE FROM Tbl_TEMPLATE;"
               Set Rs = Server.CreateObject("ADODB.Recordset")
                   Rs.Open Sql, Conn, 1, 2
                   While Not Rs.Eof
                   Sql2= "SELECT * FROM Tbl_DENOMINAZIONI WHERE "& ID_DENOMINAZIONE &" IN ("& Rs("TEMPLATE") &")"
                          Set Rs2 = Server.CreateObject("ADODB.Recordset")
                              Rs2.Open Sql2, Conn, 1, 2
                              If Not Rs2.Eof Then
                                 Response.Write "L'elemento &egrave; relazionato al Template ("& Rs("DESCRIZIONE") &"), se non si elimina il Template non &egrave; possibile procedere con la cancellazione."
                                 Rs2.Close
                                 Set Rs2 = Nothing  
                                 Conn.Close
                                 Set Conn = Nothing
                                 Response.End
                              End If
                                 Rs2.Close 
                                 Set Rs2 = Nothing
                   Rs.MoveNext
    	       Wend      
                   Rs.Close
                   Set Rs = Nothing
    Accetto volentieri consigli per snellire eventualmente il codice.
    *Tempista*

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 © 2026 vBulletin Solutions, Inc. All rights reserved.