Newsgroup: it.comp.appl.access
Titolo: recordset disconnessi

Ma esiste il modo di lavorare con
recordset disconnessi in Access?
Qui sembra di si:
http://www.executrain.it/Forum6/1047560801/Contenuti%20MOC.pdf
Grazie!
ringo

 wrote in message
news:co9f6b$98n$
1...@newsread.albacom.net

Chiarisci meglio l'esigenza....!
Con ADO è estremamente semplice, banalizzando
ti basta forzare la Connection=Nothing
ed il Recordset rimane aperto in Locale sconnesso
dal BE, questo libera enormemente il traffico di dati,
ovviamente non è tutto oro quello che liccica.....
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ovviamente non è tutto oro quello che liccica.....
Se guardiamo l'esempio seguente:
http://www.rasveronasangiovanni.it/example-adp.jpg
Il contenuto della maschera "Table scadenze" deriva da una
store procedure... allora analizzando lo scambio
di dati tra adp sql server con uno sniffer e vedo che ogni volta
che clicco sui flag della tabella c'è uno scambio di dati tra le due
parti...
Allora la mia domanda è la seguente:
"E' possibile in qualche modo che quando clicco sui flag
non mi vada ad inviare i dati a sql server visto che è inutile?"
Esiste un modo per decidere se inviare i dati o meno al server,
il recordset può essere manipolato in locale e inviare le modifiche al
server
 solo alla fine?
Questo mi servirebbe per ottimizzare lo scambio di dati... ho alcune
filiali dove non è presente l'adsl e quindi con linee analogiche
bisogna ottimizzare al massimo lo scambio dei dati....
Da qui nasce l'ide di recordset disconnessi nel senso che
me li manipolo in locale e solo quando voglio io
aggiorno i dati sul server...
Hai mai provato questo:
Batch Updates
If you use the client-side cursor library with a keyset or static cursor,
you can also take advantage of ADO's ability to perform batch updates. That
is, you can edit multiple records in a database and then send all of the
updates to the underlying OLE DB provider to be stored in a single
operation. The code in Listing 6.21 (from BulkUpdate in basRecordset) finds
all records where the contact title is "Owner," changes the title to
"Partner," and then sends all of the changes back to the database in a
single operation.
Listing 6.21
Public Sub BulkUpdate()
    ' Demonstrate the BatchUpdate method.
    ' Note that this requires both a client-side
    ' cursor, and a LockType property of
    ' adLockBatchOptimistic.
    Dim rst As ADODB.Recordset
    Dim strCriteria As String
    Set rst = New ADODB.Recordset
    strCriteria = "[ContactTitle] = 'Owner'"
    With rst
        Set .ActiveConnection = CurrentProject.Connection
        .Source = "tblCustomers"
        .CursorLocation = adUseClient
        .LockType = adLockBatchOptimistic
        .CursorType = adOpenKeyset
        .Open
        .Find strCriteria
        Do While Not .EOF
            ' There's a matching row,
            ' so change the title
            .Fields("ContactTitle") = "Partner"
            ' Skip past the current record
            ' and continue searching
            .Find strCriteria, 1
        Loop
        ' Commit all the changes
        .UpdateBatch
    End With
    rst.Close
    Set rst = Nothing
End Sub
If any of your changes can't be saved (for example, because another user has
deleted the record), a runtime error occurs. In this case, you can use the
Filter property with the adFilterAffectedRecords constant to filter the
recordset down to only those records that had problems.
Grazie e ciao rigno

 
http://www.executrain.it/Forum6/1047560801/Contenuti%20MOC.pdf
Scarica:    
http://support.microsoft.com/default.aspx?scid=kb;en-us;301987
Ti spiega che non è possibile gestire nativamente la cosa in un .ADP  (batch
updates unsupported).
Io a volte uso la modalità disconnessa con normali .mdb (connessi però a
MSDE), lavoro su tabelle locali Access e invio con una transazione i records
sul Server.
Chiaramente non è facile gestire la cosa in multiutenza, però funziona.
Con un .ADP non saprei come fare dato che non puoi avere tabelle locali: sul
documento che ti ho postato ipotizzano di lavorare con forms Unbound (troppo
complesso imho).
Ciao.

 complesso imho).
