Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Controllo dati

  1. #1

    Controllo dati

    Salve ragazzi,

    ho un problema su un controllo dati in una tabella.
    Dunque vi spiego il problema:
    Ho una tabella dove ho un campo chiamato NumArchivio dove, inserisco dei numeri progressivi tramite un piccolo contatore del tipo n=n+1 (ovviamente non è una chiave primaria) e fin qui tutto ok.
    Poi dovrei poter cancellare un record, mantenere comunque gli altri dati e in futuro dovrei poter riutilizzare lo stesso record cancellato prima.

    Faccio un esempio pratico
    Questa è la tabella con i dati inseriti
    Id Nome Cognome NumArchivio
    1 pippo pippo 1
    2 pluto pluto 2
    3 topo lino 3

    Questa è la tabella dopo cancellato un record
    Id Nome Cognome NumArchivio
    1 pippo pippo 1
    3 topo lino 3

    Quindi quando vado ad aggiungere un nuovo record mi darà l'Id 4 , il nuovo Nome e Cognome e NumArchivio 4
    Quindi normalmente funzionante ma prima di aggiungere un nuovo record mi occorrerebbe di controllare se il NumArchivio 2 esista o meno e quindi aggiungere, al posto del vecchio NumArchivio 2, il nuovo NumArchivio 2

    Forse è un pò confusa come cosa, ma spero possiate capire il problema posto.

    Ho provato a prendere i dati con questa stringa SQL e delle condizioni if per il controllo, ma non mi stampa niente a schermo (presa da un altro forum di un ragazzo con un problema simile al mio)
    Codice PHP:
    Sql "SELECT MAX(NumArchivio) AS maximo FROM Polizze"
    Set rsArchivio Server.CreateObject("ADODB.RecordSet")
    rsArchivio.Open SqlMyConn33
    for num 0 to maximo
    if not rsArchivio.EOF then
    if rsArchivio("NumArchivio") <> num then
    if rsArchivio("NumArchivio") = (num 1then
    num 
    num 1
    rsArchivio
    .MoveNext
    else
    Response.Write num "-"
    end if
    else
    rsArchivio.MoveNext
    end 
    If
    end if
    next
    set rsArchivio 
    Nothing 
    Grazie in anticipo.
    .::LTADM::.

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Verifica con un write cosa stamperebbe il for num = 1 to maximo se ti stampa 1,2,3 allora dentro al ciclo potresti fare cosi if rsArchivio("NumArchivio") <> num then exit for in sintesi quando non trova il 2 esce dal ciclo pertanto sai che quel numero è "disponibile".
    No sono certo di quanto ho detto ma provare non costa nulla.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Originariamente inviato da cavicchiandrea
    Verifica con un write cosa stamperebbe il for num = 1 to maximo se ti stampa 1,2,3 allora dentro al ciclo potresti fare cosi if rsArchivio("NumArchivio") <> num then exit for in sintesi quando non trova il 2 esce dal ciclo pertanto sai che quel numero è "disponibile".
    No sono certo di quanto ho detto ma provare non costa nulla.
    Bè sicuramente grazie, adesso provo e ti faccio sapere.
    .::LTADM::.

  4. #4
    Allora, appena provato con il tuo modo e senza, incollo il codice e poi spiego

    Codice PHP:
    <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
    <%
    Response.Buffer True%>


    <!
    DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <
    html xmlns="http://www.w3.org/1999/xhtml">
    <
    head>
    <
    meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <
    title>Documento senza titolo</title>
    </
    head>
    <%
    Sql "SELECT MAX(NumArchivio) AS maximo FROM qryPolizze"
    Set rsArchivio Server.CreateObject("ADODB.RecordSet")
    rsArchivio.Open SqlMyConn33
    %>
    <
    body>
    <%
    'maximo = rsArchivio("maximo")
    %>
    <%
    For num = 1 To maximo
    If Not rsArchivio.EOF then
    If rsArchivio("NumArchivio") <> num then
    '
    exit For
    Response.Write(num)
    Response.Write rsArchivio("maximo")
    Else
    rsArchivio.MoveNext
    Response
    .Write(num)
    End If
    End If
    Next
    %>
    </
    body>
    </
    html
    Dunque, vado a fare un write mettendo soltanto Response.Write rsArchivio("maximo") mi restitutisce 3 che è il valore più alto, perfetto.
    Se stampo num, mi scrive 123 e ok anche qui.
    Se metto Exit For non stampa comunque niente a video sia con la riga
    Codice PHP:
    'maximo = rsArchivio("maximo") 
    commentata o meno.
    Se metto così come vedi il codice a schermo non stampa assolutamente niente.
    Se tolgo il commento a
    Codice PHP:
    'maximo = rsArchivio("maximo") 
    mi esce fuori
    Codice PHP:
    ADODB.Recordset error '800a0cc1' 

    Item cannot be found in the collection corresponding to the requested name or ordinal

    /public/
    pippo.aspline 23 
    dove la linea 23 è
    Codice PHP:
    If rsArchivio("NumArchivio") <> num then 
    e comunque num non dovrebbe contenermi tutti i record, ma solo l'ultimo + 1 o il mancante, ovvero se ho tre record (1,2,3) mi dovrebbe stampare solo 4 in un campo di testo mentre, se ho 1, 3 mi dovrebbe stampare il 2.

    Grazie grazie
    .::LTADM::.

  5. #5
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    A dire la verità ho qualche dubbio che sposta fare bisognerebbe lavorarci su, sicuramente manca un wihle che estrappoli tuo i record, e resto dell'idea che exit for serva
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  6. #6
    ma cos'è che devi fare? trovare il primo buco disponibile?

  7. #7
    Originariamente inviato da optime
    ma cos'è che devi fare? trovare il primo buco disponibile?
    Ciao Optime,

    avrei bisogno di prendere da una tabella dei numeri progressivi e controllarne l'esistenza di ognuno.
    Il meccanismo dovrebbe essere questo:
    controllo se ci sono tutti i numeri, se ci sono scrivo l'ultimo numero più uno in un campo di testo.
    Mentre al primo che manca, scrivo l'ultimo numero trovato più uno nello stesso campo di testo.
    Ovvero:
    mi trovo 1,2,3,4 scrivo 5 nel campo di testo
    se invece mi dovessi trovare 1,2,3,5 nel campo di testo scrivo 4

    Grazie
    .::LTADM::.

  8. #8
    quindi il primo disponibile, che sia un buco o uno nuovo. di quanti numeri stiamo parlando? decine, centinaia, migliaia, milioni, miliardi?

  9. #9
    Originariamente inviato da optime
    quindi il primo disponibile, che sia un buco o uno nuovo. di quanti numeri stiamo parlando? decine, centinaia, migliaia, milioni, miliardi?
    migliaia, non credo si superino le 2000 unità
    .::LTADM::.

  10. #10
    ok, quindi puoi fare così

    1. crei una tabella di db (chiamala NUMERI) che contenga tutti i numeri in sequenza da 1 a 2000 o fino a dove vuoi tu (la fai in excel e poi la incolli nel db)
    2. fai una query così

    SELECT TOP 1 TN.Numero AS mioNumero
    FROM NUMERI TN LEFT JOIN qryPolizze TP ON TN.Numero=TP.NumArchivio
    WHERE TP.NumArchivio IS NULL
    ORDER BY TN.Numero

    3. RsArchivio("mioNumero") sarà il tuo nuovo numero, buco o nuovo che sia

    fammi sapere

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.