Newsgroup: it.comp.lang.visual-basic
Titolo: Fatture e LAN

Sto cercando di implementare un piccolo programma in visual basic x
emettere fatture (nel mio ufficio); poichè abbiamo 3 computer non so come
fare in modo di assegnare il numero fattura in modo unicovo. Mi spiego
meglio:
Computer 1 sta emettendo una fattura
Computer 2 sta emettendo una fattura.
chi finisce prima deve salvare i dati (della fattura) e assegnare il
numero progressivo alla stessa.
Come posso essere sicura che i due computer premendo contemporaneamente il
tasto SALVA non vadano ad assegnare alla fattura lo stesso numero?
Mi sono accorta di questo problema, perchè si è verificato.
Ringrazio chiunque mi sappia dare un'idea valida per risolvere questo
problema.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 fattura lo stesso numero?
se i dati sono contenuti in un database, imposta il campo con il numero di
fattura a "duplicati non ammessi" (ovviamente il numero fattura deve
riportare anche l'anno, per essere univoco), guardi qual'è l'ultimo numero
assegnato, aumenti di uno e provi a registrare la fattura. se ci sei
riuscita, bene, se non ci sei riuscita vuol dire che qualcuno è arrivato a
scrivere tra il momento in cui leggevi l'ultimo dato inserito e quello in
cui hai scritto: poco male, aumenti di uno e riprovi.
-- 
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

Css hai cambiato nick? Ci mettiamo a fare morphing :-)
bye
-- 
Esistono 10 tipi di persone: chi conosce il binario e chi no.
"Seminate Linux, che Windows si pianta da sè...." (Antico Adagio)
Gestione Ottica - Gestionale per Ottici e Programmi Gratuiti su:
http://www.nicolaottomano.it
email spamtrap: 
spam...@nicolaottomano.it

 bye
cambiato Nick????
morphing????
sicuramente ti sbagli.


Sergio ha scritto:


Non mi sembra una soluzione elegante.
E poi i computer sono tre e/o potrebbero essere 4. Come faccio... aumento
di uno sempre??


 Css hai cambiato nick? Ci mettiamo a fare morphing :-)
ho deciso che il mio nick era troppo brutto per essere utilizzato :-)


 aumento di uno sempre??
possono essere anche mille. se io riesco a scrivere il record, vuol dire che
il numero era libero, e morta lě; se non ci riesco, ho a disposizione due
strade: aumento di uno e riprovo a scrivere, oppure rifaccio il calcolo
dell'ultimo utilizzato, aumento di uno e riprovo a scrivere. prima o poi
dovrei riuscirci :-)



Dici?! Penso che sia una soluzione più semplice al tuo problema non esista!
Come ha detto Sergio, i computer potrebbero essere anche 1000
Ciao, Vincenzo

 di uno sempre??
Se vuoi che funzioni, sě.
Se vuoi che sia elegante puoi aumentare di (sqr(exp(log(sin(cos(0.3))))))^0
Inoltre se avessi specificato gli strumenti che utilizzi, magari avresti
ricevuto risposte piů specifiche.
termoPilucco


numero progressivo alla stessa.
Io ho risolto la cosa programmando un trigger che, al salvataggio,
assegna cerca l'ultimo progressivo salvato, aggiunge uno e lo assegna
al campo ID.
In alternativa (ossia, dove nel DB non hai i triggers) puoi creare una
procedura che restituisca il progressivo immediatamente prima del
salvataggio. In questo modo non escludi del tutto la possibilità di
sovrapposizione, ma la riduci praticamente a zero.
--
Ciao!
Luca Menegotto

 ho deciso che il mio nick era troppo brutto per essere utilizzato :-)
Dì la verità... quando rispondi alle donne vuoi essere un gentleman :-P


 Dì la verità... quando rispondi alle donne vuoi essere un gentleman
a parte il fatto che cerco di essere un gentleman a prescindere, potrai
facilmente notare come io abbia cambiato nick già da venerdì scorso.


 (sqr(exp(log(sin(cos(0.3))))))^0
ROTFL! (termoPilucco il matematico pazzo...)
A proposito, come procede la classe sui numeri a precisione arbitraria?
bye
-- 
Esistono 10 tipi di persone: chi conosce il binario e chi no.
"Seminate Linux, che Windows si pianta da sč...." (Antico Adagio)


 A proposito, come procede la classe sui numeri a precisione arbitraria?
Ho modificato la sola funzione moltiplicaMantisse in modo farla girare
circa tre volte piů veloce di prima, e adesso tutti gli operatori che vi
si appoggiano (*, /, !, exp, sqr) girano da due a tre volte piů
velocemente :)
Se riuscissi a fare lo stesso sulle addizioni/sottrazioni il risultato
sarebbe ancora migliore... magari un giorno ci provo.



         Ma nessuno ha mai sentito parlare di blocco ottimistico e pessimistico?? Si
puň anche bloccare un solo record della tabella in modo da poter avere
accesso esclusivo. E' chiaro che per farlo bisogna poi anche saperlo
testare!!
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 testare!!
Chiarissimo!
termopilucco


 fattura lo stesso numero?