Secondo mè l'unico modo per fare quello che voglio è utilizzare degli array
temporanei in memoria,
esempio:
1) recordset_ado (lo creo partendo da una sp su sql server)
2) mi ricopio recordset_ado  in un array temporaneo in memoria
3) associo la form (continua) all'array temporaneo
4) gestisco a manina gli aggiornamenti che dovrò fare su sql server
guardando le azioni che si compiono sull'array....
5) sul lato server serviranno però dei controlli per il fatto della
multiutenza
Che ne dite? può essere una buona strada?
Grazie dei consigli
Ciao!
ringo

 ringo
Ciao
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------

 la Connection vengono trasferiti i dati.
ho provato a sconnettere il recordset impostando a nothing la connection
relativa
ma quando sconnetto il recordset non mi risulta editabile;
Specifiche del mio caso: il rs deriva da una store procedure e imposto la
tabella univoca
ed il comando di resync.
ciao
ringo

 ringo
Ciao


 Concordo... ed è per questo che ho proposto la Soluzione sopra.
Mah!
Ciao.

 Ciao.
Esatto hai colpito nel segno!
Ma secondo te Alessio è fattibile la cosa con gli array (o rs temporanei)?
Grazie!
ringo

 Ciao.
@Alex



forse non ci stiamo capendo :-(
guarda questa videata:
http://www.rasveronasangiovanni.it/example-adp.jpg
la "table scadenze" è connessa ad un recordset
che proviene da una store procedure... io vorrei che
quando l'utente clicca sui flag non mi aggiorni
il relativo campo su sql server...
Se disconnetto il rs come fa l'utente a cliccare sui flag?
grazie della pazienza!
Ciao!
ringo

 "SALVA"--> SCONNETTE
E' no: così facendo si ritorna al discorso dei controlli UnBound e dello
stormo di codice che serve per gestire la cosa.
Quanto Ringo vuole fare, gestire nativamente la modalità disconnessa, è
attualmente impossibile con un .ADP.



si esatto...
Alessio dai un'occhio qui, per creare recordset temporanei:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/admscadoddlobjects.asp
e leggi il paragrafo:
"Using Recordsets in Place of Arrays"
ciao!
ringo

> Io non ci sono riuscito, però sarebbero gradite smentite.
questa sera  copio a casa un'esempio e te lo mando!
:-)
ciao!
ringo

 Ma secondo te Alessio è fattibile la cosa con gli array (o rs temporanei)?
Cioè creare recordsets ADO in memoria e assegnarli on the fly alle Forms?


 Alessio dai un'occhio qui, per creare recordset temporanei:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/
admscadoddlobjects.asp
Mi sono spiegato male: conosco da anni la possibilità di gestire recordsets
ADO in memoria, al posto di arrays.
Purtroppo però ogni tentativo di associarli alle Forms è stato inutile:
secondo me è impossibile.

 la visualizzazione sarà limitata al minimo di quello che si deve vedere.
Questo concetto dovrebbe essere una delle basi di ogni programmatore...
che poi lo faccia il linguaggio di programmazione o il programmazione questa
è un'altra storia...
Instasare la rete con molti dati è controproducente in ogni senso:
prestazioni e affidabilità!
Ciao!
Ringo

 Ciao.
Saluti


 a quale e-mail te lo spedisco?
Con quest'e-mail continuo ad avere problemi, quindi potrei non essere in
grado di leggere.
E poi è meglio se posti il codice su icaa, può interessare a tutti  :-)
Ciao.

 di cosa sia meglio..., spesso il meglio è nemico del GIUSTO.
Guarda, non voglio far polemica, però t'invito a non volerti attaccare ai
vetri: la risposta che hai dato fraintende le richieste di Ringo e replica
quanto già avevo scritto (e implicitamente criticato):
27/11/04   11.46
"Con un .ADP non saprei come fare dato che non puoi avere tabelle locali:
sul
documento che ti ho postato ipotizzano di lavorare con forms Unbound (troppo
complesso imho)"
La modalità disconnessa non mi piace in rete LAN (è una multiutenza
castrata, specialmente quando gli utenti sono tanti); è invece utile in
remoto: e infatti MS ha concepito 
ADO.NET
 in quella direzione.
