konto usunięte

Temat: Obliczenia na rekordach

Witam,

Szukam rozwiązania problemu może ktoś mi pomoże.
Mam tabelę z następującymi danymi:

Stan początkowy = 10

MIESIAC WARTOSC ROZNICA
--------------------------------------
styczeń 100 100-10 = 90
luty 500 500-90 = 410
marzec 1300 1300-410 = 890
kwiecień 2500 2500-890 = 1610
--------
=3000

Chciałbym aby formuła liczyła RÓŻNICĘ pomiędzy kolejnymi rekordami a następnie sumowała powstałe wartości.

PozdrawiamPaweł Stolarczyk edytował(a) ten post dnia 20.05.08 o godzinie 20:54
Dawid Porowski

Dawid Porowski Ducunt volentem
fata, nolentem
trahunt

Temat: Obliczenia na rekordach

piszesz formula :>

chcesz to zrobic w vba czy za pomoca kwerendy ?

konto usunięte

Temat: Obliczenia na rekordach

rowiazaniem moze byc kwerenda lub vba nie ma znaczenia dla mnie
Jacek Dzwonkowski

Jacek Dzwonkowski Informatyk, Bazy
danych, OEE

Temat: Obliczenia na rekordach

użyj funkcji tablicowej DSUM
Dawid Porowski

Dawid Porowski Ducunt volentem
fata, nolentem
trahunt

Temat: Obliczenia na rekordach

ok wiec mozesz uzyc np funkcji DSUM z okreslonym kryterium, albo proste makro w vba

np cos takiego:

Set db = CurrentDb
Set rec = db.OpenRecordset("aaaaa") '
wartp = 10
suma = 0

Do While Not rec.EOF
suma = suma + (rec.Fields(1) - wartp)
wartp = rec.Fields(1) - wartp
rec.MoveNext
Loop

rec.Close

MsgBox suma

jak cos to sluze pomoca :)

pozdro

konto usunięte

Temat: Obliczenia na rekordach

Doskonale, bardzo dziękuję Wszystkim za pomoc:)

konto usunięte

Temat: Obliczenia na rekordach

Dawid Porowski:
ok wiec mozesz uzyc np funkcji DSUM z okreslonym kryterium, albo proste makro w vba

np cos takiego:

Set db = CurrentDb
Set rec = db.OpenRecordset("aaaaa") '
wartp = 10
suma = 0

Do While Not rec.EOF
suma = suma + (rec.Fields(1) - wartp)
wartp = rec.Fields(1) - wartp
rec.MoveNext
Loop

rec.Close

MsgBox suma

jak cos to sluze pomoca :)

pozdro

Próbowałem użyć tego kodu, niestety nie udało się:(
pod "aaaaa" podstawiłem nazwę kwerendy
rec.Fields(1) nazwę pola w kwerendzie
wyświetla się okno z suma = -10
a jak podstawię nazwę pola zamiast (1) to mam komunikat, że nie znaleziono obiektu w tej kolekcji
Dawid Porowski

Dawid Porowski Ducunt volentem
fata, nolentem
trahunt

Temat: Obliczenia na rekordach

aaaaa - nazwa tabeli badz kwerendy (koniecznie w " ")
rec.Fields(1) - numer pola(kolumny) w recordsecie/tabeli (numeracja zaczyna sie od 0!)

wydaje mi sie ze blad jest wlasnie w numerze pola
fields(1) oznacza druga kolumne, nie pierwsza
natomiast jesli chcesz zastosowac nie numer pola lecz nazwe to trzeba ja dac w cudzyslow ""

daj znac czy cos to dalo

ps
stworzylem sobie taka przykladowa tabele jak w pierwszym poscie i dzialalo bez zarzutu :)

konto usunięte

Temat: Obliczenia na rekordach

Ok miałeś racje działa.

Ale nie o taki efekt mi chodziło.
Na końcu kod wyświetla w msbox sumę wszytskich różnic,
ja z kolei potrzebuję tablicę z różnicami(oznaczone poniżej "") w poszczególnych rekordach.
Informację chcę umieścić w raporcie.

MIESIAC WARTOSC ROZNICA
--------------------------------------
styczeń 100 100-10 = "90"
luty 500 500-90 = "410"
marzec 1300 1300-410 = "890"
kwiecień 2500 2500-890 = "1610"
Dawid Porowski

Dawid Porowski Ducunt volentem
fata, nolentem
trahunt

Temat: Obliczenia na rekordach

oops no to troche nie zrozumialem :P

