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

Campo DATETIME In Query PT SQL Server

252 views
Skip to first unread message

nicoletta

unread,
Oct 8, 2009, 2:14:53 PM10/8/09
to
Ciao a tutti,
utilizzo una query PT per scrivere delle righe in una tabella linkata ad
un db SQL Server in Access 03.
Questa tabella he due campi DATETIME e quando cerco di scrivere la data
utilizzando il formato iso (AAAAMMGG) formattando la data di oggi con
format(date(),"YYYYMMDD") in sql mi ritrovo il campo a null.
utilizzando il debug mi fermo prima di scrivere e copio la stringa sql.
Se la incollo in Management studio invece mi scrive il campo correttamente.
Dove sbaglio?

Nicoletta

Pablitomf

unread,
Oct 8, 2009, 3:00:28 PM10/8/09
to

Prova con
CONVERT(DATETIME, '2003-12-31 00:00:00', 102)


nicoletta

unread,
Oct 8, 2009, 3:50:27 PM10/8/09
to
Pablitomf ha scritto:
ho provato ma mi dà
3085 Funzione 'CONVERT' non definita nell'espressione

nell'esecuzione.
Invece se copio e incollo in management studio funziona perfettamente
(d'altra parte funzionava anche prima)


Nicky

nicoletta

unread,
Oct 8, 2009, 4:04:45 PM10/8/09
to
Pablitomf ha scritto:
Non solo, ho provato a fare una semplice
delete from tabella where campodata='20090927' e nell'interattivo di sql
funziona, da acces in passthrough mi dà errore
3464 Tipi di dati non corrispondenti nell'espressione criterio

Ma perché è diverso? sono disperata!!!
le query PT non sono come eseguire il comando nell'SQL nativo del dn in uso?

nicoletta

unread,
Oct 8, 2009, 4:52:12 PM10/8/09
to
nicoletta ha scritto:

> Pablitomf ha scritto:
>> nicoletta wrote:
>>> Ciao a tutti,
>>> utilizzo una query PT per scrivere delle righe in una tabella linkata
>>> ad un db SQL Server in Access 03.
>>> Questa tabella he due campi DATETIME e quando cerco di scrivere la
>>> data utilizzando il formato iso (AAAAMMGG) formattando la data di
>>> oggi con format(date(),"YYYYMMDD") in sql mi ritrovo il campo a null.
>>> utilizzando il debug mi fermo prima di scrivere e copio la stringa
>>> sql. Se la incollo in Management studio invece mi scrive il campo
>>> correttamente. Dove sbaglio?
>>>
>>> Nicoletta
>>
>> Prova con
>> CONVERT(DATETIME, '2003-12-31 00:00:00', 102)
>>
> Non solo, ho provato a fare una semplice
> delete from tabella where campodata='20090927' e nell'interattivo di sql
> funziona, da acces in passthrough mi dà errore
> 3464 Tipi di dati non corrispondenti nell'espressione criterio

azz. qui ho sbagliato io


>
> Ma perché è diverso? sono disperata!!!
> le query PT non sono come eseguire il comando nell'SQL nativo del dn in
> uso?

questa invece credevo fosse così ma ho tanti dubbi.

ho provato a scrivere la data come stringa banalmente e la inserisce.
col CONVERT non c'è verso ed il mio problema è che domani in produzione
avrò probabilmente un sql in inglese e la mia data in stringa va a farsi
benedire!!!

giorgio rancati

unread,
Oct 8, 2009, 6:18:17 PM10/8/09
to

"nicoletta" <frt...@virgilio.it> ha scritto nel messaggio
news:4ace2c1a$0$831$4faf...@reader5.news.tin.it...

Ciao Nicoletta,

il miglior modo per passare la data a Sql server � quello che utilizzi
ovvero il formato 'yyyymmdd' che il manuale definisce ISO.
L'unica cosa che mi viene in mente � che la query PT lavora su un database
diverso da quello che vai a interrogare con Management studio.
Prova a controllare la propriet� di connessione della query PT.

Ciao
Giorgio Rancati.


giorgio rancati

unread,
Oct 8, 2009, 6:24:39 PM10/8/09
to

"nicoletta" <frt...@virgilio.it> ha scritto nel messaggio
news:4ace50f9$0$820$4faf...@reader5.news.tin.it...

>> Ma perch� � diverso? sono disperata!!!


>> le query PT non sono come eseguire il comando nell'SQL nativo del dn in
>> uso?
>

> questa invece credevo fosse cos� ma ho tanti dubbi.

S�, le query PT sono interpretate direttamente dal database server, come
detto sopra, controlla la connessione della query PT, forse � collegata su
un altro database.

> ho provato a scrivere la data come stringa banalmente e la inserisce.

> col CONVERT non c'� verso ed il mio problema � che domani in produzione
> avr� probabilmente un sql in inglese e la mia data in stringa va a farsi
> benedire!!!

esatto, non allontanarti dalla retta via!!
:-)
Giorgio Rancati