Attualmente gli .ADP non consentono di gestire nativamente la modalità
disconnessa: PUNTO.
Tornando alle tue considerazioni: sarei curioso di vedere quante
applicazioni basate su Access sulla faccia del pianeta utilizzino controlli
Unbound.
Naturalmente a parte le Demo pubblicate sul web a titolo dimostrativo  :-)
Ciao.

 Set Me.Form.Recordset = rst
Allora, prima di tutto una buona notiza e un ringraziamento da parte mia
:-)
Come ti dicevo, avevo problemi di DataBinding con Recordsets creati in
memoria: usavo praticamente lo stesso metodo che ti ha appena postato
Baraldi (che evidentemente non ha mai provato ad associare a una Form):
.addnew
...........
.update
.addnew
...........
.update
DataBinding:  NON funziona
Sostituendolo con:
.addnew
.........
.addnew
........
.UPDATEBATCH
Databinding FUNZIONA anche con Access XP!    :-)
Il recordset è aggiornabile e sono supportate le eliminazioni.
Purtroppo non gli inserimenti di nuovi records, almeno a me non
funzionano...
Ciao.

 Ciao.
Questa è una bella cosa.
Ti confermo che non ho mai associato ad una Form, ma quanto hai
esposto è decisamente un ottimo riscontro.(Polemica a parte).
    E' decisamente una cosa alla quale dare risalto.
S.S.    ;-)


Private Sub NoConnessioni()
  '
  Dim Rst As Recordset
  Set Rst = New ADODB.Recordset
  With Rst
        .Fields.Append "NomeCliente", adVarChar, 255
        .Fields.Append "Fatturato", adCurrency
        .Open
        .AddNew
        !NomeCliente = "Pippo & c. s.r.l"
        !Fatturato = "30000"
        .Update
        .AddNew
        !NomeCliente = "Pluto"
        !Fatturato = "14000"
        .Update
        .AddNew
        !NomeCliente = "Paperino"
        !Fatturato = "42000"
        .Update
        .Sort = "Fatturato DESC"
        .MoveFirst
        Do While Not .EOF()
              Debug.Print !NomeCliente, !Fatturato
              .MoveNext
        Loop
  End With
  Rst.Close
  Set Rst = Nothing
End Sub
Giusto per dare un corretto risvolto alla cosa come ti dicevo
è possibile creare RECORDSET ON_THE_FLY senza usare ARRAY
e ti passo il codice per fare un test.
Saluti...!!


 Ciao.
Stai cazzeggiando .....!!! e capisci quello che ti fa comodo.
Saluti.


 Stai cazzeggiando .....!!! e capisci quello che ti fa comodo.
Tu stai cazzeggiando, oltre a mancare di buona educazione: mah.
Ciao.

 Ciao.
'Codice che crea un recordset in memoria e lo associa alla form corrente
' funzionante su Access2003
Dim rst As ADODB.Recordset
Dim intI As Integer
' Instantiate the recordset.
Set rst = New ADODB.Recordset
' Append two fields
rst.Fields.Append "ColorID", adSmallInt
rst.Fields.Append "ColorName", adVarChar, 10
' Put some data in the recordset
rst.Open
rst.AddNew _
 Array("ColorID", "ColorName"), _
 Array(1, "Red")
rst.AddNew _
 Array("ColorID", "ColorName"), _
 Array(2, "Orange")
rst.AddNew _
 Array("ColorID", "ColorName"), _
 Array(3, "Yellow")
rst.AddNew _
 Array("ColorID", "ColorName"), _
 Array(4, "Green")
rst.AddNew _
 Array("ColorID", "ColorName"), _
 Array(5, "Blue")
rst.AddNew _
 Array("ColorID", "ColorName"), _
 Array(6, "Indigo")
rst.AddNew _
 Array("ColorID", "ColorName"), _
 Array(7, "Violet")
' Save the data. This isn't required,
' because ADO will do it for you.
rst.UpdateBatch
' Dump the recordset to the Immediate Window
rst.MoveFirst
Do Until rst.EOF
    Debug.Print rst("ColorID"), rst("ColorName")
    rst.MoveNext
Loop
rst.MoveFirst
Set Me.Form.Recordset = rst
Ciao!
ringo


io con access 2003 in un progetto adp l'ho fatto... questa sera te lo mando,
a quale e-mail te lo spedisco?
Ciao
ringo