Newsgroup: it.comp.appl.access
Titolo: ODBC: Errore 'Table Locked'

Salve a tutti!
Mi sta succedendo un problema che non riesco a capire.
Ho un db access che viene usato da un'applicazione non access.
Questa applicazione ha un numero di "threads" indipendenti che
raccolgono dati da un ugual numero di dispositivi esterni al PC
collegati via rete e vanno a scriverli nel database. I dati si
distribuiscono su tabelle diverse, qui tutti scrivono su tutte le
tabelle.
Il problema é che, spesso, mi ritrovo un errore dicendo che ha trovato
una tabella "locked" (non é sempre la stessa)- e i dati vanno persi (ho
un log degli errori). Purtroppo la scrittura dai vari thread sul db non
é sincronizzata e non può esserlo per il concetto dell'applicazione
stessa.
L'accesso al db lo faccio attraverso l'oggetto activex esposto dal MDAC
(2.5) via ODBC, dove ho definito dei FileDSN.
Il problema della "concorrenza" nella scrittura sul DB non dovrebbe
essere risolto dal motore del DB stesso?
Potrebbe esserci un qualche timeout troppo corto per il numero di
accessi che ho? E dove trovo questi settings, visto che non ho neanche
Access installato nella machina dove gira la mia applicazione?
Poi, secondo voi, 42 threads che scrivono ogni 15 secondi circa 2500
bytes distribuiti su 4 tabelle é tanto? (la machina é un doppio pentium
a 3GHz con 1GB di RAM).
Qualcuno ha qualche idea, pista, suggerimento, ecc.?
Saluti.
Gilberto
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio 
news:636487c4d49b479e001...@mygate.mailgate.org...

Potresti scrivere i dati in file di testo e importarli tu uno alla volta in base alla data/ora di creazione...
Ciao.
-- 
Sergio MAZZA 

 Gilberto
Ciao,
Massimo 

 Massimo
Comunque grazie dei commenti e suggerimenti.
Gilberto
......................................................................
......................................................................
......................................................................
......................................................................
......................................................................


 Ciao.
Purtroppo non é cosí semplice.
Il DB é il cuore dell'applicazione nel senso che contiente TUTTO quello
che l'applicazione deve usare per funzionare - in tempo reale.
Non posso quindi "diferire" il suo 'riempimento'.
Anche se sto seriamente pensando ad un mecanismo di 'data server'
alimentato da una coda: tutti i thread scrivono sulla coda, mentre il
"server" é l'unico a fisicamente scrivere sul DB.
Questo fa si que se vari thread scrivono al contempo, in realtà stano
scrivendo in memoria, che é molto più veloce. Il "server" potrà svuotare
questa coda alla sua velocità, sfruttando i momenti in cui non esistono
acquisizioni dati - l'operatore lavora sui dispositivi.
La cosa, purtroppo, non é indolore (in nessun senso) e anche se in
concetto sembra poter funzionare, non ho alcuna garanzia che funzioni
davvero.
Qualcuno ha avuto esperienze del genere?


 Gilberto
Ciao.
-- 
Sergio MAZZA 

 Per questioni di soldi/licenza, no (non lo decido io)
Oltre alla soluzione di Sergio,
Hai considerato che MSDE non costa nulla? Hai delle piccole limitazioni ma 
non penso che siano un grosso problema.
Ciao,
Massimo