Newsgroup: it.comp.appl.access
Titolo: maschera lenta a chiudere

Salve
ho problema con la function Transpose perchè 
la maschera impiega diverso tempo a chiudersi,
su che evento va messo?
grazie 

Puoi spiegare meglio di cosa stai parlando...?
Il vba di access non ha la funzione di cui parli, quindi se non ci spieghi il contesto è facile fraintendere.
 
@Alex


grazie Alex
questa function
Function Transpose()
  Dim dbCur As DAO.Database
  Dim RS1_1 As Recordset, RS1_2 As Recordset, Rs2 As Recordset
  Dim strSql As String
  Dim nMiaFatt As String, nMiaNCred As String
  Dim DataMiaFatt As Variant, DataMiaNCred As Variant, DataInc As Variant
 
  Set dbCur = CurrentDb
 
  ' abilita la riga se devi pulire la tabella di destinazione
  dbCur.Execute "DELETE * FROM TbFattureOriz;"
 
  strSql = "SELECT IdCar, IdSc1" _
    & " FROM DFatture" _
    & " GROUP BY IdCar, IdSc1" _
    & " HAVING IdCar Is Not Null;"
  Set RS1_1 = dbCur.OpenRecordset(strSql, dbOpenSnapshot)
 
  If Not RS1_1.EOF Then
    Set Rs2 = dbCur.OpenRecordset("TbFattureOriz", dbOpenDynaset)
    Do Until RS1_1.EOF
      nMiaFatt = ""
      nMiaNCred = ""
      DataMiaFatt = Null
      DataMiaNCred = Null
 
      Set RS1_2 = DBEngine(0)(0).OpenRecordset( _
        "SELECT * FROM TbFatture" _
          & " INNER JOIN DFatture ON TbFatture.IdFattura = DFatture.IdFattura" _
          & " WHERE DFatture.IdCar =" & RS1_1!IdCar & " And DFatture.IdSc1 =" & RS1_1!IdSc1 & ";")
 
      Do Until RS1_2.EOF
        If RS1_2!IdTipoDocumento <> 2 Then
          nMiaFatt = nMiaFatt & RS1_2!NumeroMioDoc & "-"   'IdTipoDocumento 1-3 "Fatt. n.", "Nota Deb. n."
          DataMiaFatt = RS1_2!DataMioDoc
        Else
          nMiaNCred = nMiaNCred & RS1_2!NumeroMioDoc & "-" 'IdTipoDocumento 2 "Nota Cred. n."
          DataMiaNCred = RS1_2!DataMioDoc
        End If
        RS1_2.MoveNext
      Loop
      Rs2.AddNew
      Rs2!IdCar = RS1_1!IdCar
      Rs2!IdSc1 = RS1_1!IdSc1
      If Right(nMiaFatt, 1) = "-" Then nMiaFatt = Left(nMiaFatt, Len(nMiaFatt) - 1)
      If Right(nMiaNCred, 1) = "-" Then nMiaNCred = Left(nMiaNCred, Len(nMiaNCred) - 1)
      Rs2!nMiaFatt = nMiaFatt
      Rs2!nMiaNCred = nMiaNCred
      Rs2!DataMiaFatt = DataMiaFatt
      Rs2!DataMiaNCred = DataMiaNCred
      Rs2.Update
      RS1_2.MoveFirst
      RS1_1.MoveNext
    Loop
    RS1_2.Close: Set RS1_2 = Nothing
    Rs2.Close: Set Rs2 = Nothing
  End If
 
  RS1_1.Close: Set RS1_1 = Nothing
  Set dbCur = Nothing
End Function

 Function Transpose() 
 
Questa funzione segreta opera sui records... legge e scrive svariati dati... fa 2 loop annidati...
Per capire se sia normale possa rallentare in modo eccessivo sarebbe da verificare il sistema le chiavi dei campi e gli indici per capire se il problema sono l'estrazione dei dati oppure se veramente i dati sono tantissimi.
Saranno ottimizzate quelle 2 query o ciclano dari inutili...?
 
Nella sostanza tu non contestualizzi NULLA e questo rende la tua richiesta impossibile da risolvere.
 
