Newsgroup: it.comp.appl.access
Titolo: aggiornamento lento forms con ADO

ciao a tutti
Vi spiego brevemente il problema.
Sto realizzando un piccolo gestionale solito (clienti, fatture,
magazzino ecc. ecc.) con largo uso di form non legate.
Il problema e' la lentezza dell'aggiornamento VISIVO delle form (non
dei dati delle tabelle).
Mi spiego meglio:
Ho una form con visualizzazione Maschere continue che pesca
direttamente dalla tabella Clienti (CodiceFiscale, Cognome, Nome ... )
Tramite un pulsante apro un'altra maschera non legata che mi inserisce
un nuovo cliente ; al momento della memorizzazione nella tabella
Clienti ( e questo avviena all'istante ) aggiorno la maschera
chiamante (con i dati del cliente appena inserito) e chiudo la
maschera corrente con un codice tipo :
'-- inserisco i dati con un'INSERT
'-- recupero i dati del cliente inserito
sqlLista = "select * from Clienti WHERE CodFisc = '" & sCodFisc & "'"
'passo l'SQL cosi' ottenuto alla form chiamante
Forms!fListClienti.RecordSource = sqlLista
'aggiorno la stessa
Forms!fListClienti.Requery
'se non inserisco questo ritardo la maschera frmInsCli non si aggiorna
Sleep (3000)
'chiudo la maschera corrente
 DoCmd.Close acForm, "frmInsCli"
Come posso fare per risolvere il problema visto che 3000 ms sono tanti
per un'applicazione monoutente.
Uso Access 2000
Grazie
Sam

 ha scritto nel messaggio
news:prn88u0da4oshojaj...@4ax.com...

Sicuramente qualche guru ha una soluzione più "elegante", però...
Se quando apri frmInsCli chiudi l'altra maschera e la riapri puntata sul
record inserito?
(ci mette sicuramente meno di 3 secondi...)
Paolo

 Paolo
Il problema potrebbe esserci se usando ADO chiudi e riapri la
Connessione.
Non sò come gestisci le connessioni con ADO, io non la chiudo mai, se
non
per motivi specifici, in Multiutenza.
In ogni caso mi pare strano, purtroppo però io uso ADO solo in VB
e in Access solo DAO, mai avuto problemi.
La soluzione di Paolo potrebbe essere un buon Ripiego se inserisci
anche un Docmd.Echo False prima e True dopo.
Ciao.
Alessanro. 
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

anche un Docmd.Echo False prima e True dopo.
Anche questo non e' servito
...

 
Sinceramente con VisualBasic e ADO non ho questi problemi, ma non
realizzo gli inserimenti con SQL, mi carico il Recordset con la
Tabella ed eseguo Rst.ADDNEW e al termine Rst.Update.
Nel tuo modo ipotizzo che a darti questa anomalia sia lo stato della
Connection.
Prova a farlo con l'utilizzo dei RECORDSET, vedrai che va bene....!
Alessandro.


Alessandro.
Ma ti carichi TUTTA la tabella nel recordset ?

 Ma ti carichi TUTTA la tabella nel recordset ?
Si, qual'è il problema, è il modo giusto per farlo...!!!!



Ho provato ma non va.
Forse sono io che .. (non mi piace tanto usare i recordset per
operazioni di insert)
mi puoi far vedere un poco di codice ?
Te ne sarei grato.
Sam

 Sam
Scusa, posta il CODICE che hai utilizzato per fare l'AddNew
con successivo Update,poi vediamo di aggiustarlo......!!!!


Alessandro.
io ho provato cosi':
Dim oRsCli As New ADODB.Recordset
Dim oConn As New ADODB.Connection
oConn.Open sConnectionString
oRsCli.Open "Clienti", oConn, adOpenStatic, adLockOptimistic,
adCmdTable
oRsCli.AddNew
oRsCli.Fields("CodFisc").Value = sCodFiscale
....
....
oRsCli.Update
oRsCli.Close
Set oRsCli = Nothing
oConn.Close
Set oConn = Nothing
sConnectionString e' qualcosa tipo
Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=D:\pj\2000\mlp.mdb;Persist Security Info=False
Ciao

 ho cambiato ADO in DAO e tutto funziona alla grande.
Ho avuto anch'io lo stesso problema di ritardi e mi sono sempre chiesto
come si potrebbe ovviare, per questo sarei interessato al DAO.
Ho visto usare DAO in Visual Basic ma non mi č mai capitato con Access,
potresti farmi un esempio con due righe di codice.
Mille grazie, ciao.
Gianpaolo


Gianpaolo
metti il riferimento DAO quindi
dim db as database
set db = currentdb
'se vuoi eseguire un'istruzione sql tipo insert, update, delete
db.execute( sql da eseguire )
'se vuoi un recordset
dim ors as dao.recordset
set ors = db.openrecordset
set ors = db.OpenRecordset(nometabella o sql )
ciao
Sam

Per ora ti ringrazio per la cortese risposta e non vedo l'ora di
testarlo domani.
Vista la tua gentilezza e competenza, azzardo un'altra domanda;
sull'apertura di una maschera effettuo un Dcount su una tabella
collegata che mi porta via qualche secondo, ritieni che sarebbe piu'
veloce una sql?
Hai qualche altro suggerimento?
Grazie ancora, Ciao
Gianpaolo. 


Gianpaolo. 
Non ho molta esperienza su Access, ritengo che le funzioni interne
tipo DCOUNT dovrebbero essere piu' veloci.
Ciao

 Ciao
Sbagliato.....!
Se la mole di dati è elevata conviene utilizzare SQL mirata....!
P.S. il codice per ADO mi pare corretto, ma jet lavora meglio
con DAO......!
Alessandro. 


 Se la mole di dati č elevata conviene utilizzare SQL mirata....!
Uhmm... uhmmm
non lo so...
la dcount a tutti gli effetti č l'esecuzione di una query e la realizzazione
a livello di codice macchina alla fine č la stessa di un SQL.
Direi che il contesto in cui si usa č differente:
la dcount ti restituisce un unico valore quindi dovresti applicarla piů
volte per avere valori di record diversi
una query ti da un recordset con magari piů record e quindi č piů veloce poi
riferire ad essi...
mah...
Antonio

 con DAO......!
Ho sbagliato io a scrivere, ho usato il codice ADO e vorrei provare con
DAO, e quindi sono a chiedere ancora due righe di codice come esempio.
Ringrazio anticipatamente.
GianPaolo


 set ors = db.OpenRecordset(nometabella o sql )
Per favore datemi conferma.
Grazie Ciao Gianpaolo


Grazie Ciao Gianpaolo
e' DAO
...

 e' DAO
Grazie
Ciao
