Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Errore ODBC - Timeout query scaduto

496 views
Skip to first unread message

Roberto

unread,
Jul 29, 2010, 1:30:12 AM7/29/10
to
Buongiorno,
non sicuro di essere sul NG giusto (non sò se il problema dipende da
access, sql server oppure altro).
Ho un FE con access 2000 (che "gira" sia su win XP che win 2000, con
access 2002 e 2000) collegato a sql server 2000.
Le istruzioni incriminate sono:
qry="UPDATE TAGLIANDI SET RISTAMPE = " & XX & " WHERE ID=" & ID & "
AND ANNO=" & ANNO
docmd.runsql qry

Le variabili sono certe (nel senso che non vengono passati parametri
non compatibili) e sono numeri interi.

Ogni tanto, apparentemente con modalità casuale, l'UPDATE non avviene
e mi ritorna il seguente errore:
Errore di run-time '3157'
ODBC: operazione di UPDATE non riuscita su tabella collegata
'TAGLIANDI'
[Microsoft][ODBC SQL Server Driver] Timeout query scaduto. (#0)

Qualche idea?

Fair87

unread,
Jul 29, 2010, 3:21:19 AM7/29/10
to
Roberto ha scritto:
>Buongiorno,
>non sicuro di essere sul NG giusto (non s=F2 se il problema dipende da

>access, sql server oppure altro).
>Ho un FE con access 2000 (che "gira" sia su win XP che win 2000, con
>access 2002 e 2000) collegato a sql server 2000.
>Le istruzioni incriminate sono:
>qry=3D"UPDATE TAGLIANDI SET RISTAMPE =3D " & XX & " WHERE ID=3D" & ID & "
>AND ANNO=3D" & ANNO

>docmd.runsql qry
>
>Le variabili sono certe (nel senso che non vengono passati parametri
>non compatibili) e sono numeri interi.
>
>Ogni tanto, apparentemente con modalit=E0 casuale, l'UPDATE non avviene

>e mi ritorna il seguente errore:
>Errore di run-time '3157'
>ODBC: operazione di UPDATE non riuscita su tabella collegata
>'TAGLIANDI'
>[Microsoft][ODBC SQL Server Driver] Timeout query scaduto. (#0)
>
>Qualche idea?

Per caso usi l'UPDATE sulla stessa tabella su cui prima hai fatto una INSERT o
anche una semplice SELECT?

--

Roberto

unread,
Jul 29, 2010, 3:41:25 AM7/29/10
to
> Per caso usi l'UPDATE sulla stessa tabella su cui prima hai fatto una INSERT o
> anche una semplice SELECT?

All'interno del controllo specificato non faccio nessuna operazione
prima dell'UPDATE
La SELECT avviene dopo quando seleziono i dati da stampare.
QRY_BASE = "SELECT * FROM TAGLIANDI WHERE ID=" & Me.ELC1.Column(0) & "
AND ANNO=" & Me.ELC1.Column(1)
DoCmd.OpenReport "REP_TAGLIANDO", acViewNormal
(nell'apertura del report viene impostata la QRY_BASE)

Roberto

unread,
Jul 30, 2010, 5:44:11 AM7/30/10
to
altre idee?

dove postare sul ng di sql?

Fair87

unread,
Jul 30, 2010, 12:28:38 PM7/30/10
to
Roberto ha scritto:

>altre idee?
>
>dove postare sul ng di sql?

Avevo giŕ postate 2 volte....ma evidentemente c'č qualche problema.....
Riassumo. I timeout succedono essenzialmente per 2 motivi: o l'operazione č
titanica (allora basta allungare il timeout o ripensare la procedura) oppure
ci sono dei lock nel mezzo. SQL server ha tutta una sua gestione dei lock che
sarebbe bene conoscere (io per primo!!!!) per sapere come meglio agire.
Aggiungi che Jet potrebbe decidere di aprire + connessioni contemporanee per
questioni prestazionali. Questo č un comportamento non trasparente, nel senso
che non lo sai se e quando lo fa.....Possibili soluzioni: usi ADO e non DAO.
Cosě controlli tutto: connessioni, livello di isolamento.....Confezioni una
query pass-through che viene eseguita lato server SENZA elaborazioni da parte
di jet. Usi le stored-procedure...che sarebbe di gran lunga la soluzione
migliore (atomicitŕ garantita, zero traffico di rete, gestione completamente
delegata al server.....). Di solito č sufficente ripensare le procedure per
non cadere in questi casi.....l'upgrade al completo client-server č
chiaramente la soluzione ideale IMHO

--

Roberto

unread,
Aug 18, 2010, 8:28:25 AM8/18/10
to
scusa il ritardo (tra ferie e lavoro arretrato)

> I timeout succedono essenzialmente per 2 motivi: o l'operazione è


> titanica (allora basta allungare il timeout o ripensare la procedura) oppure
> ci sono dei lock nel mezzo.

tabelle piccole (circa 1000 record) e update o insert in record
singoli

> query pass-through che viene eseguita lato server SENZA elaborazioni da parte
> di jet.

ho convertito tutte le query "normali" in query pass-through:
l'errore si ripresenta ugualmente anche se con minor frequenza

Se imposto il timeout = 0 ?
Può essere utile?


OneEDP

unread,
Aug 18, 2010, 9:23:17 AM8/18/10
to
Timeout a 0 significa tempo illimitato di esecuzione (non di connessione).
Cmq se appena mille record inchiodano sql c'è qualcosa che devi rivedere
nella struttura del db e/o dello statement.
Ciao

--
Daniele
Rispondere scartando OneEDP, spam e 32

Roberto

unread,
Aug 18, 2010, 4:58:09 PM8/18/10
to
> Cmq se appena mille record inchiodano sql c'è qualcosa che devi rivedere
> nella struttura del db e/o dello statement.

è quello che stavo cercando di capire/fare ...
esiste un strumento di analisi più appropriato?

Roberto

unread,
Aug 18, 2010, 5:01:00 PM8/18/10
to
dimenticavo:
client windows seven pro 64 bit
cluster win 2000 srv e sql 2000

OneEDP

unread,
Aug 19, 2010, 3:09:04 AM8/19/10
to
SQL Profiler di tutto di più.
Oppure da Management Studio attivi le statistiche io
http://msdn.microsoft.com/it-it/library/ms184361.aspx ed esegui lo
statement sa ssms.
0 new messages