Wiktor Rrr

Wiktor Rrr Aptt group

Temat: Problem z Dlookup vba sql (pobieranie i automatyczne...

Witam
Mam problem z utworzeniem kodu i prosiłbym o pomoc.
Mianowicie chodzi o to aby po wpisaniu daty w polu [zakonczony] -"przycisk", pobrać tę wartość z tabeli i automatycznie przypisać ją do kolejnego pola [zalozony czas] + obliczyć nowy [szacowany czas]. Miałoby się to podziać automatycznie od pierwszego pustego pola [zakonczony] do n [zalozony czas].
Ponizej przykład tabelki jakby to miało wyglądać.


Obrazek

Temat: Problem z Dlookup vba sql (pobieranie i automatyczne...

Witam,
Bazodanowo to akurat ta załączona tabela nic nie mówi.
Dla Accessa ważny jest rekord a jak widzę na zdjęciu występuje jakieś scalenie - dla bazy danych to nie do przyjęcia. Ok, występuje grupowanie ale dla wyników z tabeli ale nie dla tabeli.

A teraz. Mierzone wartości czasu przyjmujemy dla jakiej określonej operacji (nie ważne jakiej, zależy od branży). Czas przypisujemy dla operacji, więc mamy operację i założony czas, dodatkowe minuty i czas zakończenia. Szacowany czas i Różnica wyliczane są automatycznie.

Czas założony dla nowego rekordu powinien zatem być brany jako ostatni, który wystąpił w tabeli dla danej operacji.

Bardziej obrazowo:
Wprowadzam nowy rekord DLA OPERACJI (której w załączniku nie ma). Jeżeli w tabeli występowały jakieś rekordy dla tej operacji, to pobieram ostatni czas jaki wystąpił, w innym wypadku wprowadzam aktualną datę i godzinę. Dla takiego sposobu wystarczy DLast a nie DLookup,
Kolejna rzez to pytanie czy to ma być przygotowana matryca dla czasu dla operacji? Jeżeli tak to trzeba będzie to ubrać w jakąś pętlę żeby dodała tyle rekordów do tabeli ile chcemy.
Andy L.

Andy L. ITM, VUB

Temat: Problem z Dlookup vba sql (pobieranie i automatyczne...

nie wytrzymałem: Matryca Cię ma ! :) :) :)
Wiktor Rrr

Wiktor Rrr Aptt group