w takim wypadku, skoro mamy juz kod vba, wystarczy ze uzyjesz jakiejs zmiennej tablicowej. np deklarujesz gdzies wczesniej zmienne:
dim suma (20) as double, i as integer

a potem w tej petli zamiast wiersza "suma=......"
dasz:
suma(i) = (rec.Fields(1) - wartp)
i=i+1

i powinno byc ok
roznice beda zapisane pod zmienna tablicowa suma i mozesz je obrabiac jak Ci wygodniej.

jesli chcesz je np miec w tej samej tabelce to sprawa jeszcze sie upraszcza bo wystarczy:

Set db = CurrentDb
Set rec = db.OpenRecordset("aaaaa")
wartp = 10

Do While Not rec.EOF
rec.Fields(2) = (rec.Fields(1) - wartp)
wartp = rec.Fields(1) - wartp
rec.MoveNext
Loop

rec.Close

ale musisz juz miec wczesniej gotowa trzecia kolumne/pole

konto usunięte

Temat: Obliczenia na rekordach

Witam,

Przepraszam byłem na szkoleniu 3 dni we wtorek sprawdzę algorytm i dam znać.

Pozdrawiam

konto usunięte

Temat: Obliczenia na rekordach

Dawid Porowski:
oops no to troche nie zrozumialem :P

w takim wypadku, skoro mamy juz kod vba, wystarczy ze uzyjesz jakiejs zmiennej tablicowej. np deklarujesz gdzies wczesniej zmienne:
dim suma (20) as double, i as integer

a potem w tej petli zamiast wiersza "suma=......"
dasz:
suma(i) = (rec.Fields(1) - wartp)
i=i+1

i powinno byc ok
roznice beda zapisane pod zmienna tablicowa suma i mozesz je obrabiac jak Ci wygodniej.

jesli chcesz je np miec w tej samej tabelce to sprawa jeszcze sie upraszcza bo wystarczy:

Set db = CurrentDb
Set rec = db.OpenRecordset("aaaaa")
wartp = 10

Do While Not rec.EOF
rec.Fields(2) = (rec.Fields(1) - wartp)
wartp = rec.Fields(1) - wartp
rec.MoveNext
Loop

rec.Close

ale musisz juz miec wczesniej gotowa trzecia kolumne/pole
Po użyciu powyższego kodu mam komunikat:
Wywołanie metody Update lub CancelUpdate bez wywołania metody AddNew lub Edit. (Błąd 3020)

eh eh eh
Dawid Porowski

Dawid Porowski Ducunt volentem
fata, nolentem
trahunt

Temat: Obliczenia na rekordach

kurde tak to jest jak sie pisze bez probowania :P

Sub test()

Set db = CurrentDb
Set rec = db.OpenRecordset("atest") 'nazwa tabeli/kwerendy
wartp = 10
Dim suma()
i = 0

Do While Not rec.EOF
redim preserve suma (i+1)
suma(i) = (rec.Fields(1) - wartp)
wartp = rec.Fields(1) - wartp
rec.MoveNext
i = i + 1
Loop

For j = 0 To i - 1
MsgBox suma(j)
Next

rec.Close
End Sub

a sama tabelka testowa wyglada tak
msc kwst 100lu 500mar 1300kw 2500

konto usunięte

Temat: Obliczenia na rekordach

Dawid Porowski:
kurde tak to jest jak sie pisze bez probowania :P

Sub test()

Set db = CurrentDb
Set rec = db.OpenRecordset("atest") 'nazwa tabeli/kwerendy
wartp = 10
Dim suma()
i = 0

Do While Not rec.EOF
redim preserve suma (i+1)
suma(i) = (rec.Fields(1) - wartp)
wartp = rec.Fields(1) - wartp
rec.MoveNext
i = i + 1
Loop

For j = 0 To i - 1
MsgBox suma(j)
Next

rec.Close
End Sub

a sama tabelka testowa wyglada tak
msc kwst 100lu 500mar 1300kw 2500

Chyba nam się nie uda pokazuje się:

Za mało parametrów. Oczekiwano <liczba>. (Błąd 3061)
Ta kwerenda parametryczna wymaga określonej liczby parametrów, które nie zostały podane. Podaj oczekiwaną liczbę parametrów i uruchom ponownie kwerendę.

W niektórych przypadkach komunikat ten jest generowany, gdy jako parametry kwerendy interpretowane są nieznane nazwy pól lub wyrażenia. Upewnij się, czy nazwy pól zawierających spacje lub znaki przestankowe zostały ujęte w nawiasy kwadratowe [ ].

Podobne tematy


Następna dyskusja:

Obliczenia w Accessie




Wyślij zaproszenie do