Newsgroup: it.comp.appl.access
Titolo: Evento sulla tabella

Ciao a tutti,
spero di essere chiaro nell'esporre cio' che voglio fare.
Ho un database condiviso da piu' utenti su una rete LAN; su un pc ho 
messo il database con le tabelle (che fa da server) e sugli altri le 
maschere, query e le tabelle collegate al server.
Quello che vorrei fare è: quando qualcuno aggiunge un record nella 
tabella, visualizzare in qualche modo un messaggio sul pc degli altri; 
per far questo ho pensato di catturare un evento sulla tabella, allorchè 
viene aggiunto un record andare ad eseguire un pezzo di codice. E' 
possibile ciò, o esiste un metodo piu' semplice per fare questo?
Grazie a tutti,
Pao

 Pao
Sulle tabelle non ci sono eventi.
L'unica č creare un'evento con timer 0,5 secondi che ascolta se la tabella 
cresce.
Domanda: a cosa ti serve questa cosa?
io mi spazientirei non poco se ogni volta che qualcuno scrive venissi 
bloccato.
MAssimiliano

 
Come posso creare questo evento timer? mi sembra una buona soluzione.
Risposta:
per fare una specie di messenger di rete; quando il messaggio è 
indirizzato a me, vengo avvisato.
Grazie :)
Pao


Ciao. Io una volta ho creato un semplice instant messenger dentro un db
Access con un timer, come ha suggerito Massimiliano, ma il controllo dei
nuovi messaggi l'ho messo nell'evento Timer di una maschera.
Tieni presente che ad ogni tick del timer (diciamo, 0,5 secondi) viene
effettuata una ricerca sulla rete, e la tabella dei messaggi viene scansita
per verificare se ce ne sono di nuovi. Tutto questo non è il massimo per le
prestazioni.
Spero ti sia utile. Ciao.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ha scritto nel messaggio 
news:92GOd.865383$35.32...@news4.tin.it...

Meglio ancora, così è più semplice.
Su beforeupdate della maschera di inserimento ci metti un query di 
accodamento in una tabella temporanea in cui hai
Il nome del pc che deve leggere
Il segno di visto sì/no
il numero del record da leggere
Metti la tabella filtrata per nome pc in una maschera in cui setti
Intervallo timer 500 (lo trovi tra le proprietà della amschera)
e su timer intervall (evento della maschera) fai un requery della maschera 
di avviso
Quindi chi deve sapere avrà la sua bella notifica.
E' più facile a farsi che a spiegare
MAssimiliano 

yronium ha scritto:


Grazie sì utilissimo!! beh non serve che sia proprio instant: una 
scansione ogni minuto penso possa essere accettabile.
Pao

 ha scritto nel messaggio 
news:82Z190Z206Z25Y1...@usenet.libero.it...

Su 
www.sitocomune.com
 c'è una soluzione di Pablitomf(luenzato)
di posta interna
MAssimiliano 

 
Sě l'ho vista: ma quella ha il tasto invia/ricevi ;)

MA ha scritto:

Grazie utilissimi entrambi!
Ciao,
Pao


Dipende da come lo vuoi implementare. Devi tenere presente vari casi.
Il mio caso era: due computer soltanto, un messaggio per volta in tempo
reale. Implementazione: una tabella con un campo CorpoMessaggio, un campo
Destinatario (primo o secondo computer, serve per decidere la direzione del
messaggio) e un campo Letto (si/no). Chi manda il messaggio non crea un
nuovo record ma modifica quello esistente. Il timer, dicoamo sul computer
uno, ogni mezzo secondo scansisce la tabella, che contiene un solo record, e
"...se il primo record ha scritto 'Computer Uno' nel campo Destinatario, AND
'no' nel campo Letto, then mostrami il messaggio e imposta il campo Letto a
'si'...". Chi scrive un messaggio in realtà prende il primo record, modifica
il campo CorpoMessaggio con il nuovo testo, scrive (in automatico) il nome
dell'altro computer nel campo Destinatario, e imposta a 'no' il campo Letto.
Questo metodo ha una scansione piuttosto veloce - la tabella ha un record
solo - ed è limitato solo dalla velocità della rete, ma non consente di fare
uno storico dei messaggi. E non si può utilizzare nemmeno per più di due
utenti, perché se entro mezzo secondo l'utente 1 manda un messaggio e
l'utente 2 ne manda un altro, quest'ultimo sovrascrive il primo, che non
verrà mai letto dal destinatario.
Quindi, per più utenti, devo:
1 - scrivere un nuovo record quando creo un messaggio;
2 - leggere il campo Letto in tutta la tabella, ed estrarre i record con
'no'
3 - da questi record leggere il campo Destinatario, e estrarre (in ordine: i
messaggi potrebbero essere più di uno) i messaggi dove il valore è quello
del computer corrente.
4 - visto che potrei ricevere più messaggi contemporaneamente, devo
aggiungere alla tabella un campo Mittente, che andrà riempito quando si crea
un nuovo messaggio.
5 - visto che devo leggere tutta la tabella (perché porei avere più messaggi
non letti), e prevedere una griglia o qualcos'altro per visualizzare più
messaggi contemporaneamente, tanto vale eliminare il punto 2, cioé elencare
tutti i messaggi diretti al computer corrente, siano essi già letti o no.
Magari, quelli non letti li visualizzo in grassetto.
Queste operazioni, e interrogazioni al db, le dovrei fare ogni mezzo
secondo, quindi il traffico di rete e l'attività del server verranno
sicuramente appesantite (anche se un server come si deve non viene certo
rallentato da una query di questo genere). Se devi farle meno di frequente,
diciamo ogni minuto, è molto probabile che ogni volta il computer corrente
riceva più messaggi contemporaneamente, quindi il meccanismo riportato sopra
diventa necessario.
Uff. Complicato? Io non ti voglio suggerire di farlo oppure no, questo lo
decidi tu a seconda del tuo sistema e delle tue esigenze, ma queste cosette
le devi sapere e fare queste considerazioni. Tieni anche presente che ci
sono in giro degli ocx che realizzano l'instant messaging con prestazioni
migliori, e magari varrebbe la pena di fare una ricerca e adottarne uno già
fatto. So che ci sono ma non conosco il nome di nessuno, quindi non te ne
posso suggerire uno. Ma può darsi che qualcun altro che legge qui lo sappia.
Spero di esserti stato di aiuto. Ciao


 Pao