Quanti secondi impiega...?
Quanti records scrive...?
Quanti records cicla nel loop esterno e nel loop interno...?
Perché non impari ad usare le Transazioni che oltre alla possibilità di gestire il rollback,rende più veloce l'esecuzione del codice di scrittura...?
 
Vedi tu...
@Alex

 @Alex
ciao Alex e grazie

Se tu per primo dici che cicla dati inutili... mi preoccupa la cosa... come mi preoccupa che hai copiato del codice senza entrarci nel merito.
 
Per vedere i tempi, leggi il Timer con Debug.Print prima e dopo le varie fasi del codice fai la differenza... ma mi pare così banale...!
 
Per le tranzazioni:
https://codekabinett.com/rdumps.php?Lang=2&targetDoc=how-to-access-transaction
 
 
@Alex

 @Alex
grazie 1000


Nanetto:
Anni  fa quando ancora mi dilettavo mi presentano una applicazione che 
"rispondeva" dopo un paio di minuti (imputando il tutto al caricamento 
di immagini).
Apro il codice vedo, subito, che invece di fare 1 (dicasi una query) il 
codice ne faceva 5000 (numero a caso).
"Brillandissima" genialata.
Sai che faccio? Gli faccio fare una sola query.
Tempo di risposta al dopo? Qualche centesimo di secondo!
 
5000 query? E' "esattamente" quello che fa quel codice!
-- 
ac (y-1=x)

Alberto Luzi formulated the question :

Da quel che scrivi io non riesco a trarre chiare conclusioni.
Dichiara esattamente quale o quali tabelle sorgente hai
(Nomi, Campi, etc) e a quali condizioni vuoi da queste estrarre
record che via RS2 vuoi trasferire in TbFattureOriz.
 
Bruno


ciao Bruno
 
 TbFatture
campi: 
-IdTipoDocumento
dove 1=fatt,  2=n.cred,  3= n.deb.
-NumeroMioDoc
-DataMioDoc
-IdSc1
-IdCar
da trasferire nello stesso campo della TbFattureOriz, in questo formato:
87-90-N.C.89-93-N.D.94
dove i primi due sono numeri di fatt., al centro nota cred. a completare con nota deb.


Volevi dire "negli stessi campi della TbFattureOriz", cioè
quest'ultima tabella, la tabella di destinazione, ha gli stessi
campi di TbFatture?
E poi a quali condizioni deve avvenire il trasferimento?
Tutte le fatture indistintamente?
Perché se così stanno le cose basta fare una copia di TbFatture
e rinominarlam poi TbFattureOriz.
 
Cerca di spiegarti chiaramente.
 
Bruno

 e rinominarlam poi TbFattureOriz. 
devono riguardare lo stesso idCar


Quindi esistono gruppi di fatture con lo stesso idCar su
tbFatture e tbFattureOriz.
Ma gli idCar non sono tutti uguali e tu devi reasferire solo
quelle fatture che hanno l'idCar già esistente su rbFattureOriz.
Dico bene?
 
È l'ultima domanda!
 
Bruno

 È l'ultima domanda! 
 
lo stesso IdCar l'hanno generalmente la Nota Cred. e Nota Deb. che io vorrei avere
90-N.C.89-93-N.D.94 
dove il primo è fattura
 
 
 
 
 
 

On 04/03/2021 15:52, Bruno Campanini wrote:
Mi stupisco.
Non lo ho letto.
Ma....
il codice si puo leggere.
Ma...
Quando ci sono tre query
almeno una e' superflua e delle due rimanenti  una non serve!
E, talvolta, non serve neanche quella.
;-)
 
 
Cmq la faida tra te e Alessandro B. va avanti da vent'anni.
Quando la smetterete?
 
 
-- 
ac (y-1=x)

 Quando la smetterete?
 
Non è proprio esatto... c'è stato un burrascoso periodo iniziale,
poi è stato amore per lungo tempo, poi è tornata la bufera..
Per quanto mi riguarda io ho già smesso: c'è stata una mia
proposta di evitare colloqui reciproci.
Cosa che intendo rispettare.
 
Ti ho tranquillizzato un po'?
 
Bruno

 Ti ho tranquillizzato un po'?
 
Il 3d lo ho letto compreso la tua risposta.
E' tempo che sono "tranquillo", quasi zen,
 
 
-- 
ac (y-1=x)

 ac (y-1=x)
 
Saluti
@Alex