Io non mi fido di triggers, blocchi pessimistici o ottimistici.
In una tabella dico che il tal documento (numerato in modo univoco da me in
modo provvisorio) è bloccato.
Faccio (anche dovesse durare cent'anni) quel che voglio e poi tolgo il _mio_
blocco.
Ovviamente tutti (e da qualunque punto del programma che debba gestire
contatori) devono testare la presenza del blocco (che è, chiaramente,
logico, non fisico).
Basta mettere i dati identificativi (univoci!) del record (fattura in fase
di numerzione) in un'apposita tabella.

 sovrapposizione, ma la riduci praticamente a zero.
Stavo per rispondere la stessa cosa ma poi ho letto il tuo post.
Aggioungo anche che tutta questa fase (lettura ultimo id usato, salvataggio
con id+1) dovrebbe essere sotto transazione in modo tale da poter eseguire
un rollback in caso di operazioni eseguite dopo.
Stefano "HappyMan" (Lake Maggiore - Italy)
-- 
http://www.sgr.info
Email happyman69 (at) 
despammed.com

 :-)
Mannaggia a quanto sono fuso... non me ne ero accorto...


 scorso.
Azz, ecco che fine avevi fatto ! Ciao Sergio ben "trovato"!
-- 
-Gigio@Work(?)-



Ciao Lupo,
che succede se per caso il programma va in crash (bug, interruzione di
corrente, arrivo degli ufo, etc.) prima di sbloccare il tuo blocco ? 
Prevedi la forzatura del blocco ?


 Prevedi la forzatura del blocco ?
Il blocco logico resta chiaramente sugli archivi.
Per questi casi accidentali, ovviamente prevedo una serie di utilities di
"ripristino ambiente" (da usarsi generalmente, in quanto eccezionali, sotto
supervisione) che, fra le altre cose, contemplano l'eliminazione di tutti i
blocchi, ma anche, in tempo reale e con applicativo in esecuzione in rete,
la loro consultazione (chi, quando, cosa, etc.)...

 
[cut]
Beh, se usi ADO per accedere al DB puoi aprire una transazione bloccando il db, 
con una procedura del tipo:
Public Sub DbBeginTrans
  MiaConnessione.BeginTrans
  MiaConnessione.Execute "update <tabella molto piccola> set <campo> = <campo>"
  ' In questo modo, visto che gli update si accodano, fermi gli altri accessi 
in scrittura
End Sub
' ----------------------------
Public Sub DbCommitTrans
  MiaConnessione.CommitTrans
End Sub
' ----------------------------
Public Sub DbRollBackTrans
  MiaConnessione.RollBackTrans
End Sub
' Flusso del programma
  ...
  DbBeginTrans
  <Lettura ultimo valore, ed incremento>
  If <Scrittura in tabella> = True Then
    DbCommitTrans
  Else
    DbRollBackTrans
    <Messaggio di errore>
  End If
  ...
Se usi Oracle, il problema non si pone: ti crei una Sequence, ed hai la 
garanzia di valori univoci quanti siano gli accessi contemporanei al db.
-- 
Bye by SixaM 8-]
---------------------
Sito comune  : 
www.it-lang-vb.net
Aiuto on line: premi F1
- Ricordati che lo strumento piu' importante ce l'hai tra le orecchie.
- mmm...la forfora?

 Non mi sembra una soluzione elegante.
RRRRRRRRRRROTFL!
E' una delle soluzioni piu' funzionali in assoluto.
L'unica controindicazione riguarda il caso in cui sia l'utente a scegliere
il numero di fattura per esigenze varie. In tal caso in fase di salvataggio
andrebbe prima avvertito della nuova numerazione assegnata, e puo'
eventualmente confermare o annullare.
--
Starman

 problema.
io uso access, ma se necessario potrei imparare ad usare un'altro tipo di
db. I suggerimenti che vorrei sono anche di questo tipo.
Ringrazio, comunque, tutti quelli che hanno risposto.


Scusate la mia assenza, ma ho preso un virus e ho dovuto riformattare il pc
etc etc.
Ringrazio tutti quelli che hanno cercato di aiutarmi; volevo aggiungere
che di solito uso Access per i miei DB ma vorrei un suggerimento anche in
tal senso. Cioè se un DB è più idoneo per sviluppare software e risolvere
problemi di questo genere, posso anche pensare di usarlo specie se è
possibile interfacciarlo con visual basic (ovviamente). 
Il problema era: software di fatturazione
Computer 1 sta emettendo una fattura
Computer 2 sta emettendo una fattura
Computer 3 sta emettendo una fattura
chi finisce prima deve salvare i dati (della fattura) e assegnare il
numero progressivo alla stessa.
Come posso essere sicura che i due computer premendo contemporaneamente il
tasto SALVA non vadano ad assegnare alla fattura lo stesso numero?
Mi sono accorta di questo problema, perchè si è verificato.


 pc
Presso 
http://tinyurl.com/3u6l4
trovi 23 risposte alla tua domanda di cui almeno tre contenenti la
soluzione.
Aggiungere che se usi Access 2000 o successivi dovresti dare un'occhiata
alla documentazione della variabile del database @@identity
termoPilucco



Imposti nel DB il campo relativo al numero di fattura come univoco.
Al momento della registrazione della fattura, intercetti l'eventuale errore
di chiave duplicata e ti ricalcoli il nuovo numero.
Ciao
