Newsgroup: it.comp.appl.access
Titolo: Operazioni in Background con Access

Salve a tutti,
siccome dovrei tenere aggiornata una tabella
faccio un loop ogni mezz'ora di una tabella.
Questo però no dovrebbe tenere impegnata un pc.
Impegnando il pc, nel senso di fargli are solo
questo lui in relatà,
apre una tab articoli, una acquisti, e una vendita
e scorre i 3 rst.
Ma farlo n maniera trasparente all'operatore???
E' possibile fare una cosa del genere?
tks
MAssimiliano

 ha scritto nel messaggio
news:ZXoWc.11656$B06....@news.edisontel.com...

Access non può lavorare in BackGround, per farlo devi
usare VB / VC++ / VFoxPro e tutti quei programmi StandAlone.
Nel momento steso che apri Access l'operatore lo vede, anche
se ricorri a nascondere la Form MDI che avviene sono dopo
l'apertura dell'applicativo.
Fallo in VB, se ha installato VB_RUNTIME ti crei un applicativo
senza Form, lanci una Function Main che esegue quello che dici.
Ovvio che per la ciclicità devi schedularlo.
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------

VFoxPro
Con questo prodotto non ci giurerei proprio ...
Pixel
P.S:  magari si può ottenere quello che chiede anche senza ficcare
l'applicazione in Tray Bar, il fatto è che MA non si è spiegato proprio
benissimo.

 ha scritto nel messaggio
news:FvqWc.57089$OH4.1...@twister1.libero.it...

Non insisto sul VFP, ma aggiungo Pascal.
Non credo gli freghi nulla della TryBar, gli importa solo "a quanto capito"
che l'utente non veda nulla.
La domanda era rivolta alla possibilità di usare Access.
La risposta secondo me è NO.
Vuoi provare un MDE con Tree e ListView API generated...?
Ciao.


 Vuoi provare un MDE con Tree e ListView API generated...?
Hai aggiornato il tuo sito?
Vado a vedere...
Ciao, Simone/Pixel

 ha scritto nel messaggio
news:ZXoWc.11656$B06....@news.edisontel.com...

Ciao MA
potresti creare uno Script VBS con il codice che aggiorna le tabelle poi lo
inserisci nelle *Operazioni Pianificate* di Windows
Ciao Giorgio

 Ciao, Simone/Pixel
No, per ora non lo pubblico.
Funziona benissimo però.
Se vuoi l'MDE per provarlo e vedere come và anche senza OCX.
te lo mando-


 te lo mando-
Porco can ...
Meglio se usi quest'indirizzo:  
simo...@libero.it
Ciao, Simone

 ha scritto
nel messaggio
news:cgdi3o$7s6$1...@lacerta.tiscalinet.it...

Era proprio quello a cui pensavo.
Devo vedere cosa riesco a fare: credo pochissimo,
cmq.
MAssimiliano

> Vuoi provare un MDE con Tree e ListView API
generated...?
Lo sai che sono un cav... napoletano curioso!!!!
Lo mandi anche a me??
MAssimiliano


Caro Giorgio,
se scrivo le operazioni di rst, posso contare
sulla tua collaborazione per renderlo in VBS?
Tks
MAssimiliano

 wrote in message
news:YwBWc.11716$
B06....@news.edisontel.com

Abboccato..!
Questa sera da casa te lo invio.
@Alex.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 MAssimiliano
certamente :-)
Ciao Giorgio


Allora se avessi dovuto farlo con Access, più o
meno avrei fatto così:
Private Sub Form_Load()
Dim art As DAO.Recordset
Dim ven As DAO.Recordset
Dim acq As DAO.Recordset
Dim ord As DAO.Recordset
Dim TotVen As Double
Dim TotReso As Double
Dim TotAcq As Double
Dim FiltAcq As String
Dim FiltVen As String
Dim FiltOrd As String
'Il database è nel percorso Q:\be_xp.mdb
Set art = CurrentDb.OpenRecordset("articoli")
Set acq = CurrentDb.OpenRecordset("acquisto")
Set ven = CurrentDb.OpenRecordset("vendita")
Set ord = CurrentDb.OpenRecordset("InOrdine")
'Mi preparo i 3 filtri così l'istruzione è più
chiara
FiltAcq = "Acqcodice = '" & art!codice & "'"
FiltVen = "vencodice = '" & art!codice & "'"
FiltOrd = "codiceord = '" & art!codice & "'"
With art
    .MoveFirst
    'Nella tabella vendita differenzio tra
