Discussione:
Accodamento dati da Access su SQL SERVER Express
(troppo vecchio per rispondere)
Morgan
2007-03-06 19:59:10 UTC
Permalink
In una applicazione ,devo accodare su tre tabelle in relazione 1-n tra di
loro
una serie di dati da altre tre tabelle .Le tabelle che ricevono i dati sono
in un sever SQL Server Express e sono linkate
tramite ODBC (origine macchina) sul FE mentre le tabelle che riversano i
dati sono locali sul FE
.Da un modulo VBA eseguo la seguente isruzione

CurrentDb.Execute ("qryAccoda_DatiCampioni"), dbSeeChanges
CurrentDb.Execute ("qryAccoda_DatiAnalisi"), dbSeeChanges
CurrentDb.Execute ("qryAccoda_DatiRisultati"), dbSeeChanges

ora mi succede che solamente la prima qry di accodamento funziona
mentre le altre due in realtà non accodano un bel niente.Se provo a
lanciare le qry direttamente dopo aver eseguito il codice VBA mi viene
detto giustamente che è imposibile , ma sul server ed anche sulle tabelle
linkate dal server nno c'è traccia di records in questione.Per completare
l'opera
se chiudo e riapro il FE e lancio direttamente le ultime due qry (una alla
volta , quindi devo
richiudere il FE e riaprirlo) funzionano e popolano correttamente le tabelle
sul server.
Queta è l'unica anomalia che ho riscontrato ,cioè per eseguire le ultime due
qry, devo chiudere
e riaprire il FE.

Che ne pensate?

P.S.
Access 2000
SQL Server Express 2005
Ambedue sulla stessa macchina
Tabelle linkate con ODBC DNS di sistema.
XP Home edition

Morgan
MA
2007-03-07 08:26:33 UTC
Permalink
In una applicazione ,devo accodare su tre tabelle in relazione 1-n tra di
loro
una serie di dati da altre tre tabelle .Le tabelle che ricevono i
dati sono in un sever SQL Server Express e sono linkate
tramite ODBC (origine macchina) sul FE mentre le tabelle che
riversano i dati sono locali sul FE
.Da un modulo VBA eseguo la seguente isruzione
CurrentDb.Execute ("qryAccoda_DatiCampioni"), dbSeeChanges
CurrentDb.Execute ("qryAccoda_DatiAnalisi"), dbSeeChanges
CurrentDb.Execute ("qryAccoda_DatiRisultati"), dbSeeChanges
ora mi succede che solamente la prima qry di accodamento funziona
mentre le altre due in realtà non accodano un bel niente.Se provo a
lanciare le qry direttamente dopo aver eseguito il codice VBA mi viene
detto giustamente che è imposibile , ma sul server ed anche sulle
tabelle linkate dal server nno c'è traccia di records in
questione.Per completare l'opera
se chiudo e riapro il FE e lancio direttamente le ultime due qry (una
alla volta , quindi devo
richiudere il FE e riaprirlo) funzionano e popolano correttamente le
tabelle sul server.
Queta è l'unica anomalia che ho riscontrato ,cioè per eseguire le
ultime due qry, devo chiudere
e riaprire il FE.
Che ne pensate?
Morgan
Ciao
Creo che non eseguendo in maniera sincrona le query, dopo la prima prt la
seconda e non trovando corrispondenza fallisce.
Prova a fare docmd.runsql e così controlli i vari passaggi. Se è così poi
troviamo una soluzione diversa
--
--
Massimiliano Amendola
www.accessgroup.it
Cisa - Conferenza Italiana Sviluppatori Access
Morgan
2007-03-07 20:04:33 UTC
Permalink
Post by MA
In una applicazione ,devo accodare su tre tabelle in relazione 1-n tra di
loro
una serie di dati da altre tre tabelle .Le tabelle che ricevono i
dati sono in un sever SQL Server Express e sono linkate
tramite ODBC (origine macchina) sul FE mentre le tabelle che
riversano i dati sono locali sul FE
.Da un modulo VBA eseguo la seguente isruzione
CurrentDb.Execute ("qryAccoda_DatiCampioni"), dbSeeChanges
CurrentDb.Execute ("qryAccoda_DatiAnalisi"), dbSeeChanges
CurrentDb.Execute ("qryAccoda_DatiRisultati"), dbSeeChanges
ora mi succede che solamente la prima qry di accodamento funziona
mentre le altre due in realtà non accodano un bel niente.Se provo a
lanciare le qry direttamente dopo aver eseguito il codice VBA mi viene
detto giustamente che è imposibile , ma sul server ed anche sulle
tabelle linkate dal server nno c'è traccia di records in
questione.Per completare l'opera
se chiudo e riapro il FE e lancio direttamente le ultime due qry (una
alla volta , quindi devo
richiudere il FE e riaprirlo) funzionano e popolano correttamente le
tabelle sul server.
Queta è l'unica anomalia che ho riscontrato ,cioè per eseguire le
ultime due qry, devo chiudere
e riaprire il FE.
Che ne pensate?
Morgan
Ciao
Creo che non eseguendo in maniera sincrona le query, dopo la prima prt la
seconda e non trovando corrispondenza fallisce.
Prova a fare docmd.runsql e così controlli i vari passaggi. Se è così poi
troviamo una soluzione diversa
Massimiliano Amendola
Ho fatto quanto mi hai indicato ed il problema rimane.
In effetti sembra un problema di sincro.
Ho provato ad eseguire anche il currentDB.execute
dichiarando esplicitamente db As DAO.Database
settando db=CurrentDB e poi chiudendolo stessa operazione ripetuta
per le tre query ma il problema non si risolve.
Rispondo qui anche ad Oscar.Avevo pensato di usare una query PT ma il
problema è che le tabelle che effettuano il caricamento sono in locale
mentre
quelle su cui vengono riversati i dati sono sul server.Al momento vorrei
mantenere
questa architettura ,anche se ,se sarà proprio necessario potro spostare
anche
queste sul server.

