Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    73

    ripetizione record (era tabelle incrociate)

    Ciao a tutti,
    su due tabelle:
    contatti(idcontatto,contatto, ecc..) e
    scadenze(idscadenza,data,ora,luogo,ecc..)
    faccio una query da cui ottengo l'elenco delle scadenze ordinate per data e poi per ora.
    l'utente mi passa una data dalla quale popolo un array:

    datainizio=request.form("datainizio")
    i=0
    Do while i<7
    array_date(i)=DateAdd("d", i, datainizio)
    i=i+1
    Loop

    poi costruisco una tabella in questo modo:
    <table><tr><td>contatto</td><td><%=array_date(0)%></td><td><%=array_date(1)%></td>...ecc</tr>

    <%
    [connessione, apertura rs]
    While Not rs.EOF
    indiceRs=rs.AbsolutePosition 'memorizzo la posizione del cursore
    contattoTemp=rs("contatto") 'memorizzo il contatto per questo record
    %><tr><td>
    <%=rs("contatto")%>
    </td><td>
    <%
    'porto rs all'inizio e per ogni contatto uguale scrivo
    'sulla stessa riga la scadenza
    rs.moveFirst
    for i=0 to rs.RecordCount
    if rs("data")=array_date(0) AND rs("contatto")=contattoTemp then
    response.write(rs("ora")&" ")
    end if
    rs.moveNext
    next
    %></td><td>
    <%
    rs.moveFirst
    for i=0 to rs.RecordCount
    if rs("data")=array_date(1) AND rs("contatto")=contattoTemp then
    response.write(rs("ora")&" ")
    end if
    rs.moveNext
    next
    %>
    ...ecc </tr>
    'poi dopo aver chiuso la riga porto nuovamente l'indice rs a 1
    'e muovo il recordset al record successivo per costruire una nuova riga

    rs.moveFirst
    rs.move(indiceRs)
    wend

    Il problema è che per un contatto che ha piu scadenze, scrive sulla stessa riga tutte le scadenze (ed è ok) ma ripete la riga per ogni record presente.
    es.
    contatto|01/12|02/12
    pinco__|10.00|11.00
    pallino_|____|12.00
    pinco__|10.00|11.00

    quello che vorrei fare è se per il contatto è già stata scritta la riga passa oltre)
    es.
    contatto|01/12|02/12
    pinco__|10.00|11.00
    pallino_|____|12.00

    qualche idea??

  2. #2
    Penso che le istruzioni per scrivere le righe, anzichè ripetute per quanti sono gli elementi dell'array, potrebbero essere riunite in un solo ciclo, in questo modo:

    codice:
    for k=0 to 6
    rs.moveFirst 
      for i=0 to rs.RecordCount
         if rs("data")=array_date(k) AND rs("contatto")=contattoTemp then
            response.write(rs("ora")&" ") 
         end if 
      rs.moveNext 
    next
    next

    Okkio! Ho ripreso e modificato il tuo codice SENZA TESTARLO. Provalo tu...

    E' nato www.lombardiamotori.it

    www.universocase.it: il primo portale italiano di annunci immobiliari gratuiti e autogestiti!

  3. #3
    Il controllo per evitare le ripetizioni potrebbe consistere nel memorizzare in un altro array, dimensionato così:

    dim controllo(rs.recordcount)

    il nome del contatto ogni volta che lo scrivi a inizio riga.

    Poi nel ciclo per scrivere le scadenze potresti annidare un ciclo per controllare se il contatto è già stato scritto.

    Vediamo.........
    E' nato www.lombardiamotori.it

    www.universocase.it: il primo portale italiano di annunci immobiliari gratuiti e autogestiti!

  4. #4
    Nell'insieme pensavo a una cosa del genere:
    codice:
    <% 
    [connessione, apertura rs] 
    k=0
    While Not rs.EOF 
    indiceRs=rs.AbsolutePosition 'memorizzo la posizione del cursore 
    contattoTemp=rs("contatto") 'memorizzo il contatto per questo record 
    controllo(k)=rs("contatto")
    check = true
    for j=0 to k-1
    if rs("contatto") = controllo(j) then
    check = false
    exit for
    next
    
    if check=true then
    %><tr><td> 
    <%=rs("contatto")
    %> 
    </td>
    <% 
    'porto rs all'inizio e per ogni contatto uguale scrivo 
    'sulla stessa riga la scadenza 
    
    for y=0 to 6 'se gli elementi dell'array-data erano 7.... 
    
    rs.moveFirst
     for i=0 to rs.RecordCount 
      if rs("data")=array_date(y) AND rs("contatto")=contattoTemp then 
       response.write("<td>"&rs("ora")&" </td>") 
      end if 
      rs.moveNext 
     next 
     
    next
    end if 
    %> 
    </tr>
    <%
    end if
    k=k+1 
    
    rs.moveNext
    next 
     
    'poi dopo aver chiuso la riga porto nuovamente l'indice rs a 1 
    'e muovo il recordset al record successivo per costruire una nuova riga 
    
    rs.moveFirst 
    rs.move(indiceRs) 
    wend
    ma è da testare per benino.......
    E' nato www.lombardiamotori.it

    www.universocase.it: il primo portale italiano di annunci immobiliari gratuiti e autogestiti!

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    73
    Ciao teorema,
    ho seguito il tuo schema ma ho avuto dei problemi di dimensionamento dell'array di controllo (che ho trasformato in array_contatti()).
    non mi è chiaro perchè non posso dimensionarlo così:
    dim array_contatti(int(rs.RecordCount))...accetta solo numeri!
    questa cosa mi ha fatto impazzire nella verifica delle condizioni, per ora ho risolto temporaneamente con un dim array_contatti(100) devo farlo altrimenti se non lo dichiaro l'array non viene popolato..
    e questo è il risultato:

    [connessione, apertura rs]
    '#####################compongo il link al dettaglio ore
    link1="<a href="&q&"scadenze_vedi.asp?scad="
    link2=q&" class="&q&"link6"&q&">"
    link3="</a> "

    dim array_contatti(100)
    k=0
    While Not rs.EOF
    indiceRs=rs.AbsolutePosition 'memorizzo la posizione del cursore
    contattoTemp=rs("contatto") 'memorizzo il contatto per questo record
    check = true
    array_contatti(k)=rs("contatto")
    '######################## controllo che il contatto non sia già stato scritto
    for j=0 to (k-1)
    if rs("contatto") = array_contatti(j) then check = false
    next

    '#########################se non è contatto ripetuto scrivo la riga
    if check=true then
    %><tr><td class="Stile5"><%=rs("contatto")&k%></td>
    <%
    for y=0 to 6 'la settimana di array-data
    %><td align="center" valign="middle" ><%
    'porto rs all'inizio e per ogni contatto uguale scrivo sulla stessa riga la scadenza
    rs.moveFirst
    for q=0 to rs.RecordCount
    if rs("data")=array_date(y) AND rs("contatto")=contattoTemp then
    response.write(link1&rs("idscadenza")&link2&Left(r s("ora"),5)&link3)
    end if
    rs.moveNext
    next
    %></td><%
    next
    %></tr><%
    end if
    '#####################chiudo la condizione per scrivere la riga

    k=k+1 'incremento l'indice dell'array contatti


    'dopo aver chiuso la riga porto nuovamente l'indice rs a 1
    'e muovo il recordset al record successivo per costruire una nuova riga
    rs.moveFirst
    rs.move(indiceRs)
    wend



    e così funziona!
    che dire...
    Grazie teorema...

  6. #6
    Per ridimensionare un array devi usare Redim Array(variabile) e non dim

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    73
    ho trovato l'inghippo per il dim array_contatti..

    "...l'istruzione dim accetta solo costanti[...]per associare un valore dinamico si utilizza l'istruzione di ridimensionamento REDIM..."

    che nel mio caso diventa

    dim array_contatti(2)'un numero qualsiasi

    totRecord=rs.RecordCount
    REDIM array_contatti(totRecord)

    dopo averli risolti i problemi sembrano sempre stupidi..

    Ciao

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    73
    ...oppss
    è arrivato prima deivnet..

  9. #9
    Sono contento che abbia risolto.

    Per l'array secondo me hai fatto bene:

    dim array(valore costante)
    e poi

    redim array(valore dinamico)
    E' nato www.lombardiamotori.it

    www.universocase.it: il primo portale italiano di annunci immobiliari gratuiti e autogestiti!

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.