Ringrazio entrambi per le risposte che mi avete dato.
max.riservo ha scritto:
Premesso che non capisco l'esigenza di impedire la stampa (quasi) contemporanea dello stesso record (con gli eventuali records correlati), a meno che tu voglia tenere traccia di data/ora/utente che effettua la stampa (o che durante la fase di stampa vengano anche modificati dei records) ....
L'esigenza di impedire la stampa quasi contemporanea è quella di non far produrre documenti cartacei duplicati, evitando spreco di carta e tempo. Cercando di spiegare meglio, provo a fare un esempio:
L'utente A apre la maschera nel suo front-end per stampare e visualizza il primo record ma non lo manda ancora in stampa. L'utente B poco dopo apre anche lui la maschera nel suo front-end per stampare e visualizza il primo record che risulta ancora non stampato. A questo punto l'utente A manda in stampa. Per l'utente B il record che sta visualizzando è ancora da stampare e manda in stampa anche lui. In alcune situazioni, che non sono riuscito ad individuare, i 2 controlli che ho predisposto non impedito che l'utente A e l'utente B stampassero gli stessi documenti.
max.riservo ha scritto:
Comunque, potresti fare così :
- verifichi il campo bool 'StampaInCorso', se = true esci dalla routine
- apri un recordset in modifica sul record incriminato con un lock pessimistico, aggiorni a true il campo 'StampaInCorso' e chiudi il recordset
- fai tutto quello che devi fare con la stampa
- riapri il recordset sempre con un lock pessimistico, aggiorni a false il campo 'StampaInCorso' e chiudi il recordset
Proverò a ricontrollare la sequenza degli eventi e proverò anche a variare il lock da ottimistico a pessimistico come mi hai suggerito.
@Alex ha scritto:
Aggiungo che i Report possono essere aperti in modalità SINCRONA acDialog dalla versione 2010 mi pare... e questo consente di impostare il flag di stampa alla fine reale... e di liberare il blocco in modo sincrono.
Magari la mia non sarà la scelta corretta ma, date anche le mie limitate conoscenze, quando ho creato questa cosa ho optato per usare un documento Word già formattato, con tabelle e testo di default già inserito, dove vado ad aggiungere i dati ricavati dal database. Il documento risultante è molto articolato, 8 pagine, e riprodurlo in un report non mi sembrava una cosa facile, dato anche che, se non mi sbaglio, mi sembra di ricordare che in un report più di un certo numero di controlli non si possono inserire.