Morgan
MA
2007-03-08 07:43:59 UTC
Permalink
Post by Morgan
Post by MA
Post by Morgan
Morgan
Ciao
Creo che non eseguendo in maniera sincrona le query, dopo la prima
prt la seconda e non trovando corrispondenza fallisce.
Prova a fare docmd.runsql e così controlli i vari passaggi. Se è
così poi troviamo una soluzione diversa
Massimiliano Amendola
Ho fatto quanto mi hai indicato ed il problema rimane.
In effetti sembra un problema di sincro.
Ho provato ad eseguire anche il currentDB.execute
dichiarando esplicitamente db As DAO.Database
settando db=CurrentDB e poi chiudendolo stessa operazione ripetuta
per le tre query ma il problema non si risolve.
Morgan
Scusa ma io ti avevo detto runsql perchè così sai quanto record stai
accodando o lameno se parte l'accodamento, poi vediamo se arrivano
--
--
Massimiliano Amendola
www.accessgroup.it
Cisa - Conferenza Italiana Sviluppatori Access
Morgan
2007-03-08 14:09:32 UTC
Permalink
Post by MA
Post by Morgan
Post by MA
Post by Morgan
Morgan
Ciao
Creo che non eseguendo in maniera sincrona le query, dopo la prima
prt la seconda e non trovando corrispondenza fallisce.
Prova a fare docmd.runsql e così controlli i vari passaggi. Se è
così poi troviamo una soluzione diversa
Massimiliano Amendola
Ho fatto quanto mi hai indicato ed il problema rimane.
In effetti sembra un problema di sincro.
Ho provato ad eseguire anche il currentDB.execute
dichiarando esplicitamente db As DAO.Database
settando db=CurrentDB e poi chiudendolo stessa operazione ripetuta
per le tre query ma il problema non si risolve.
Morgan
Scusa ma io ti avevo detto runsql perchè così sai quanto record stai
accodando o lameno se parte l'accodamento, poi vediamo se arrivano
--
Massimiliano Amendola
www.accessgroup.it
Cisa - Conferenza Italiana Sviluppatori Access
I record della prima query venono accodati correttamente (56).
Della seconda (56) e terza(4760) nemmeno uno.