venduto, reso e sospeso
    'grazie alla motivazione.
    'L'operazione algebrica deve essere salvato
nel campo apposito della
    'tabella Articoli
    Do
        TotVen = DSum("[qtà]", ven, FiltVen And
IsNull(!motivazione))
        TotReso = DSum("[qtà]", ven, FiltVen And
!motivazione = "r")
        TotAcq = DSum("[quantitacq]", acq,
FiltAcq)
        !giacenza = Nz(TotAcq) - Nz(TotVen) +
Nz(TotReso)
        !Sospeso = DSum("[qtà]", ven, FiltVen And
!motivazione = "s")
        !InOrdine = DSum("[qtà]", ord, FiltOrd)
        .Update
        .MoveNext
    Loop Until .EOF
art.close
ord.close
reso.close
acq.close
set art = nothing
set ord = nothing
set acq = nothing
set reso = nothing
End With
End Sub
Mi dai una controllatina e me lo "traduci in Vbs.
TIA
MAssimiliano

 Mi dai una controllatina e me lo "traduci in Vbs.
OK,
adesso devo uscire, in serata ti posto un esempio
Ciao Giorgio

 ha scritto nel messaggio
news:szFWc.11754$B06....@news.edisontel.com...
[CUT]
Ok fatto e testato, incolla il testo in NotePad e salvalo con estensione
VBS.
Per Testarlo poi anche inserirlo in una sub di Access così come è.
(attenzione agli eventuali a capo)
Ciao Giorgio
-----------------------------------
Dim DbEng    'DbEndine DAO 3.6
Dim Db       'Database Dao
Dim Art      'Recorset articoli
Dim Rs       'Recordset di comodo
Dim TotVen
Dim TotReso
Dim TotAcq
Dim TotSospeso
Dim TotInOrdine
Dim FiltAcq
Dim FiltVen
Dim FiltOrd
Dim strSql
Set DbEng = CreateObject("DAO.DBengine.36")
Set Db = DbEng.OpenDatabase("Q:\be_xp.mdb")
Set Art = Db.OpenRecordset("Select * From articoli")
   'Nella tabella vendita differenzio tra venduto, reso e sospeso
   'grazie alla motivazione.
   'L'operazione algebrica deve essere salvato nel campo apposito della
   'tabella Articoli
   Do
       FiltAcq = "Acqcodice = '" & Art.Fields("Codice") & "'"
       FiltVen = "vencodice = '" & Art.Fields("Codice") & "'"
       FiltOrd = "codiceord = '" & Art.Fields("Codice") & "'"
       ' Rilevo Totale Vendite
       TotVen = 0
       strSql = "SELECT SUM([Qtà]) AS TotQt FROM Vendita WHERE " & FiltVen &
" And IsNull(motivazione)=-1"
       Set Rs = Db.OpenRecordset(strSql)
       If Rs.RecordCount <> 0 Then
          If IsNull(Rs.Fields("TotQt")) = False Then
             TotVen = Rs.Fields("TotQt")
          End If
       End If
       Rs.Close
       Set Rs = Nothing
       ' Rilevo Totale Reso
       TotReso = 0
       strSql = "SELECT SUM([Qtà]) AS TotQt FROM Vendita WHERE " & FiltVen &
" And motivazione = 'r'"
       Set Rs = Db.OpenRecordset(strSql)
       If Rs.RecordCount <> 0 Then
          If IsNull(Rs.Fields("TotQt")) = False Then
             TotReso = Rs.Fields("TotQt")
          End If
       End If
       Rs.Close
       Set Rs = Nothing
       ' Rilevo Totale Acquisto
       TotAcq = 0
       strSql = "SELECT SUM([quantitacq]) AS TotQt FROM acquisto WHERE " &
