Newsgroup: it.comp.appl.access
Titolo: sottrazione in una query

dovrei fare questo:
tabella1
 campoa
   350
   350
   680
   680
   1230
   1200
   1200
   1400
in una query dovrei ottenere nel campoB:
(premetto che non devo partire da 0 ma da 25)
campoA                   campoB
  350        350-25        325
  350        350-350        0
  680        680-350       330
  680        680-680        0
 1230        1230-680      550
 1200        1200-1230     -30
 1200        1200-1200      0
 1400        1400-1200      200
grazie
ciao e buone feste

 ha scritto nel messaggio
news:gXHO9.52366$TC5.1...@twister1.libero.it...

Solitamente i campi calcolati č meglio calcolarli nelle Form.....!!!
@Alex.

 L'importante non č dove č come
avrai anche ragione ma resta il fatto che bisogna sapere come si fa!!!!!!!!

> Solitamente i campi calcolati č meglio calcolarli nelle Form.....!!!
avrei anche combinato con la funzione di roberto
questa:
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 = 25
   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
SELECT Pippo.CampoA,
IIf(PrevRecVal("CampoA",[CampoA],"CampoA")=0,0,[Campoa]-PrevRecVal("CampoA",
[CampoA],"CampoA")) AS CampoB
FROM Pippo
ORDER BY Pippo.CampoA;
solo che succede questo:
campoA     con la funzione ottengo                   dovrei ottenere
partendo sempre da 25
335                            0
310
335                           0
0
650                           315
315
650                         315
0
1233                          613
613
1200                      -63                                               
            -63
1200                        -63
0
ecc.....
grazie
ciao

 @Alex.





335                       0
335                       0
650                    315
650                   315
1263                 613
1200                 -63
1200               -63
ecc.....
dovrei ottenere partendo sempre da 25
                   310
                     0
                  315
                    0
                  613
                 -63
                   0
un pň piů chiaro
grazie
ciao

 ha scritto nel messaggio
news:VaVO9.54060$TC5.1...@twister1.libero.it...

Se la tabella che contiene i dati si chiama Tabella1.
Se il campo di cui vuoi calcolare la "sottrazione parziale" si chiama
campoA.
Se la chiave primaria della tabella Tabella1 si chiama ID.
In un modulo del tuo database registra la seguente funzione:
Function PrevRecVal(KeyName As String, KeyValue, FieldNameToGet As String)
   Dim RS As DAO.Recordset
   On Error GoTo Err_PrevRecVal
   PrevRecVal = 0
   Set RS = CurrentDb().OpenRecordset("Tabella1", 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 "ERROR: Invalid key field data type!"
         Exit Function
   End Select
   RS.MovePrevious
   PrevRecVal = RS(FieldNameToGet)
   RS.Close
Bye_PrevRecVal:
    Exit Function
Err_PrevRecVal:
    PrevRecVal = 25
    Resume Bye_PrevRecVal
End Function
Crea una maschera che ha come origine record Tabella1 e nella quale
inserisci una casella di testo non associata.
Nell'origine record della casella di testo non associata scrivi:
=[campoA]-PrevRecVal("ID";[ID];"campoA")
dove ID č appunto il nome del campo che č la chiave primaria di Tabella1 e
campoA č il nome deldel controllo della maschera associato al campo di
Tabella1 di cui si vuole calcolare la
"sottrazione parziale".
Stai attento!!
La funzione di cui sopra fa riferimento alla libreria Microsoft DAO, quindi
se usi una versione di Access successiva a Access97, devi aggiungere al tuo
database i riferimenti a tale libreria.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

come sempre un mito
funziona!!!!!! perfetto
grazie ancora
vado a studiarla
ciao

 ha scritto nel messaggio
news:VaVO9.54060$TC5.1...@twister1.libero.it...

Fortuna che Roberto ci segue dall'alto..............!
In effetti pensavo che il tuo inghippo fosse nel realizzare la
cosa in una Query, ma in effetti ho frainteso, un caffč a Roberto.
@Alex.

 @Alex.
