Account utente possono accedere allo stesso database piu volte

martedì 05 gennaio 2010 - 22.24

za5h Profilo | Newbie

Salve a tutti
Ho un database fatto in access versione 2003. Avrei dei quesiti da porvi.
Come riesco ad aggiornare una maschera la quale riporta tutti i record presenti nella tabella con cui è collegata, ma che in verità me ne compaiono un 5 record, essendo bassa come maschera, ma proprietà della maschera, maschera continua? Mi spiego meglio. Gli utenti che aprono la stessa maschera dovrebbero registrare dei documenti e dargli un numero di protocollo, e fino a qua, nulla di strano, ma il problema nasce quando la stessa maschera si usa da più utenti contemporaneamente. Non è un problema di uso di record ma solo il fatto che user_1 che registra un documento con protocollo 15 diciamo, e user_2 che ha la stessa maschera aperta, che vuole registrare un nuovo documento, se la maschera non si aggiorna, cosa che vorrei che fosse fatta in automatico, non vedra il record nuovo (l’ultimo) che user _1 ha inserito, e cosi darà lo stesso protocollo a due documenti diversi. Vorrei anche riuscire a dare il numero di protocollo in automatico, e la cosa si risolverebbe con un campo contatore. Ma non è questo che voglio perché se entro dentro la maschera e inizio a registrare, poi lascio a metà, per diversi motivi, e poi chiudo, quel nr contatore sarà gia perso, e non avrò più protocolli consecutivi. Un’altra cosa nel database, visto che stavo parlando degli account, come mai riesco ad entrare con lo stesso account in questo database anche più volte. In realtà al momento ho 5 account, creati con impostazione guidata account, e dato poi le autorizzazioni appropriate. Gli account sono stati testati sulla stessa machina, non in diversi. Sarà questo il fatto di entrare con lo stesso account quante volte voglio?
Chi mi può aiutare, si faccia avanti per favore.



alx_81 Profilo | Guru

>Salve a tutti
Ciao e benvenuto in dotnethell

>Come riesco ad aggiornare una maschera la quale riporta tutti
>i record presenti nella tabella con cui è collegata, ma che in
>verità me ne compaiono un 5 record, essendo bassa come maschera,
>ma proprietà della maschera, maschera continua?


>Gli utenti che aprono la stessa maschera dovrebbero registrare
>dei documenti e dargli un numero di protocollo, e fino a qua,
>nulla di strano, ma il problema nasce quando la stessa maschera
>si usa da più utenti contemporaneamente. Non è un problema di
>uso di record ma solo il fatto che user_1 che registra un documento
>con protocollo 15 diciamo, e user_2 che ha la stessa maschera
>aperta, che vuole registrare un nuovo documento, se la maschera
>non si aggiorna, cosa che vorrei che fosse fatta in automatico,
>non vedra il record nuovo (l’ultimo) che user _1 ha inserito,
>e cosi darà lo stesso protocollo a due documenti diversi. Vorrei
>anche riuscire a dare il numero di protocollo in automatico,
>e la cosa si risolverebbe con un campo contatore. Ma non è questo
>che voglio perché se entro dentro la maschera e inizio a registrare,
>poi lascio a metà, per diversi motivi, e poi chiudo, quel nr
>contatore sarà gia perso, e non avrò più protocolli consecutivi.
In questo caso puoi pensare di fare un controllo prima dell'inserimento di ogni utente. Se esiste già quel numero di protocollo che l'utente sta per immettere allora torni un errore da gestire con un messaggio tipo "Numero già utilizzato". Il controllo lo puoi fare con una semplice SELECT oppure facendo un indice univoco sul campo numero di protocollo, ma quest'ultima soluzione la puoi fare solo se il numero di protocollo (eventualmente insieme ad altri campi) definisce l'univocità della riga.
Con la select puoi controllare l'esistenza di un altro record con quel numero di protocollo, con l'univocità all'inserimento si verifica in automatico un errore da gestire poi applicativamente. Per proporre il numero di protocollo potresti pensare di fare una MAX del protocollo + 1, facendo attenzione che nel caso in cui non ce ne siano ancora devi mettere 1. Ovviamente il controllo descritto in precedenza (con uno dei due metodi a tua scelta) rimane.