Perchè non strutturi le maschere di immissione dati in modo che invece di
lasciare un msg nella tabella lo spediscano direttamente al destinatario
con net send? Immediato, ritardo zero, non necessita di maschere nascoste
che leggano di continuo la tabella, quindi nessuna influenza sulle
prestazioni (il che ti fa risparmiare sulle aspirine).
Ovviamente ti rimane sempre la possibilità di tenere in tabella lo storico
di tutti i msg spediti.
Rimane il fatto che se qualcuno inserisce un msg direttamente nella
tabella questo non viene recapitato, ma all'utente medio non dovrebbe
essere possibile accedere direttamente alle tabelle, no?
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


mi piace così
MAssimiliano 


Non ci avevo pensato, è un'ottima idea alternativa. Soltanto che così devi
specificare di volta in volta il percorso di rete della macchina di
destinazione, mentre con il mio metodo il codice è lo stesso in ogni
macchina. Però così risparmieresti un sacco di traffico di rete.
Lo terrò a mente per il futuro.


 
Ci avevo pensato, ma per questioni di sicurezza è meglio di no visto che 
la LAN è connessa ad internet. Siccome non ho l'esigenza di avere i 
messaggi inviati istantaneamente, preferisco fare una scansione ogni TOT 
tempo.
Pao

 
Beh, per quello basta creare una tabella coi dati di configurazione da 
impostare quando si installa il database sulla macchina; da codice si 
leggono i dati et voilà
NB: su windows xp service pack 2 il servizio messenger (che è utilizzato 
da net send) è disattivato di default, ricordati di attivarlo.

 Lo terrò a mente per il futuro.
Al posto del nome PC puoi usare il nome utente. Il msg verrà recapitato
sulla macchina su cui è loggato l'utente. In caso di login multipli con lo
stesso nome utente su più macchine il msg andrà al PC su cui è stato fatto
il primo login perchè sarà quello che avrà registrato il nome netbios
univoco per quell'utente. (finestra DOS, nbtstat -n per vedere i nomi
netbios registrati sul PC, sono quelli con codice <03>).


Paolo ha scritto:
[CUT]


Il fatto che la LAN sia collegata ad internet non c'entra niente con la
possibilità di usare net send per spedire messaggi.
L'uso di net send all'interno della LAN non ne compromette la sicurezza.
Lo puoi usare a meno che tu non abbia disabilitato il servizio messenger,
che dev'essere attivo sui PC dei destinatari per poter far comparire i
messaggi popup.
Spesso il messenger si disabilita per impedire agli spammers di farti
comparire popup sul PC, e anche perchè fino ad una certa versione era
vulnerabile a degli exploit, anche se la presenza di un firewall ben
configurato già ne impedisce l'uso dall'esterno della LAN.
Quindi se hai un firewall che separa la LAN da internet puoi
tranquillamente tenere i messenger attivi ed usare i net send, se invece
la tua LAN è senza firewall sei messo male, e il messenger è l'ultimo dei
tuoi problemi.


 MAssimiliano
Si, in questi tempi di ristrettezze economiche anch'io sono molto attratto
dalla possibilità di risparmiare sulle aspirine!


Paolo ha scritto:
[CUT]



La tabella sul BE è un'ottima idea, però la farei aggiornare in automatico
ad ogni avvio di ciascun FE registrandovi la coppia ID_utente_Access <->
nome_PC aggiornata, di modo che se anche un utente cambiasse PC sarebbe in
grado di ricevere i msg.
Un problema da gestire è l'invio di un msg ad un utente non loggato o ad
un PC spento. Col tuo metodo del salvataggio dei msg in tabella non c'è
problema, appena si collega lo riceve. Col net send il msg andrebbe perso,
quindi bisognerebbe intercettare l'errore e rispedirlo in seguito e/o
avvisare il mittente della mancata consegna.