Morgan
MA
2007-03-08 14:49:51 UTC
Permalink
Post by Morgan
Post by MA
Post by Morgan
Post by MA
Post by Morgan
Morgan
Ciao
Creo che non eseguendo in maniera sincrona le query, dopo la prima
prt la seconda e non trovando corrispondenza fallisce.
Prova a fare docmd.runsql e così controlli i vari passaggi. Se è
così poi troviamo una soluzione diversa
Massimiliano Amendola
Ho fatto quanto mi hai indicato ed il problema rimane.
In effetti sembra un problema di sincro.
Ho provato ad eseguire anche il currentDB.execute
dichiarando esplicitamente db As DAO.Database
settando db=CurrentDB e poi chiudendolo stessa operazione ripetuta
per le tre query ma il problema non si risolve.
Morgan
Scusa ma io ti avevo detto runsql perchè così sai quanto record stai
accodando o lameno se parte l'accodamento, poi vediamo se arrivano
--
Massimiliano Amendola
www.accessgroup.it
Cisa - Conferenza Italiana Sviluppatori Access
I record della prima query venono accodati correttamente (56).
Della seconda (56) e terza(4760) nemmeno uno.
Morgan
vedi che così si trova la causa??
Ora bisogna capire perchè la terza è out
Siccome tu hai fatto un passaggio alla volta non è un problema di sincronia
Piuttosto di violazione di chiave, probabilmente. Ma qusto lo puoi
controllare solo tu
--
--
Massimiliano Amendola
www.accessgroup.it
Cisa - Conferenza Italiana Sviluppatori Access
Alessandro Baraldi
2007-03-08 15:42:17 UTC
Permalink
Post by MA
Post by Morgan
Post by MA
Post by Morgan
Post by MA
Post by Morgan
Morgan
Ciao
Creo che non eseguendo in maniera sincrona le query, dopo la prima
prt la seconda e non trovando corrispondenza fallisce.
Prova a fare docmd.runsql e così controlli i vari passaggi. Se è
così poi troviamo una soluzione diversa
Massimiliano Amendola
Ho fatto quanto mi hai indicato ed il problema rimane.
In effetti sembra un problema di sincro.
Ho provato ad eseguire anche il currentDB.execute
dichiarando esplicitamente db As DAO.Database
settando db=CurrentDB e poi chiudendolo stessa operazione ripetuta
per le tre query ma il problema non si risolve.
Morgan
Scusa ma io ti avevo detto runsql perchè così sai quanto record stai
accodando o lameno se parte l'accodamento, poi vediamo se arrivano
--
Massimiliano Amendola
www.accessgroup.it
Cisa - Conferenza Italiana Sviluppatori Access
I record della prima query venono accodati correttamente (56).
Della seconda (56) e terza(4760) nemmeno uno.
Morgan
vedi che così si trova la causa??
Ora bisogna capire perchè la terza è out
Siccome tu hai fatto un passaggio alla volta non è un problema di sincronia
Piuttosto di violazione di chiave, probabilmente. Ma qusto lo puoi
controllare solo tu
--
--
Massimiliano Amendola
Le query ODBC "possono" essere eseguite in modo Asincrono
dbRunAsync Esegue la query in modo asincrono. Solo per oggetti
Connection e QueryDef di ODBCDirect.

Questo può significare che normalmente sono eseguite in modo
sincrono.....