giorgio rancati

unread,
Oct 8, 2009, 6:29:27 PM10/8/09
to

"nicoletta" <frt...@virgilio.it> ha scritto nel messaggio
news:4ace50f9$0$820$4faf...@reader5.news.tin.it...
>
> ho provato a scrivere la data come stringa banalmente e la inserisce.

aspetta, questo passo mi � sfuggito...
Forse � meglio che posti il codice con cui prepari ed esegui la query PT.

Ciao
Giorgio Rancati


nicoletta

unread,
Oct 9, 2009, 3:00:16 AM10/9/09
to
giorgio rancati ha scritto:

> "nicoletta" <frt...@virgilio.it> ha scritto nel messaggio
> news:4ace50f9$0$820$4faf...@reader5.news.tin.it...
>> ho provato a scrivere la data come stringa banalmente e la inserisce.
>
> aspetta, questo passo mi ᅵ sfuggito...
> Forse ᅵ meglio che posti il codice con cui prepari ed esegui la query PT.
>
> Ciao
> Giorgio Rancati
>
>
Dim wrk As Workspace, dbswrk As Database
Dim qdf As QueryDef, dbs as database
Dim rst As Recordset
.
.
On Error GoTo Export_Click_Err
.
Set qdf = dbs.CreateQueryDef("")
qdf.Connect = Connect_String
qdf.ODBCTimeout = Odbc_Timeout

.
Set wrk = DBEngine.Workspaces(0)
Set dbswrk = OpenDatabase("", False, False, Connect_String)
.
wrk.BeginTrans

.
'elimino vecchia estrazione
dbswrk.Execute StringaSql, dbSeeChanges
.
.
.
'leggo dati da altre tabelle
qdf.SQL = StringaSql
qdf.ReturnsRecords = True

Set rst = qdf.OpenRecordset(dbOpenSnapshot)
.
do while not rst.EOF

'scrivo nuova estrazione
dbswrk.Execute StringaInsert

rst.movenext

loop

'conferma transazione
wrk.CommitTrans

rst.Close
qdf.Close
Set rst = Nothing
Set qdf = Nothing
Set dbs = Nothing

Export_Click_Wrk_Exit:

DoCmd.Hourglass False

On Error Resume Next

dbswrk.Close
Set dbswrk = Nothing
wrk.Close
Set wrk = Nothing

Export_Click_Exit:

On Error Resume Next

DoCmd.Hourglass False

rst.Close

Set qdf = Nothing

La stringa di inserimento l'ho provate in questi tre modi

StringaInsert = StringaInsert & "'" & Format(Now(), "yyyymmdd")
e mi inserisce NULL nel campo DATETIME di sql server

StringaInsert = StringaInsert & "',CONVERT(DATETIME,'" & Format(Now(),
"yyyymmdd") & "', 112)
e mi restituisce errore 3085 Funzione 'CONVERT' non definita
nell'espressione

StringaInsert = StringaInsert & "'2009-10-27'"
e mi scrive correttamente il campo DATETIME che riporta
2009-10-27 00:00:00.000

