Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    Accesso contemporaneo a record di DB Access

    Salve a tutti,
    avrei bisogno del vostro aiuto per realizzare quanto segue:
    in un applicativo gestionale in ASP e db Access degli operatori accedono (tramite login e pwd) in una sezione relativa a dei progetti.
    Ogni progetto ha una lista clienti visibile solo ad un utente di livello superiore.
    E qui chiedo il vostro aiuto: ogni operatore, accedendo nella sezione del progetto, dovrebbe tramite un pulsante avere la possibilità di autoassegnarsi un cliente (random), prendendo in gestione la pratica.

    Avevo pensato a due strade: un pulsante che ti porta all'interno della scheda cliente e, a quel punto, l'operatore salva immediatamente autoassegnandosi il cliente (forse secondo le mie capacità la meno "difficile" ma vorrei limitare le azioni degli operatori ad un semplice click...) oppure (ed è quella che ho già visto ma non ricordo dove e che mi piacerebbe intraprendere) al click del pulsante "RICHIEDI CLIENTE", automaticamente mi ritrovo il cliente nella mia lista clienti.

    Per entrambe le strade avrei bisogno però del vostro aiuto.

    P.S. Gli operatori saranno massimo una decina.

    Grazie mille


  2. #2
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,780
    è importante che tu decida, prima cosa, se l'assegnazione è casuale o selettiva.

    in ogni caso dovrai verificarne le disponibilità durante il tentativo di assegnazione.
    la metodologia potrebbe cambiare a seconda del contesto.
    in sostanza prima di assegnare il record lo identifichi come "libero" (secondo i tuoi criteri) e subito lo assegni ad un identificativo.

  3. #3
    Quote Originariamente inviata da Vincent.Zeno Visualizza il messaggio
    è importante che tu decida, prima cosa, se l'assegnazione è casuale o selettiva.

    in ogni caso dovrai verificarne le disponibilità durante il tentativo di assegnazione.
    la metodologia potrebbe cambiare a seconda del contesto.
    in sostanza prima di assegnare il record lo identifichi come "libero" (secondo i tuoi criteri) e subito lo assegni ad un identificativo.
    Ciao e grazie per l'aiuto.
    L'assegnazione avverrà in modo del tutto casuale dei soli records non ancora assegnati.
    Avevo pensato di effettuare prima di tutto una query che prenda in considerazione quei records che non siano ancora assegnati a nessun operatore (quindi il campo "username" nel db vuoto) e successivamente assegnarli in modo casuale.

    Grazie

  4. #4
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,780
    se va bene a te, va bene anche a me.
    l'unica variante che introdurrei (se ho capito bene il contesto) è la cronologia: prenderei prima il più "vecchio".

    come possiamo aiutarti?

  5. #5
    basta una UPDATE ... SELECT TOP 1 ... e assegni il primo libero (e se non metti ORDER BY assegna secondo un ordine che può anche essere casuale)

    ma... il titolo "che c'azzecca"?

  6. #6
    Non sono un esperto,
    sono un'autodidatta con molta voglia di imparare e quindi sii critico ma clemente .
    In giro ho trovato qualcosa che ho adattato per fare dei test ma non riesco a capire come andare oltre...

    Tramite un pulsante, la cui action mi rimanda nella stessa pagina, richiamo e visualizzo un record secondo i criteri discussi precedentemente ma, come posso automaticamente assegnare il record all'operatore?

    codice:
    <table cellpadding="0" cellspacing="0" border="0" id="table" class="sortable2">  <thead>
                <tr>
    <th><h3>Id</h3></th>
    <th><h3>Categoria</h3></th>
    <th><h3>Forma</h3></th>
    <th><h3>Ragione sociale</h3></th>
    <th><h3>Telefono</h3></th>
    <th><h3>Comune</h3></th>
    <th><h3>Via</h3></th>
    <th><h3>Cap</h3></th>
    <th><h3>Prov</h3></th>
    
    
    </tr>
    </thead>
            <tbody>
    <%
    Set Conn=Server.CreateObject("ADODB.Connection")
    strConn="driver={Microsoft Access Driver (*.mdb)}; "
    strConn=strConn & " DBQ=" & Server.MapPath("mdb-database/miodb.mdb")
    strConn=strConn & ";pwd=" & strCode
    Conn.Open strConn
    sql= "SELECT COUNT(*) FROM clienti WHERE username is null"
    
    
    Set RS = Conn.Execute(sql)
    
    
    dim max
    max = RS(0)
    
    
    if max=0 then 
    response.write("non ci sono clienti disponibili")
    else
    
    
    RS.Close
    Set RS = Nothing
    
    
    Set Rs = Server.CreateObject("ADODB.Recordset")
    Rs.Open "clienti", Conn
    
    
    Randomize()
    casual = Int(Rnd() * Max) 
    
    
    If Not Rs.EOF Then
    
    
    Rs.MoveFirst 
    Rs.Move casual
    
    
    categoria=RS.fields.item("categoria").value
    %>
    
    
    <tr bordercolor="#999999">
    <td width="80"><font face="tahoma" size="2"><%=rs(0)%></font></td>
    <td width="80"><font face="tahoma" size="2"><%=rs("CATEGORIA")%></font></td>
    <td width="80"><font face="tahoma" size="2"><%=rs("FORMA")%></font></td>
    <td width="80"><font face="tahoma" size="2"><%=rs("RAGIONE_SOCIALE")%></font></td>
    <td width="80"><font face="tahoma" size="2"><%=rs("TEL")%></font></td>
    <td width="80"><font face="tahoma" size="2"><%=rs("COMUNE")%></font></td>
    <td width="80"><font face="tahoma" size="2"><%=rs("VIA")%></font></td>
    <td width="80"><font face="tahoma" size="2"><%=rs("CAP")%></font></td>
    <td width="80"><font face="tahoma" size="2"><%=rs("PROV")%></font></td>
    </tr>
    
    
    
    
    <%
    
    
    end if
    end if
    
    
    Rs.Close
    Set Rs = Nothing
    %>
    </tbody>
    </table>
    Grazie mille

  7. #7
    Quote Originariamente inviata da optime Visualizza il messaggio
    basta una UPDATE ... SELECT TOP 1 ... e assegni il primo libero (e se non metti ORDER BY assegna secondo un ordine che può anche essere casuale)
    Yessssssssssssssssssss!!!

    A volte mi perdo in un bicchier d'acqua...

    Allora, ecco cosa ho fatto:

    1) Mi connetto al db effettuando la seguente query
    codice HTML:
    sql = "SELECT TOP 1 * FROM clienti WHERE username is null"

    2) Tramite form creo un pulsante "RICHIEDI CLIENTE" la cui action mi rimanda nella stessa pagina
    codice HTML:
    <form name="xxx" method="post" action="lista_clienti.asp?step=2&Id=<%=rs(0)%>">
    <input type="hidden" name="username" value="<%=str_users_name%>">
    <p><center><input type="submit" name="invio" value="RICHIEDI CLIENTE"> </center></p>

    3) Richiamo la variabile ed eseguo un UPDATE del campo USERNAME
    codice HTML:
    If Request.QueryString("step") = "2" Then
    
    Dim intCodice
    intCodice = Request.QueryString("Id")
    
    Set Conn=Server.CreateObject("ADODB.Connection")
    strConn="driver={Microsoft Access Driver (*.mdb)}; "
    strConn=strConn & " DBQ=" & Server.MapPath("mdb-database/miodb.mdb")
    strConn=strConn & ";pwd=" & strCode
    Conn.Open strConnsql = "SELECT * FROM clienti WHERE Id="&intCodice
    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.Open sql, conn ,1,3
    rs("username") =request.form("username")
    rs.update
    rs.Close
    set rs = Nothing
    conn.Close
    set conn = Nothing
    End if

    4) L'operatore troverà il cliente assegnato.

    Non so perché ma ero convinto fosse più complesso...
    Dovevo usare il cervello ed utilizzare un percorso logico/teorico e riportarlo nella pratica!

    Quote Originariamente inviata da optime Visualizza il messaggio
    ma... il titolo "che c'azzecca"?
    Effettivamente poco ma l'avevo riportato dalla precedente discussione.
    Lo modifico immediatamente.

    Grazie a Optime e Vincent.Zeno per i vostri input e la vostra disponibilità.
    E' stato un piacere.
    A presto


  8. #8
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,780
    forse sbaglio... ma dovresti fare una verifica.

    qui gli passi un record già definito?
    codice:
    intCodice = Request.QueryString("Id")
    se è così non va bene: in caso ci siano due operatori a fare la stessa operazione il secondo si "approprierebbe" del record già assegnato.

    ... ma forse ho letto male

  9. #9
    in effetti, io ho suggerito una update ... select top 1 ... (una sola operazione) proprio per evitare acquisizioni contemporanee

  10. #10
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,780
    dici così? (manco provata )

    codice:
    UPDATE clienti SET username = '"&username&"' WHERE ID = (SELECT TOP 1 ID FROM clienti WHERE username is null)
    ho scelto di selezionare l'id pensando che dopo si possa portare l'operatore ad una scheda lavoro specifica, ma è indifferente. la scelta giusta dipenderà poi da quel che si vuol fare dopo

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.