Newsgroup: it.comp.appl.access
Titolo: sottrazione parziale

Alora...mi chiamo Rudi, sono della provincia di forlě, ed č la prima volta
che accedo ad un newsgroup.
Sono alle prese con un database (per la "gestione" di un'azienda avicola
costituito da una marea di quantitŕ e quindi numeri e soltanto numeri),
impostato con Access 2000 (ho anche VB 6.0 versione Enterprise), e il mio
problema consiste nel riuscire ad effettuare una sottrazione parziale.
Mi spiego.
Attraverso una query di selezione ho ottenuto un campo (nell'esempio che
segue l'ho chiamato CAMPO A), costituito da numeri progressivi.
Esempio:
CAMPO A
   35
   57
  110
  156
  170
  198
  215
A questo punto, vorrei effettuare la sottrazione dell'ultimo meno il
penultimo e poi del penultimo meno il terzultimo e cosě via, fino al primo e
cioč:
215 - 198 = 17
198 - 170 = 28
170 - 156 = 14
156 - 110 = 46
110 -   57 = 53
 57 -   35 =  22
Ed aver poi i risultati in un nuovo campo, che potremmo chiamare CAMPO B.
Esempio:
CAMPO A       CAMPO B
   35
   57                        22
  110                       53
  156                       46
  170                       14
  198                       28
  215                       17
Ora, se fosse possibile, mi piacerebbe sapere:
- se esiste questa possibilitŕ o, altrimenti, un'indicazione per crearla.
- Se poi esistesse, quali parti - anche come codice - in Access 2000 o in VB
6.0, dovrei cercar di capire o, meglio, studiare?
Per il momento...piů che grazie, che dire?
rudi

 ha scritto nel messaggio
news:qpAq9.29686$%M1.7...@twister2.libero.it...

Se i dati sono contenuti in una tabella o in una query che si chiama Pippo.
In un modulo del tuo database registra questa funzione:
Function PrevRecVal(KeyName As String, KeyValue, FieldNameToGet As String)
   Dim RS As Recordset
   Dim db As Database
   On Error GoTo Err_PrevRecVal
   PrevRecVal = 0
   Set db = CurrentDb()
   Set RS = db.OpenRecordset("Query1", dbOpenDynaset)
   Select Case RS.Fields(KeyName).Type
      Case DB_INTEGER, DB_LONG, DB_CURRENCY, DB_SINGLE, _
           DB_DOUBLE, DB_BYTE
         RS.FindFirst "[" & KeyName & "] = " & KeyValue
      Case DB_DATE
         RS.FindFirst "[" & KeyName & "] = #" & KeyValue & "#"
      Case DB_TEXT
         RS.FindFirst "[" & KeyName & "] = '" & KeyValue & "'"
      Case Else
         MsgBox "ERRORE: Tipo dati del campo non valido!"
         Exit Function
   End Select
   RS.MovePrevious
   PrevRecVal = RS(FieldNameToGet)
   RS.Close
Bye_PrevRecVal:
    Exit Function
Err_PrevRecVal:
    Resume Bye_PrevRecVal
End Function
A questo punto creati una query chiamata Query1 che abbia questo codice SQL:
SELECT Pippo.CampoA,
IIf(PrevRecVal("CampoA",[CampoA],"CampoA")=0,0,[Campoa]-PrevRecVal("CampoA",
[CampoA],"CampoA")) AS CampoB
FROM Pippo
ORDER BY Pippo.CampoA;
Attento a due cose:
1) la funzione fa riferimento alle librerie DAO, quindi, visto che usi
Access 2000, occorre che al tuo database aggiungi i riferimenti a tali
librerie.
2) la funzione contiene il nome della query ( Set RS =
db.OpenRecordset("Query1", dbOpenDynaset) ), quindi se non la chiamerai
Query1, correggi di conseguenza quello statement VBA.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------