Prima di eseguire la scrittura mi copio la stringa costruita per
l'insert e ti accodo al post il secondo esempio (quello che dovrei
utilizzare)

INSERT INTO GWENXRIPPAG
(IDESTRAZIONE,CODAZI,MATR,COGNOME,NOME,CODAGGR1,DESCAGGR1,CODAGGR2,DESCAGGR2,CODAGGR3,DESCAGGR3,CODAGGR4,DESCAGGR4,CODAGGR5,DESCAGGR5,CODAGGR6,DESCAGGR6,CODAGGR7,DESCAGGR7,CODAGGR8,DESCAGGR8,CODPAGA01,VALPAGA01,CODPAGA02,VALPAGA02,CODPAGA03,VALPAGA03,CODPAGA04,VALPAGA04,CODPAGA05,VALPAGA05,CODPAGA06,VALPAGA06,CODPAGA07,VALPAGA07,CODPAGA08,VALPAGA08,CODPAGA09,VALPAGA09,CODPAGA10,VALPAGA10,CODPAGA11,VALPAGA11,CODPAGA12,VALPAGA12,CODPAGA13,VALPAGA13,CODPAGA14,VALPAGA14,CODPAGA15,VALPAGA15,CODPAGA16,VALPAGA16,CODPAGA17,VALPAGA17,CODPAGA18,VALPAGA18,CODPAGA19,VALPAGA19,CODPAGA20,VALPAGA20,DATACONSOLIDAMENTO,DATAESTRAZIONE,DATADIAPCONSOLIDAMENTO,DATADIAPESTRAZIONE,TIPOESTRAZIONE)
VALUES (1,'001','0000000001','AZZURRI DE ANDREI','ADRIANO LUIGI
FRANCO','3','Descrizione
modificata','Q','ssss',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MIOZ1',
.6666,'MIOZ2', .3333,'P801', 22,'P802', 26,'P803',
31,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'20090930',CONVERT(DATETIME,'20091008',
102),1056497760,1056509280 ,'M');

nicoletta

unread,
Oct 9, 2009, 3:13:11 AM10/9/09
to
giorgio rancati ha scritto:

> "nicoletta" <frt...@virgilio.it> ha scritto nel messaggio
> news:4ace2c1a$0$831$4faf...@reader5.news.tin.it...
>> Ciao a tutti,
>> utilizzo una query PT per scrivere delle righe in una tabella linkata ad
>> un db SQL Server in Access 03.
>> Questa tabella he due campi DATETIME e quando cerco di scrivere la data
>> utilizzando il formato iso (AAAAMMGG) formattando la data di oggi con
>> format(date(),"YYYYMMDD") in sql mi ritrovo il campo a null.
>> utilizzando il debug mi fermo prima di scrivere e copio la stringa sql.
>> Se la incollo in Management studio invece mi scrive il campo
>> correttamente.
>> Dove sbaglio?
>
> Ciao Nicoletta,
>
> il miglior modo per passare la data a Sql server ᅵ quello che utilizzi
> ovvero il formato 'yyyymmdd' che il manuale definisce ISO.
> L'unica cosa che mi viene in mente ᅵ che la query PT lavora su un database
> diverso da quello che vai a interrogare con Management studio.
> Prova a controllare la proprietᅵ di connessione della query PT.
>
> Ciao
> Giorgio Rancati.
>
>
Ciao Giorgio,
Il db ᅵ uno soltanto quindi sono certa di non utilizzarne un altro.
Quando dici formato ISO intendi proprio passare la stringa papale papale?

INSERT INTO MIATAB (a,b,c,d,e,f,DATAESTRAZIONE) VALUES
(1,2,3,4,5,6,'20090927') ?

devo cioᅵ arrivare a costruire la stringa in quel modo?

perchᅵ in realtᅵ l'ho giᅵ fatto, ma quello che ottengo da access ᅵ NULL
nel campo data mentre da mngmn studio inserisco correttamenjte la data.
E' questo comportamento diverso tra la query PT e quella 'interattiva'
che mi lascia perplessa!