@Alex
Alessandro Baraldi
2007-03-08 15:44:39 UTC
Permalink
Post by Alessandro Baraldi
Post by MA
Post by Morgan
Post by MA
Post by Morgan
Post by MA
Post by Morgan
Morgan
Ciao
Creo che non eseguendo in maniera sincrona le query, dopo la prima
prt la seconda e non trovando corrispondenza fallisce.
Prova a fare docmd.runsql e così controlli i vari passaggi. Se è
così poi troviamo una soluzione diversa
Massimiliano Amendola
Ho fatto quanto mi hai indicato ed il problema rimane.
In effetti sembra un problema di sincro.
Ho provato ad eseguire anche il currentDB.execute
dichiarando esplicitamente db As DAO.Database
settando db=CurrentDB e poi chiudendolo stessa operazione ripetuta
per le tre query ma il problema non si risolve.
Morgan
Scusa ma io ti avevo detto runsql perchè così sai quanto record stai
accodando o lameno se parte l'accodamento, poi vediamo se arrivano
--
Massimiliano Amendola
www.accessgroup.it
Cisa - Conferenza Italiana Sviluppatori Access
I record della prima query venono accodati correttamente (56).
Della seconda (56) e terza(4760) nemmeno uno.
Morgan
vedi che così si trova la causa??
Ora bisogna capire perchè la terza è out
Siccome tu hai fatto un passaggio alla volta non è un problema di sincronia
Piuttosto di violazione di chiave, probabilmente. Ma qusto lo puoi
controllare solo tu
--
--
Massimiliano Amendola
Le query ODBC "possono" essere eseguite in modo Asincrono
dbRunAsync Esegue la query in modo asincrono. Solo per oggetti
Connection e QueryDef di ODBCDirect.
Questo può significare che normalmente sono eseguite in modo
sincrono.....
@Alex
Mi sono perso un pezzo...., questo significa che se si esegue la query
in modalità sincrona è possibile attendere il suo termine in caso di
esecuzioni multiple interrogando la proprietà StillExecuting:

Indica se l'esecuzione di un'operazione asincrona, un metodo chiamato
con l'opzione dbRunAsync, è stata completata.

Saluti
@Alex
Morgan
2007-03-08 19:36:23 UTC
Permalink
Post by Alessandro Baraldi
Post by MA
Post by Morgan
Post by MA
Post by Morgan
Morgan
Ciao
Creo che non eseguendo in maniera sincrona le query, dopo la prima
prt la seconda e non trovando corrispondenza fallisce.
Prova a fare docmd.runsql e così controlli i vari passaggi. Se è
così poi troviamo una soluzione diversa
Massimiliano Amendola
[CUT]
Post by Alessandro Baraldi
Post by MA
Post by Morgan
I record della prima query venono accodati correttamente (56).
Della seconda (56) e terza(4760) nemmeno uno.
Morgan
vedi che così si trova la causa??
Ora bisogna capire perchè la terza è out
Anche la seconda e out
Post by Alessandro Baraldi
Post by MA
Siccome tu hai fatto un passaggio alla volta non è un problema di sincronia
Piuttosto di violazione di chiave, probabilmente. Ma qusto lo puoi
controllare solo tu
nesuna violazione di chiave, anche perchè ,la stessa cosa su .mdb funziona
perfettamente.
Controllando passo passo ho notato che la prima query viene eseguita
correttamente ed i dati
sono caricati correttamente sul server, mentre poi eseguendo la seconda non
vengono accodati i dati
,ma ripeto non ci sono erorri tipo violazione di chiave.
Post by Alessandro Baraldi
Post by MA
--
--
Massimiliano Amendola
Le query ODBC "possono" essere eseguite in modo Asincrono
dbRunAsync Esegue la query in modo asincrono. Solo per oggetti
Connection e QueryDef di ODBCDirect.
Questo può significare che normalmente sono eseguite in modo
sincrono.....
@Alex
Mi sono perso un pezzo...., questo significa che se si esegue la query
in modalità sincrona è possibile attendere il suo termine in caso di
esecuzioni multiple interrogando la proprietà StillExecuting:

