Gestione files condivisi

61 views
Skip to first unread message

Roberto.R.

unread,
Jan 5, 2022, 5:56:14 AM1/5/22
to Harbour supporto utenti in italiano
Intanto saluto tutto il gruppo a cui mi sono appena iscritto...
Questo il mio quesito: ho realizzato un semplice programma gestionale che veniva usato su una sola postazione di lavoro, adesso vorrei poterlo utilizzare in rete contemporaneamente anche su un'altra postazione. La mia domanda è: ricompilando il mio programma da clipper ad Harbour i files vengono gestiti automaticamente in condivisione oppure devo modificare i sorgenti, alle righe programma con l'istruzione specifica per la condivisione dei singoli file? Nel caso, mi potete indicare una guida di facile comprensione, in italiano, con le istruzioni e la spiegazione per poter gestire i files condivisi?
Grazie a chi mi può aiutare.
Roberto
Message has been deleted

Roberto.R.

unread,
Mar 5, 2022, 3:00:51 PM3/5/22
to Harbour supporto utenti in italiano
Nessuno che mi può aiutare, e che ha una routine in clipper, per la gestione dei files/record da condividere tra più utenti? Grazie 

Alfredo Franceschetti

unread,
Mar 8, 2022, 4:23:43 AM3/8/22
to Harbour supporto utenti in italiano

La regola di base che io applico sa sempre è:
Apertura dei database in modo condiviso per le normali operazioni in modo esclusivo per le operazioni "pesanti".
di base per gestire più utenti basta usare:

if rlock()
 replace ......
else
 ? "Record in uso da altro utente. Aggiornamento non possibile"
endif

meglio ancora inserire questo in un loop e attendere che il record si liberi:

do while !rlock()
 ? "Record in uso da altro utente. attendere sblocco"
  inkey(0)
enddo
* ora il record è bloccato da me e posso procedere
replace ......


ovviamente la procedura che ritengo più giusta sarebbe quella di impedire in origine di intervenire su un record che è già in uso perciò solitamente io opto per:

if rlock() && blocco il record così nessuno vi può accedere
 ... attivo maschera di input  o altra procedura che alla fine deve aggiornare il record
else
 ? "Record in uso"
endif

Tutto ciò ovviamente dipende dalle necessità del programma.
Passare da una monoutenza ad una reale multiutenza potrebbe voler dire dover cambiare ben ben dei codice dipende come lo stesso è stato scritto in origine e quanta parte di codice operi cambiamenti nel database, spesso esempio un programma contabile o di magazzino le procedure che aggiornano i record sono alla fine poche perchè le più sono stampe o visualizzazioni e perciò le modifiche se pur pesanti visto che bisogna rivedere la logica non interessano però gran parte del codice.

Ciao
Franz

Alfredo Franceschetti

unread,
Mar 8, 2022, 4:27:49 AM3/8/22
to Harbour supporto utenti in italiano
Dimenticavo , la complessità delle modifiche dipende anche dalla struttura degli archivi, per esempio se facciamo un esempio parliamo di archivio di fatture che solitamente comporta due database uno con i riferimenti alla testata della fattura (nr data cliente ecc.) uno con le righe del corpo (articolo prezzo ecc.) basta bloccare la testata che in automatico mi impedisce di accedere al corpo ...... ecc.ecc

redosmile

unread,
Mar 8, 2022, 5:22:38 AM3/8/22
to harbo...@googlegroups.com
Grazie1000 per le dritte sull'argomento.
Una domanda... ma se apro un file esempio:
USE Prova index Prova1
lo stesso file può essere utilizzato anche da altri utenti in scrittura? O c'è un'istruzione specifica per aprire un file che può essere condiviso?

ancora grazie
Roberto


--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "Harbour supporto utenti in italiano" di Google Gruppi.
Per annullare l'iscrizione a questo argomento, visita https://groups.google.com/d/topic/harbourITA/V-QAs-Uoqbo/unsubscribe.
Per annullare l'iscrizione a questo gruppo e a tutti i suoi argomenti, invia un'email a harbourITA+...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/harbourITA/9d71272b-4426-4627-8b38-192636e56a46n%40googlegroups.com.

redosmile