Nicoletta

nicoletta

unread,
Oct 9, 2009, 4:26:58 AM10/9/09
to
giorgio rancati ha scritto:

> "nicoletta" <frt...@virgilio.it> ha scritto nel messaggio
> news:4ace50f9$0$820$4faf...@reader5.news.tin.it...
>> ho provato a scrivere la data come stringa banalmente e la inserisce.
>
> aspetta, questo passo mi ᅵ sfuggito...
> Forse ᅵ meglio che posti il codice con cui prepari ed esegui la query PT.
>
> Ciao
> Giorgio Rancati
>
>
>
Giorgio ho trovato il mio errore!!!

quando eseguo la query non uso l'opzione dbSQLPassThrough.
In realtᅵ credevo erroneamente che avendo definito la stringa di
connessione all'atto della definizione dell'oggetto database della
workspace, automaticamente tutto ciᅵ che riguardava quell'oggetto fosse
passthrough

grazie per il prezioso aiuto datomi

Nicky

giorgio rancati

unread,
Oct 9, 2009, 4:40:53 AM10/9/09
to

"nicoletta" <frt...@virgilio.it> ha scritto nel messaggio
news:4acef3cf$0$1112$4faf...@reader2.news.tin.it...

> Giorgio ho trovato il mio errore!!!
>
> quando eseguo la query non uso l'opzione dbSQLPassThrough.
> In realt� credevo erroneamente che avendo definito la stringa di
> connessione all'atto della definizione dell'oggetto database della
> workspace, automaticamente tutto ci� che riguardava quell'oggetto fosse
> passthrough
>
> grazie per il prezioso aiuto datomi

prego, se vuoi un consiglio abbandona il metodo che stai usando, in
Access2007 ODBCdirect � stato rimosso e se in futuro passerai alla nuova
versione otterrai un errore di runtime.

Ciao
Giorgio Rancati


nicoletta

unread,
Oct 9, 2009, 4:45:56 AM10/9/09
to
giorgio rancati ha scritto:

> "nicoletta" <frt...@virgilio.it> ha scritto nel messaggio
> news:4acef3cf$0$1112$4faf...@reader2.news.tin.it...
>> Giorgio ho trovato il mio errore!!!
>>
>> quando eseguo la query non uso l'opzione dbSQLPassThrough.
>> In realtᅵ credevo erroneamente che avendo definito la stringa di
>> connessione all'atto della definizione dell'oggetto database della
>> workspace, automaticamente tutto ciᅵ che riguardava quell'oggetto fosse
>> passthrough
>>
>> grazie per il prezioso aiuto datomi
>
> prego, se vuoi un consiglio abbandona il metodo che stai usando, in
> Access2007 ODBCdirect ᅵ stato rimosso e se in futuro passerai alla nuova
> versione otterrai un errore di runtime.
>
> Ciao
> Giorgio Rancati
>
>
quale metodo?

quello delle transazioni?

dammi per cortesia un'indicazione di come fare e la seguirᅵ.

Ho letto il documento Risorse Access + ODBC di Alex e ho seguito quello
perchᅵ dovevo fare una insert massiva su un db sql server e validarla
solo al termine del ciclo

Nicky

nicoletta

unread,
Oct 9, 2009, 4:48:39 AM10/9/09
to
giorgio rancati ha scritto:

> "nicoletta" <frt...@virgilio.it> ha scritto nel messaggio
> news:4acef3cf$0$1112$4faf...@reader2.news.tin.it...
>> Giorgio ho trovato il mio errore!!!
>>
>> quando eseguo la query non uso l'opzione dbSQLPassThrough.
>> In realtᅵ credevo erroneamente che avendo definito la stringa di
>> connessione all'atto della definizione dell'oggetto database della
>> workspace, automaticamente tutto ciᅵ che riguardava quell'oggetto fosse
>> passthrough
>>
>> grazie per il prezioso aiuto datomi
>
> prego, se vuoi un consiglio abbandona il metodo che stai usando, in
> Access2007 ODBCdirect ᅵ stato rimosso e se in futuro passerai alla nuova
> versione otterrai un errore di runtime.
>
> Ciao
> Giorgio Rancati
>
>
Non ci voleva!!!
Ho cantato vittoria troppo presto!!!