Temat: Problem z Dlookup vba sql (pobieranie i automatyczne...

Dokładnie ma zaktualizować wszystkie rekordy z pustym polem [zakonczony] pobierając ostatni czas [zakonczony] i dodając wartość [dod.minuty] tworząc nowy [szacowany czas] więc powinna być jakaś pętla.
Dana pobierana jest prawidłowo po czym aktualizuje tylko pierwszy i ostatni rekord.(brakuje mi tej automatycznej aktualizacji reszty rekordów wyliczajac nowy [szacowany czas]).

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim licznik As Integer
Set rs = CurrentDb.OpenRecordset("Tabela2", dbOpenSnapshot)

'x1 = DLookup("zakonczony", "tabela2")
x1 = DLast("[zakonczony]", "tabela2", "[zakonczony] <>0")
[nowy] = DateAdd("n", [szacowany czas], x1)

rs.MoveNext

rs.Close
Set rs = Nothing
Me.Refresh

End Sub

Temat: Problem z Dlookup vba sql (pobieranie i automatyczne...

Sub Aktualizuj_Date

Dim sSQL as String
Dim dtmWynik as Date
Dim rs as DAO.Recordset

sSQL="SELECT * FROM tabela2 WHERE IsNull{[dataZakończenia]) or [dataZakończenia]=0;"

Set rs=CurrentDB.Openrecordset(sSQL,dbOpenDynaset)

With rs
While Not .EOF
dtmWynik=Nz(DLast("[dataZakonczenia]",tabela2","[ID_Operacji]=" & ![ID_Operacji]),Now)

.Edit
![dataZakonczenia]=dtmWynik
.Update
.MoveNext
Wend
.Close
End With
Set rs=Nothing
Debug.Print "Zrobione!"
End Sub

Jest petla dla określonego zbioru (dla wszystkich, których data zakończenia jest pusta lub jest równa 0) . Wypadałoby pokombinować jaką wartość ma wprowadzić i od tego jest zmienna dtmWynik (tutaj można użyć funkcji DateAdd - tylko trzeba sie zastanowić jak dla funkcji podawać wartość do dodania dla daty).
Wiktor Rrr

Wiktor Rrr Aptt group

Temat: Problem z Dlookup vba sql (pobieranie i automatyczne...

Udało mi się osiągnąć zamierzony cel. Funkcja fajnie oblicza nową datę.
Z jedną rzeczą się jeszcze męczę, mianowicie aktualizacja tych nowych danych. Aby to wykonać
muszę przechodzić kolejno przez wszystkie rekordy na formularzu (niestety docmd.gotorecord ,,aclast ani makro przejdz do ostatniego nie aktualizuje mi wszystkich rekordów - tylko ręczne przechodzenie)

Private Sub Form_Current()
Dim sSQL, ssql2, x As String
Dim dtmWynik, dtmwynik2 As Date
Dim rs As DAO.Recordset

sSQL = "SELECT * FROM torders2 WHERE [datazakonczenia] is Null"

Set rs = CurrentDb.OpenRecordset(sSQL, dbOpenDynaset)

With rs
While Not rs.EOF
x1 = DLast("roznica", "torders2")

dtmWynik = Nz(DLast("[datazakonczenia]", "torders2", "[IDorders]=" & ![IDOrders]), DateAdd("n", x1, [szacowany]))
.Edit
.Update
.MoveNext
Wend
.Close

End With

Set rs = Nothing

[nowadata] = dtmWynik

Me.Refresh
End Sub

Temat: Problem z Dlookup vba sql (pobieranie i automatyczne...

1. Ten kod to jakis zlepek z kilku kodow. Przy debugowaniu nie zwraca bledu?!
2. Operując na rekordsecie formularza nie wyrzuca bledu?!

Przeanalizujmy kod krok po kroku:
Mowimy do Accessa: dla rs przypisz pewien zbior rekordow z tabeli torders2. Dopóki zbior nie jest skonczony wykonuj operacje.
-licz zmienna dtmWynik
- mowimy ze bedziemy edytowac rekord
- potwierdzamy edycje slowem Update
- przechodzimy do nastepnego rekordu
- po wszystkim zamykamy rekordset
- czyscimy zmieną

I tu nagle pojawia sie linijka z przypisaniem do pola wartosci zmienej wyniku dla recordsetu ktory juz jest zamnkniety (gdzie jednoczesnie brakuje wykrzyknika lub odwolania do recordsetu).

Proponuję poprawić kod, ustawic formularz jako tylko do odczytu i zastosowac cos takiego co nazywa sie RecordsetClone i zaktualizować wszystkie rekordy formularza
 Set rs=Me.Recordset.Clone
'AKTUALIZACJA DANYCH
Set rs=Nothing

Dla VBA jest znaczenie gdzie dana linijka jest napisana. Access wykonuje wszystko krok po kroku (tym barziej ze jest tam petla). Kolejna rzecz jest taka ze ten kod ma za zadanie zmienic wszystkie daty wiec form musi byc na zasadzie tylko wyswietl bo cala reszta i tak sie zmieni sama.

Edit:
![NowaWartośćDoprzypisania]=dtmWynik powinna znaleźć sie pomiędzy komendami .Edit i .UpdateTen post został edytowany przez Autora dnia 04.02.19 o godzinie 08:01
Wiktor Rrr

Wiktor Rrr Aptt group

Temat: Problem z Dlookup vba sql (pobieranie i automatyczne...

Krzysztofie wielkie dzięki za poświęcony czas i wskazówki, które bardzo mi pomogły.

Temat: Problem z Dlookup vba sql (pobieranie i automatyczne...

Nie ma za co. Po to zapewne zostało stworzone to forum.

Uważam, żadne pytanie nie powinno zostać bez odpowiedzi. Z wlasnego doświadczenia wiem ile czasu i trudu zajeło mi ogarnięcie Accessa w takim stopniu jaki znam, z pełną świadomością ile jeszcze nie wiem.
Pozdrawiam



Wyślij zaproszenie do