>Un’altra cosa nel database, visto che stavo parlando degli account,
>come mai riesco ad entrare con lo stesso account in questo database
>anche più volte. In realtà al momento ho 5 account, creati con
>impostazione guidata account, e dato poi le autorizzazioni appropriate.
>Gli account sono stati testati sulla stessa machina, non in diversi.
>Sarà questo il fatto di entrare con lo stesso account quante
>volte voglio?
Un utente può accedere n volte ad un database, non è che ad un utente corrisponde una connessione. Ne può fare molteplici. Chiunque si connetta al database può scegliere di usare uno degli n utenti forniti.
--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

za5h Profilo | Newbie

Grazie alx_81

Realmente al fatto di rendere il protocollo unico, non l’ho pensata, anche se sarebbe giusto che non ci siano 2 protocolli uguali. Ma come ti dicevo, il problema nasce quando un utente comincia a registrare un documento, e lo lascia a metà. Allora possono verificarsi 2 casi, il primo quando vuoi chiudere la maschera dell’inserimento, e il database non ti fa uscire; il secondo caso, quando ti fa uscire dalla maschera ma ti avvisa che non salverà il record. Ovviamente la seconda è meglio, ma non succede sempre cosi quando si lascia la registrazione a metà, perché i campi (non tutti, ma quasi) sono obbligatori e non possono essere lasciati vuoti. Poi, se mi potresti spiegare meglio la funzione del controllo dei protocolli con la SELECT, magari facendomi un’esempio pratico con la stringa se necessario.
Per quando riguarda l’utente, non sono riuscito a capire che cosa intedevi. Cmq se io ho il USER_1 e il USER_2, posso aprire il database anche 10 volte consecutivamente con gli stessi 2 account, Mi spiego, se apro il database con user_1, e lo lascio aperto, poi apro di nuovo il database posso cmq di nuovo inserire user_1, e posso ripetere l’operazione n volte. Quello che voglio io, e che dopo che user_1 è entrato, non deve riuscire più ad entrare nel database, perché il database è gia aperto da questo utente; mi dovrebbe come messaggio: UTENTE ATTIVO o qualcosa del genere, no? Che ne dici?

alx_81 Profilo | Guru

>Realmente al fatto di rendere il protocollo unico, non l’ho pensata,
>anche se sarebbe giusto che non ci siano 2 protocolli uguali.
>Ma come ti dicevo, il problema nasce quando un utente comincia
>a registrare un documento, e lo lascia a metà. Allora possono
>verificarsi 2 casi, il primo quando vuoi chiudere la maschera
>dell’inserimento, e il database non ti fa uscire; il secondo
>caso, quando ti fa uscire dalla maschera ma ti avvisa che non
>salverà il record. Ovviamente la seconda è meglio, ma non succede
>sempre cosi quando si lascia la registrazione a metà, perché
>i campi (non tutti, ma quasi) sono obbligatori e non possono
>essere lasciati vuoti.
Ma cosa c'entra? In quei casi ancora non hai salvato la pratica, e quindi non conta quello che stai inserendo ai fini del controllo sul protocollo.
Il controllo va fatto solo quando premi "salva" e in quel caso vai a lanciare l'inserimento. Con l'indice univoco otterrai un errore e lo dovrai gestire con del codice per tornare un messaggio di errore se non vuoi ottenere quello standard. L'errore che ti si verifica previene ogni inserimento, quindi non succede nulla sui dati.

>Poi, se mi potresti spiegare meglio la
>funzione del controllo dei protocolli con la SELECT, magari facendomi
>un’esempio pratico con la stringa se necessario.
Semplice, quando vai a fare l'insert su database, da codice, fai prima una SELECT nomecampo FROM tabella WHERE protocollo = [parametro] e poi passi al parametro il valore che stai per inserire. Se ottieni record allora non puoi inserire e ritorni un messaggio di errore, viceversa sì. Ma se fai l'indice, fai senza il controllo, l'errore lo ottieni comunque. Va solo gestito a modo da codice.