Finchᅵ scrivevo un record soltanto tutto andava correttamente (le prove
le facevo cosᅵ)
Quando i record sono stati 2 da scrivere, alla seconda insert mi ritorna
3146 ODBC: chiamata non riuscita

L'indice ᅵ univoco ma i campi in chiave contengono valori diversi per i
due record.

Nicky

giorgio rancati

unread,
Oct 9, 2009, 4:58:29 AM10/9/09
to

"nicoletta" <frt...@virgilio.it> ha scritto nel messaggio
news:4acef8e4$0$1105$4faf...@reader2.news.tin.it...

> Non ci voleva!!!
> Ho cantato vittoria troppo presto!!!
>
> Finch� scrivevo un record soltanto tutto andava correttamente (le prove le
> facevo cos�)

> Quando i record sono stati 2 da scrivere, alla seconda insert mi ritorna
> 3146 ODBC: chiamata non riuscita
>
> L'indice � univoco ma i campi in chiave contengono valori diversi per i
> due record.

Ciao Nicoletta,

"chiamata non riuscita" � un errore generico, per capire cosa � successo
devi vedere il messaggio di errore che restituisce il server.
Qui il modo per recuperarlo
----
ACC2000: How to Trap Specific ODBC Error Messages
http://support.microsoft.com/kb/209855/en-us
----

Ciao
Giorgio Rancati


nicoletta

unread,
Oct 9, 2009, 5:09:26 AM10/9/09
to
giorgio rancati ha scritto:

> "nicoletta" <frt...@virgilio.it> ha scritto nel messaggio
> news:4acef8e4$0$1105$4faf...@reader2.news.tin.it...
>> Non ci voleva!!!
>> Ho cantato vittoria troppo presto!!!
>>
>> Finchᅵ scrivevo un record soltanto tutto andava correttamente (le prove le
>> facevo cosᅵ)

>> Quando i record sono stati 2 da scrivere, alla seconda insert mi ritorna
>> 3146 ODBC: chiamata non riuscita
>>
>> L'indice ᅵ univoco ma i campi in chiave contengono valori diversi per i
>> due record.
>
> Ciao Nicoletta,
>
> "chiamata non riuscita" ᅵ un errore generico, per capire cosa ᅵ successo
> devi vedere il messaggio di errore che restituisce il server.
> Qui il modo per recuperarlo
> ----
> ACC2000: How to Trap Specific ODBC Error Messages
> http://support.microsoft.com/kb/209855/en-us
> ----
>
> Ciao
> Giorgio Rancati
>
>
Fatto e mi esce quanto segue

ODBC Error
0
[Microsoft][SQL Server Native Client 10.0]Timeout query scaduto
ODBC Error
3146
ODBC: chiamata non riuscita.

In pratica dopo aver fatto la prima insert che vedo eseguita dal debug,
alla seconda esecuzione si ferma fino al temine del timeout e poi esce
l'errore. Ovviamente mi fa il rollback e non vedo nessuna riga scritta.


Ho risposto anche al tuo post di A2007. Fammi sapere come mi dovrᅵ
muovere per il futuro

Nicky

giorgio rancati

unread,
Oct 9, 2009, 6:07:04 AM10/9/09
to

"nicoletta" <frt...@virgilio.it> ha scritto nel messaggio
news:4acef841$0$1105$4faf...@reader2.news.tin.it...

> quale metodo?

no, non farci caso, a prima vista avevo scambiato la Opendatabase con la
Openconnection.

Ciao
Giorgio Rancati

MA

unread,
Oct 9, 2009, 6:09:58 AM10/9/09
to

"nicoletta" <frt...@virgilio.it> ha scritto nel messaggio
news:4acee284$0$1112$4faf...@reader2.news.tin.it...