Indica se l'esecuzione di un'operazione asincrona, un metodo chiamato
con l'opzione dbRunAsync, è stata completata.

Mica ho capito molto.
Dovrei fare una cosa del genere?

CurrentDb.Execute ("qryAccoda_DatiCampioni"), dbSeeChanges

Do While qdfAccoda_DatiCampioni.StillExecute = True

Loop

CurrentDb.Execute ("qryAccoda_DatiAnalisi"), dbSeeChanges

etc etc.


Scusa ma mi sto perdendo.
Dovrei prima dichiarare
Dim qdfAccoda_DatiCampioni As DAO.QueryDef

Morgan
Alessandro Baraldi
2007-03-08 21:23:32 UTC
Permalink
Post by Morgan
Post by Alessandro Baraldi
Post by MA
Post by Morgan
Post by MA
Post by Morgan
Morgan
Ciao
Creo che non eseguendo in maniera sincrona le query, dopo la prima
prt la seconda e non trovando corrispondenza fallisce.
Prova a fare docmd.runsql e così controlli i vari passaggi. Se è
così poi troviamo una soluzione diversa
Massimiliano Amendola
[CUT]
Post by Alessandro Baraldi
Post by MA
Post by Morgan
I record della prima query venono accodati correttamente (56).
Della seconda (56) e terza(4760) nemmeno uno.
Morgan
vedi che così si trova la causa??
Ora bisogna capire perchè la terza è out
Anche la seconda e out
Post by Alessandro Baraldi
Post by MA
Siccome tu hai fatto un passaggio alla volta non è un problema di sincronia
Piuttosto di violazione di chiave, probabilmente. Ma qusto lo puoi
controllare solo tu
nesuna violazione di chiave, anche perchè ,la stessa cosa su .mdb funziona
perfettamente.
Controllando passo passo ho notato che la prima query viene eseguita
correttamente ed i dati
sono caricati correttamente sul server, mentre poi eseguendo la seconda non
vengono accodati i dati
,ma ripeto non ci sono erorri tipo violazione di chiave.
Post by Alessandro Baraldi
Post by MA
--
--
Massimiliano Amendola
Le query ODBC "possono" essere eseguite in modo Asincrono
dbRunAsync Esegue la query in modo asincrono. Solo per oggetti
Connection e QueryDef di ODBCDirect.
Questo può significare che normalmente sono eseguite in modo
sincrono.....
@Alex
Mi sono perso un pezzo...., questo significa che se si esegue la query
in modalità sincrona è possibile attendere il suo termine in caso di
Indica se l'esecuzione di un'operazione asincrona, un metodo chiamato
con l'opzione dbRunAsync, è stata completata.
Mica ho capito molto.
Dovrei fare una cosa del genere?
CurrentDb.Execute ("qryAccoda_DatiCampioni"), dbSeeChanges
Do While qdfAccoda_DatiCampioni.StillExecute = True
Loop
CurrentDb.Execute ("qryAccoda_DatiAnalisi"), dbSeeChanges
etc etc.
Scusa ma mi sto perdendo.
Dovrei prima dichiarare
Dim qdfAccoda_DatiCampioni As DAO.QueryDef
Morgan
Fai uno sforzo in più..... apri il visualizzatore Oggetti e cerca

StillExecuting sull'oggetto QueryDef e vedi gli esempi che trovi
nell'Help... non morde.