FiltAcq
       Set Rs = Db.OpenRecordset(strSql)
       If Rs.RecordCount <> 0 Then
          If IsNull(Rs.Fields("TotQt")) = False Then
             TotAcq = Rs.Fields("TotQt")
          End If
       End If
       Rs.Close
       Set Rs = Nothing
       ' Rilevo Totale Sospeso
       TotSospeso = 0
       strSql = "SELECT SUM([Qtà]) AS TotQt FROM Vendita WHERE " & FiltVen &
" And motivazione = 's'"
       Set Rs = Db.OpenRecordset(strSql)
       If Rs.RecordCount <> 0 Then
          If IsNull(Rs.Fields("TotQt")) = False Then
             TotSospeso = Rs.Fields("TotQt")
          End If
       End If
       Rs.Close
       Set Rs = Nothing
       ' Rilevo Totale in Ordine
       TotInOrdine = 0
       strSql = "SELECT SUM([Qtà]) AS TotQt FROM InOrdine WHERE " & FiltOrd
       Set Rs = Db.OpenRecordset(strSql)
       If Rs.RecordCount <> 0 Then
          If IsNull(Rs.Fields("TotQt")) = False Then
             TotInOrdine = Rs.Fields("TotQt")
          End If
       End If
       Rs.Close
       Set Rs = Nothing
      Art.Edit
      ' Aggiorno campi
      Art.Fields("giacenza") = TotAcq - TotVen + TotReso
      Art.Fields("Sospeso") = TotSospeso
      Art.Fields("InOrdine") = TotInOrdine
      Art.Update
      Art.MoveNext
    Loop Until Art.EOF
Art.Close
Set Art = Nothing
Db.Close
Set Db = Nothing
Set DbEng = Nothing
---------------------------

 [CUT]
umm la lettura dei vari totali si può ottimizzare in questo modo
Ciao Giorgio
------------------------------------





       ' Rilevo Totale Vendite
       strSql = "SELECT SUM([Qtà]) AS TotQt FROM Vendita WHERE " & FiltVen &
" And IsNull(motivazione)=-1"
       TotVen = LeggiTotale(strSql)
       ' Rilevo Totale Reso
       strSql = "SELECT SUM([Qtà]) AS TotQt FROM Vendita WHERE " & FiltVen &
" And motivazione = 'r'"
       TotReso = LeggiTotale(strSql)
       ' Rilevo Totale Acquisto
       strSql = "SELECT SUM([quantitacq]) AS TotQt FROM acquisto WHERE " &
FiltAcq
       TotAcq = LeggiTotale(strSql)
       ' Rilevo Totale Sospeso
       strSql = "SELECT SUM([Qtà]) AS TotQt FROM Vendita WHERE " & FiltVen &
" And motivazione = 's'"
       TotSospeso = LeggiTotale(strSql)
       ' Rilevo Totale in Ordine
       strSql = "SELECT SUM([Qtà]) AS TotQt FROM InOrdine WHERE " & FiltOrd
       TotInOrdine = LeggiTotale(strSql)
      Art.Edit
      ' Aggiorno campi
      Art.Fields("giacenza") = TotAcq - TotVen + TotReso
      Art.Fields("Sospeso") = TotSospeso
      Art.Fields("InOrdine") = TotInOrdine
      Art.Update
      Art.MoveNext
    Loop Until Art.EOF
Art.Close
Set Art = Nothing
Db.Close
Set Db = Nothing
Set DbEng = Nothing
Function LeggiTotale(strSql)
  Dim Totale
  Totale=0
  Set Rs = Db.OpenRecordset(strSql)
  If Rs.RecordCount <> 0 Then
     If IsNull(Rs.Fields(0)) = False Then
        Totale = Rs.Fields(0)
     End If
  End If
  Rs.Close
  Set Rs = Nothing
  LeggiTotale=Totale
End Function
----------------------------

 ------------------------------------
[CUT]
Giorgio, sono commosso dalla tua disponibilità e
spirito di perfezionismo ed ammirato dalla tua
competenza.
Mille e mille grazie, ad una veloce scorsa è
perfetto. Adesso lo metto in pratica
e ci metto un file di log, che mi dice a che ora è
stato ultimato l'ultimo aggiornamento.
Ciao MAssimiliano