unread,
Mar 8, 2022, 8:45:15 AM3/8/22
to harbo...@googlegroups.com
Come si apre un database in modo condiviso?
Come si apre un database in modo esclusivo?

Ciao e grazie
Roberto

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "Harbour supporto utenti in italiano" di Google Gruppi.
Per annullare l'iscrizione a questo argomento, visita https://groups.google.com/d/topic/harbourITA/V-QAs-Uoqbo/unsubscribe.
Per annullare l'iscrizione a questo gruppo e a tutti i suoi argomenti, invia un'email a harbourITA+...@googlegroups.com.

pecse...@tiscali.it

unread,
Mar 8, 2022, 10:07:53 AM3/8/22
to harbo...@googlegroups.com
qui la guida Harbour https://github.com/Petewg/harbour-core/wiki/db/

  • dbUseArea( [<lNewArea>], [<cRddName>], <cDatabase>, [<cAlias>], [<lShared>], [<lReadOnly>], [<cCodePage>], [<nConnection>] lSuccess
    Tenta di aprire un file di database e restituisce true ( .T.) in caso di esito positivo, altrimenti false ( .F.).
    Questa funzione è la stessa, in termini di funzionalità, del USEcomando standard, ma più flessibile.
    Se <lNewArea>specificato true ( .T.) il file viene aperto in una nuova area di lavoro, altrimenti se è false (.F.) o omesso, viene utilizzata l'area corrente, il che significa che qualsiasi dbf già aperto nell'area verrà chiuso.
    <cRddName>è il nome facoltativo del driver del database che verrà utilizzato. Se omesso, viene utilizzato il driver predefinito corrente.
    <cDatabase>è il nome del file di database ( .dbf) da aprire.
    <xcAlias>è un valore di carattere opzionale che definisce l'alias da associare all'area di lavoro. Se omesso, viene utilizzato il nome file senza percorso ed estensione.
    <lShared>è un valore logico opzionale che specifica se il file sarà condivisibile con altri utenti o meno. Se omesso, viene utilizzata l'impostazione globale _SET_EXCLUSIVE corrente. <lReadonly>è il valore logico facoltativo che specifica se l'area di lavoro e il file dbf sono scrivibili o meno. Se omesso, il valore predefinito è false ( .F.), ovvero il file può essere aggiornato.
    <cCodePage>è il CP Harbour da utilizzare nell'area di lavoro.
    [<nConnection>(DA FARE!)

Ciao Mario
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a harbourITA+...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/harbourITA/CANRV7Vm7s3Rv4h-zbnwkU6Hh6J5QCF-iNid210KmtLHO%2B%3DcO3w%40mail.gmail.com.



Voucher MISE per P.IVA e PMI: fino a 2500€ per la Banda Ultralarga. https://www.tiscali.it/business/prodotti/voucher/

Alfredo Franceschetti

unread,
Mar 9, 2022, 3:46:59 AM3/9/22
to Harbour supporto utenti in italiano
Ovviamente anche io uso la funzione dbuseArea ma per semplificare 

nella funzione MAIN di avvio : SET EXCLUSIVE OFF (permette di accedere ai files da più utenti)

USE <Archivio> INDEX <Indice> EXCLUSIVE se vuoi aprire un file bloccandolo interamente

USE <Archivio> INDEX <Indice> SHARED se vuoi aprire un file condiviso

RLOCK() per bloccare un record (deve restituire .T: se il blocco è stato possibile oppure .F. se il record è già bloccato da un' altro utente

se RLOCK() restituisce .T. allora puoi procedere con REPLACE .... se restituisce .F. il tuo prg deve gestire il caso (non proseguire, attendere ect ect

con dopo un APPEND BLANK non serve RLOCK perchè il record è automaticamente bloccato.

Ovviamente per comodità/chiarezza/riutilizzo del codice ti conviene scriverti le tue funzioni soprattutto usare dbuseArea magari all'interno di una tua funzione magari semplificata agevola l'ìapproccio.
Ciao
Franz





redosmile

unread,
Mar 9, 2022, 4:01:45 AM3/9/22
to harbo...@googlegroups.com
Grazie dei preziosi chiarimenti.

ciao e buona giornata.
Roberto

Reply all
Reply to author
Forward
0 new messages