@Alex
Morgan
2007-03-08 22:55:27 UTC
Permalink
Post by Morgan
Post by Alessandro Baraldi
Post by MA
Post by Morgan
Post by MA
Post by Morgan
Morgan
Ciao
Creo che non eseguendo in maniera sincrona le query, dopo la prima
prt la seconda e non trovando corrispondenza fallisce.
Prova a fare docmd.runsql e così controlli i vari passaggi. Se è
così poi troviamo una soluzione diversa
Massimiliano Amendola
[CUT]
Post by Alessandro Baraldi
Post by MA
Post by Morgan
I record della prima query venono accodati correttamente (56).
Della seconda (56) e terza(4760) nemmeno uno.
Morgan
vedi che così si trova la causa??
Ora bisogna capire perchè la terza è out
Anche la seconda e out
Post by Alessandro Baraldi
Post by MA
Siccome tu hai fatto un passaggio alla volta non è un problema di sincronia
Piuttosto di violazione di chiave, probabilmente. Ma qusto lo puoi
controllare solo tu
nesuna violazione di chiave, anche perchè ,la stessa cosa su .mdb funziona
perfettamente.
Controllando passo passo ho notato che la prima query viene eseguita
correttamente ed i dati
sono caricati correttamente sul server, mentre poi eseguendo la seconda non
vengono accodati i dati
,ma ripeto non ci sono erorri tipo violazione di chiave.
Post by Alessandro Baraldi
Post by MA
--
--
Massimiliano Amendola
Le query ODBC "possono" essere eseguite in modo Asincrono
dbRunAsync Esegue la query in modo asincrono. Solo per oggetti
Connection e QueryDef di ODBCDirect.
Questo può significare che normalmente sono eseguite in modo
sincrono.....
@Alex
Mi sono perso un pezzo...., questo significa che se si esegue la query
in modalità sincrona è possibile attendere il suo termine in caso di
Indica se l'esecuzione di un'operazione asincrona, un metodo chiamato
con l'opzione dbRunAsync, è stata completata.
Mica ho capito molto.
Dovrei fare una cosa del genere?
CurrentDb.Execute ("qryAccoda_DatiCampioni"), dbSeeChanges
Do While qdfAccoda_DatiCampioni.StillExecute = True
Loop
CurrentDb.Execute ("qryAccoda_DatiAnalisi"), dbSeeChanges
etc etc.
Scusa ma mi sto perdendo.
Dovrei prima dichiarare
Dim qdfAccoda_DatiCampioni As DAO.QueryDef
Morgan
Fai uno sforzo in più..... apri il visualizzatore Oggetti e cerca

StillExecuting sull'oggetto QueryDef e vedi gli esempi che trovi
nell'Help... non morde.

@Alex

Aveccelo l'help in linea...domani me lo vedo cmq al lavoro
Cmq cercando in rete il metodo da te citato mi sembra di capire
che si utilizzi quando si lavora in maniera asincrona il che non dovrebbe
essere il mio caso.
Connessioni asincrone e queries asincrone e bisogna anche
esplicitare tale comportamento con dbRunAsync come riportato
su un esempio in rete

sSQL = "DELETE * FROM authors WHERE au_fname = 'Bert'"
Set qry = cn.CreateQueryDef("Test",sSQL)
qry.Execute, dbRunAsync ' Execute asynchronously
Do
iCount = iCount + 1
DoEvents
Loop While qry.StillExecuting
Debug.Print "Counted to " & CStr(iCount) & " while deleting"
qry.Close
questo l'ho dedotto da un vecchio articolo,ma molto istruttivo su

http://www.avdf.com/may97/art_odbcdirect.html

tra l'altro usando il codice ,adattato,sul mio rodigno,
esegue la connessione ma al momento di exeguire la query
mi ritorna addiritura una chiamata non riuscita al driver odbc....
e tra l'altro il debbuger mi dice che dbRunAsync non lo riconosce.

Che mi sfugge?

Morgan

Oscar Manfredini
2007-03-07 09:17:01 UTC
Permalink
"Morgan"
Post by Morgan
Queta è l'unica anomalia che ho riscontrato ,cioè per eseguire le ultime due
qry, devo chiudere
e riaprire il FE.
Che ne pensate?
A parte il suggerimento di MA, considera che in genere le query di comando
(update, delete,etc) di Access sono lente eseguite via ODBC.
Con poco sforzo puoi tradurre quelle stringhe SQL in query Pass Throght.

Ciao.
Continua a leggere su narkive:
Loading...