Togliti tutti i problemi di conversione che tra a americano ed italiano sono
sempre dolori
usa long

VALUES Clng(tuadata)

giorgio rancati

unread,
Oct 9, 2009, 6:28:05 AM10/9/09
to

"nicoletta" <frt...@virgilio.it> ha scritto nel messaggio
news:4acefdc3$0$1113$4faf...@reader2.news.tin.it...

> Fatto e mi esce quanto segue
>
> ODBC Error
> 0
> [Microsoft][SQL Server Native Client 10.0]Timeout query scaduto
> ODBC Error
> 3146
> ODBC: chiamata non riuscita.
>
> In pratica dopo aver fatto la prima insert che vedo eseguita dal debug,
> alla seconda esecuzione si ferma fino al temine del timeout e poi esce
> l'errore. Ovviamente mi fa il rollback e non vedo nessuna riga scritta.

bisogna capire se � effettivamente un problema di timeout o se � un problema
di blocco record.
Se � effettivamente un problema di timeout lo risolvi eseguendo i comandi
non tramite Db.Execute ma tramite un oggetto querydef in cui andrai ad
impostare un ODBCTimeout pi� alto.

Se � un problema di blocco dei record devi scoprire chi blocca cosa e vedere
come risolvere.
Pu� essere d'aiuto la stored procedure sp_lock da eseguire con management
studio nel contesto del tuo database, per come interpretarla ti rimando al
manuale di sql server.

Ciao
Giorgio Rancati


giorgio rancati

unread,
Oct 9, 2009, 6:29:50 AM10/9/09
to

"MA" <sp...@spam.it> ha scritto nel messaggio
news:han25o$9pu$1...@tdi.cu.mi.it...

>
> Togliti tutti i problemi di conversione che tra a americano ed italiano
> sono sempre dolori
> usa long
>
> VALUES Clng(tuadata)

Ma, stiamo parlando di Sql server e di query Pass-Through
In Sql server non esiste la funzione Clng()
:-)
Giorgio Rancati


giorgio rancati

unread,
Oct 9, 2009, 7:37:11 AM10/9/09
to

"giorgio rancati" <giorgio_No_Sp...@tiscali.it> ha scritto nel
messaggio news:4acf103b$0$6841$5fc...@news.tiscali.it...

>
> Se � un problema di blocco dei record devi scoprire chi blocca cosa e
> vedere come risolvere.

ad esempio: quel recordset che apri
----


'leggo dati da altre tabelle
qdf.SQL = StringaSql
qdf.ReturnsRecords = True
Set rst = qdf.OpenRecordset(dbOpenSnapshot)

----

legge anche dalla tabella GWENXRIPPAG ?
Se s�, potrebbe bloccare le pagine della tabella fino a che tutti i dati non
sono stati recuperati.

visto che il recordset � di tipo SnapShot puoi risolvere con:
----
If rst.Eof = False Then
rst.Movelast
rst.Movefirst
End If
----
subito dopo l'apertura del recordset

poi inizi il ciclo
----
do while not rst.EOF
...
...
ecc ecc
----

Ciao
Giorgio Rancati


nicoletta

unread,
Oct 9, 2009, 8:20:22 AM10/9/09
to
giorgio rancati ha scritto:

> "giorgio rancati" <giorgio_No_Sp...@tiscali.it> ha scritto nel
> messaggio news:4acf103b$0$6841$5fc...@news.tiscali.it...
>> Se ᅵ un problema di blocco dei record devi scoprire chi blocca cosa e
>> vedere come risolvere.
>
> ad esempio: quel recordset che apri
> ----
> 'leggo dati da altre tabelle
> qdf.SQL = StringaSql
> qdf.ReturnsRecords = True
> Set rst = qdf.OpenRecordset(dbOpenSnapshot)
> ----
>
> legge anche dalla tabella GWENXRIPPAG ?
No altra tabella

> Se sᅵ, potrebbe bloccare le pagine della tabella fino a che tutti i dati non
> sono stati recuperati.
>
> visto che il recordset ᅵ di tipo SnapShot puoi risolvere con:


> ----
> If rst.Eof = False Then
> rst.Movelast
> rst.Movefirst
> End If
> ----

???????

> subito dopo l'apertura del recordset
>
> poi inizi il ciclo
> ----
> do while not rst.EOF
> ...
> ...
> ecc ecc
> ----
>
> Ciao
> Giorgio Rancati
>
>

Sono basita!!!
Sembra funzionare il movelast e movefirst.

Riesci a spiegarmelo in due parole visto che non comprendo il
ragionamento che ci sta dietro?

MA

unread,
Oct 9, 2009, 9:18:31 AM10/9/09
to

"giorgio rancati" <giorgio_No_Sp...@tiscali.it> ha scritto nel
messaggio news:4acf10a4$0$6841$5fc...@news.tiscali.it...

che scemo che sono!!!
ciao Giorgio


>
>

giorgio rancati

unread,
Oct 9, 2009, 10:55:36 AM10/9/09
to

"nicoletta" <frt...@virgilio.it> ha scritto nel messaggio
news:4acf2a83$0$1100$4faf...@reader2.news.tin.it...

> Sono basita!!!
> Sembra funzionare il movelast e movefirst.
>
> Riesci a spiegarmelo in due parole visto che non comprendo il ragionamento
> che ci sta dietro?

Ciao nicoletta,

Quando apri un recordset, il driver odbc comincia a richiedere una parte di
dati poi sospende il flusso fino a quando non viene richiesto, la
sospensione del flusso blocca la pagina (dell'indice o della tabella) che
deve essere ancora letta.

Per verificarlo metti un punto di interruzione subito dopo l'apertura del
recordset, esegui il codice, quando il codice si ferma al punto di
interruzione apri Management studio, apri una nuova query sul tuo database e
scrivi:
----
Exec sp_who2
----
tra le tante righe ne troverai una con SPID >50 (Spid Id) avente la colonna
Status = SUSPENDED , nella colonna HostName troverai il nome del tuo
computer, nella colonna DbName il nome del database e nella colona Command
troverai SELECT.

Poi esegui
----
Exec sp_lock
----
nelle righe con SPID uguale a quello indicato da sp_who2 individua la/le
righe con la colonna Type = PAG , nella colonna resource vi troverai i
numeri di pagina bloccati. La colonna ObjId indica la tabella, puoi
conoscerne il nome eseguendo:
----
SELECT OBJECT_NAME(xxxxxxxx)
----
dove xxxxxxxx � il valore che vedi in ObjId

se il blocco � a livello di pagine dell'indice, nella colonna IndId trovi il
numero dell'indice, puoi conoscere il nome dell'indice eseguendo:
----
SELECT Name FROM sys.indexes
WHERE Object_Id=xxxxxxxx AND index_id = y
----
dove xxxxxxxx � il valore che vedi in ObjId e y � il valore che vedi in
IndId

Adesso torna in VBA ed esegui la riga con rst.Movelast, torna in management
studio e riesegui la Exec sp_who2, vedrai che i blocchi a livello di pagina
non ci sono pi� perch� il client ha recuperato tutti i records.

Spero di aver chiarito, quello che rimane da capire � il perch� di un blocco
sulla tabella GWENXRIPPAG quando la stessa non fa parte della select di rst,
con queste informazioni e indagando sui risultati di sp_lock dovresti capire
il perch�.

Ciao
Giorgio Rancati


nicoletta

unread,
Oct 9, 2009, 11:21:02 AM10/9/09
to
giorgio rancati ha scritto:

> "nicoletta" <frt...@virgilio.it> ha scritto nel messaggio
> news:4acf2a83$0$1100$4faf...@reader2.news.tin.it...
>> Sono basita!!!
>> Sembra funzionare il movelast e movefirst.
>>

CUT


> Ciao
> Giorgio Rancati
>
>

Grazie mille!
Ora faccio queste verifiche.
Intanto apro un altro post sulle query pt

Nicky

0 new messages