>Per quando riguarda l’utente, non sono riuscito a capire che
>cosa intedevi. Cmq se io ho il USER_1 e il USER_2, posso aprire
>il database anche 10 volte consecutivamente con gli stessi 2
>account, Mi spiego, se apro il database con user_1, e lo lascio
>aperto, poi apro di nuovo il database posso cmq di nuovo inserire
>user_1, e posso ripetere l’operazione n volte. Quello che voglio
>io, e che dopo che user_1 è entrato, non deve riuscire più ad
>entrare nel database, perché il database è gia aperto da questo
>utente; mi dovrebbe come messaggio: UTENTE ATTIVO o qualcosa
>del genere, no? Che ne dici?
Non sono utenti di applicazione. Quel controllo devi farlo tu. Ogni volta che fai la login devi fare in modo che se l'utente è già loggato non fai entrare nessuno con quelle credenziali. E per fare ciò potresti andare a scrivere una tabella delle login con la data di logout. Ad ogni login scrivi la data di login mettendo la data di logout a NULL. Se l'utente che sta per connettersi è già presente in tabella con la data di logout a NULL significa che è attivo e che non può essere usato. Quando un utente fa logout, segna la data di logout e l'utenza si "libera".

--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

za5h Profilo | Newbie

Grazie delle risposte. Potresti farmi un esempio di questa tabella con i login e logout utente ed il loro controllo?

alx_81 Profilo | Guru

>Grazie delle risposte. Potresti farmi un esempio di questa tabella
>con i login e logout utente ed il loro controllo?
eh.. è decisamente impegnativa da forum. Intanto crea la tabella, e poi comincia ad intervenire nella login con il codice, andando a segnare l'accesso.

--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

za5h Profilo | Newbie

Si si hai raggione, non è facile dare al forum quello che serve. Poi non è il fatto di non fare la tabella ma il fatto di inserire del codice nella login, non avendo esperienza a tal proposito.
grazie.

alx_81 Profilo | Guru

>Si si hai raggione, non è facile dare al forum quello che serve.
>Poi non è il fatto di non fare la tabella ma il fatto di inserire
>del codice nella login, non avendo esperienza a tal proposito.
Eh, è comunque dura, devi avere un po' di base di ADO, quindi ti consiglio di studiarti VBA, ADO e tutto quanto ti servirà per interfacciarti ad un comando.
L'idea di massima è pensare che un particolare bottone può essere legato ad una "procedura" che scrivi tu (una Sub in VB). Questa procedura viene collegata tramite un evento. Quindi potremmo dire che all'evento Click di un ipotetico pulsante viene collegato un comportamento.
Quello che piano piano dovrai scrivere.

Ti consiglio di partire dalla guida online di access, per capire come puoi disegnare tue form e legarti a del codice che vai a scrivere con conoscenze di VBA ed ADO.
http://office.microsoft.com/it-it/access/FX100646921040.aspx

Intanto prova a collegare ad un evento click del pulsante una procedura che visualizza un messaggio con il MsgBox, così per prendere dimestichezza. Poi proseguiamo

>grazie.
di nulla!

--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

za5h Profilo | Newbie

hahahahha. sei grande alx. i messagi gia gli imposto, non comportano particolari problemi. ma lascio stare per adesso, anche perche in realta mi piace, ma mi devo concentrare su altro per il momento. ciao

alx_81 Profilo | Guru

>hahahahha. sei grande alx. i messagi gia gli imposto, non comportano
>particolari problemi. ma lascio stare per adesso, anche perche
>in realta mi piace, ma mi devo concentrare su altro per il momento.
se il comando lo sai già gestire allora ti manca ado? Mi dispiace ma una minima base serve altrimenti è dura aiutarti.
--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5