Piotr Wójcik

Piotr Wójcik energetyk, elektryk,
komputerowiec

Temat: Access - jak podświetlić aktywny wiersz w w formularzu...

Jak w temacie:
Jak podświetlić aktywny wiersz w w formularzu ciągłym ?

Temat: Access - jak podświetlić aktywny wiersz w w formularzu...

W wersji filmowej ;-).
https://www.youtube.com/watch?v=nDH6YWYJELc

Jeżeli będą jakieś niejasności to znajdzie się i omówienie do filmu.
Piotr Wójcik

Piotr Wójcik energetyk, elektryk,
komputerowiec

Temat: Access - jak podświetlić aktywny wiersz w w formularzu...

No tak, ten sposób jest od zdaje się 1999 roku powielany. Dziwne trochę karkołomne, powinno być prostrze rozwiązanie za pomocą np. VBA kolorowanie pól w aktywnym wierszu, ale cóż może kiedyś.

Może pytanie drugie - zakładam, że formularz ciągły jest wyświetlany w trybie do podglądu czyli bez możliwości modyfikacji. To jeśli już mamy podświetlony aktywny wiersz, to jak teraz np. przyciskiem "Modyfikuj" pobrać jego dane do nowego formularza w którym moglibyśmy modyfikować te wielości ? Czy jakaś kwerenda na podstawie kryteriów ? czy też da się pobrać dane rekordu i wyświetli w osobnym formularzu do modyfikacji ? A może podformularz ? albo formularz dzielony z tabelą danych ?

Temat: Access - jak podświetlić aktywny wiersz w w formularzu...

Ale dla VBA rozwiązanie byłoby bliźniaczo podobnie. Rożnica byłaby jedynie w sposobie zaznaczania rekordu (to co robi formatowanie warunkowe) i zamiast pola, w którym jest przechowywana wartość StateID byłaby to zmienna.

Występuje takie zdarzenie jak "Przy_Malowaniu" ale odnosi sie ono do raportu i nie jest ono dynamicznym narzędziem.

Skąd przekonanie że formularz ciągły jest tylko do wyświetlania danych?!

Formularz to formularz - ma za zadanie wyświetlić i pozwolić użytkownikowi na modyfikacje danych w formacie jaki projektant aplikacji ustawił. Rodzaj formularza "Formularz ciągły" mówi że Access wyświetli wszystkie rekordy, które ma w recordset'ie a nie jak w przypadku formularza pojedyńczego, że trzeba będzie nawigować pomiędzy rekordami.
We właściwościach formularza można ustawić co dany formularz ma robić. Np chciałbym aby form wyświetla mi tylko dane, bez możliwości edycji/usuwania/dodawania nowych rekordów, no to pach.
Otwieram panel właściwości i ustawiam wartości dla formularza:
"Wprowadzanie danych:" Nie
"Dodawanie dozwolone:" Nie
"Usuwanie dozwolone:" Nie
"Edycja dozwolona:" Nie

Jak pobrać dane z formularza ciągłego? tak samo jak z każdego innego. Np dla jakiejś zmiennej przypisujemy wartość z pola. Wartość pola będzie odnosić sie do pola w aktualnie zaznaczonym rekordzie (po to jest StateID)
Dim zmienna
Zmienna=Me.NazwaPolaWFormularzu

Czy wstawić przycisk "Modyfikuj"? To zależy od projektu i intencji projektanta. Równie dobrze można wartość zmienić w form ciągłym.
Piotr Wójcik

Piotr Wójcik energetyk, elektryk,
komputerowiec

Temat: Access - jak podświetlić aktywny wiersz w w formularzu...

Ahh, tak wiem uczę się.
Co do pierwszego postu - prosto to wideo wyglądało ale w praktyce coś mi nie działa - konkretnie nie działa mi linia w VBA:
Private Sub Form_Current()
txtNrwiersza = stateid
End Sub
A konkretnie StateID - jak widzisz jest z małych liter i ciągle ma wartość = EMPTY, przy wpisywaniu STATEID - nie podpowiada się tak jak na filmie - może w tym jest problem.
Może to nie powinno by STATEID tylko CURRENT RECORD ?

No nic, co do projektu, tak właśnie skonfigurowałem formularz żeby nie można było zmieniać rekordów - tylko odczyt. A record aktualny były podświetlany. po czym po kliknięciu przycisku modyfikuj wyświetli się nowy formularz, który pozwoli na modyfikację tylko tego jednego wiersza a nie dowolnego. Jeśoli do nowego formularza pobiorę dane jakoś tak:
Dim zmienna
Zmienna=Me.NazwaPolaWFormularzu
to chyba nie będę mieć połączenia z tabelą ? a chyba to było by najprostsze.
Piotr Wójcik

Piotr Wójcik energetyk, elektryk,
komputerowiec

Temat: Access - jak podświetlić aktywny wiersz w w formularzu...

Dobra, taka procedura wyświetla kliknięty rekord: 1, 2, 3,

Private Sub Form_Current()
txtNrwiersza = Me.Form.CurrentRecord
End Sub

przy czym to chyba nie rekord tylko pozycja w formularzu bo przy innym posortowaniu dalej jest 1,2,3 a powinno być np. 2,3,1 jeśli to byłby faktycznie rekord tabeli źródłowej, więc jest to pole listy.

Skoro już wiem który rekord jest aktywny - polecenie Current Record, to teraz jak pokolorować to konkretne pole w formularzu ciągłym - np. 3 wiersz ?

Temat: Access - jak podświetlić aktywny wiersz w w formularzu...

Połączenie z tabelą nawiązuje sie na podstawie recordset'u. Przy wywołaniu form pojedyńczego trzeba Access'owi powiedzieć że ma z danego zbioru wybrać określony rekord i tylko jego wyświtlić. Np.:
DoCmd.OpenForm "Nazwa_Formualrza_Pojedynczego", , , "[ID_Rekordu]=" & Me.txtID_Rekordu_Form_Ciaglego

[ID_Rekordu] - jezt nazwą pola w tabeli do której jest polączony form.
Czo do jakiegoś przykładu z podświetlania to postaram sie to zrobić już wieczorem.

Temat: Access - jak podświetlić aktywny wiersz w w formularzu...

https://1drv.ms/u/s!AttmjDiVAHWDpHOiYzLE1yKTrtj4
Piotr Wójcik

Piotr Wójcik energetyk, elektryk,
komputerowiec

Temat: Access - jak podświetlić aktywny wiersz w w formularzu...

Dzięki, zaczytuję się......
Piotr Wójcik

Piotr Wójcik energetyk, elektryk,
komputerowiec

Temat: Access - jak podświetlić aktywny wiersz w w formularzu...

Krzysztof B.:
Połączenie z tabelą nawiązuje sie na podstawie recordset'u. Przy wywołaniu form pojedyńczego trzeba Access'owi powiedzieć że ma z danego zbioru wybrać określony rekord i tylko jego wyświtlić. Np.:
DoCmd.OpenForm "Nazwa_Formualrza_Pojedynczego", , , "[ID_Rekordu]=" & Me.txtID_Rekordu_Form_Ciaglego

[ID_Rekordu] - jezt nazwą pola w tabeli do której jest polączony form.
Czo do jakiegoś przykładu z podświetlania to postaram sie to zrobić już wieczorem.

Ok, jako ID recordu podaje Currrent Record i wybieram z klucza głównego Record o takim numerze . Tylko że to inny rekord mi wyświetla bo w formularzu mam inaczej chyba posortowane rekordy niż w tabeli wystepują.
Innymi słowy jak odczytać pole klucza głównego z tabeli dla wybranego rekordu w pierwszym formularzu po to żebym mógł otworzyć w drugim formularzu dokładnie ten sam rekord o takim samym kluczu głównym. (Dodam, że klucz główny nie jest wyświetlany na formularzu)

Temat: Access - jak podświetlić aktywny wiersz w w formularzu...

Sortowanie ti nie ma nic do rzeczy.
Current record? Why?

Rozwiązanie polega na takiej troche pęlki pomiędzy ID rekordu (którego nie masz w form) i wartości ID z pola utworzonego.

Reasumując ID wstaw ale jednocześnie jeżeli nie chcesz go pokazywać to ukryj pole ID rekordu a całą sekwencję zaznaczania dynamicznego zrealizuj zgodnie z załącznikami. Nie wiem jakie jest źródło dla form (tabela, kwerenda). Nie wystarczy że ID będzie w recordset'ie. Pole ID musi być w formularzu (nie koniecznie widoczne).
Piotr Wójcik

Piotr Wójcik energetyk, elektryk,
komputerowiec

Temat: Access - jak podświetlić aktywny wiersz w w formularzu...

Krzysztof B.:
Sortowanie ti nie ma nic do rzeczy.
Current record? Why?

Rozwiązanie polega na takiej troche pęlki pomiędzy ID rekordu (którego nie masz w form) i wartości ID z pola utworzonego.

Reasumując ID wstaw ale jednocześnie jeżeli nie chcesz go pokazywać to ukryj pole ID rekordu a całą sekwencję zaznaczania dynamicznego zrealizuj zgodnie z załącznikami. Nie wiem jakie jest źródło dla form (tabela, kwerenda). Nie wystarczy że ID będzie w recordset'ie. Pole ID musi być w formularzu (nie koniecznie widoczne).

No trochę nie rozumiem, może później podeślę przykład. Poprostu robiąc według tej formuły:
DoCmd.OpenForm "Nazwa_Formualrza_Pojedynczego", , , "[ID_Rekordu]=" & Me.txtID_Rekordu_Form_Ciaglego
gdzie za [ID_Rekordu] wstawiam pole z tabeli o nazwie [Identyfikator] otrzymuję wprawdzie nr rekordu o numerze 3 tyle że jest to inny rekord niż chciałem - jest to rekord o identyfikatorze 3. Sądzę (nie mam pewności) że w formularzu CurrentRecord wskazuje na wiersz numer 3 ale jest to rekord nr 2 z tabeli Sprawdził bym to jak bym się dowiedział jak wyświetliś w VBA pola tabeli dla CurrentRecord.

Temat: Access - jak podświetlić aktywny wiersz w w formularzu...

Czekam na przykład.
Piotr Wójcik

Piotr Wójcik energetyk, elektryk,
komputerowiec

Temat: Access - jak podświetlić aktywny wiersz w w formularzu...

Tu przykład
https://1drv.ms/u/s!AnHJpJigB2_yjEQ_wAWC5oUDgizN

Opis:
Jak zaznaczysz owoc na liście i klikniesz Modyfikuj - otworzy się formularz, z tym właśnie rekordem do modyfikacji.
Ale jeśli na liście włączysz sortowanie i wówczas kliniesz modyfikuj to wyświetli się formularz z innym rekordem niż zaznaczony.

Zauważyłem jeszcze że to i tak jest słabe, bo działa jak filtr - formularz do modyfikacji nie wyświetla tylko tego konretnego rekordu tylko całą tabele z Filtrem ustawionym na ten konkretny rekord. A filtr można wyłączyć i wówczas cała tabela jest dostępna. Nie tak miało być.
Piotr Wójcik

Piotr Wójcik energetyk, elektryk,
komputerowiec

Temat: Access - jak podświetlić aktywny wiersz w w formularzu...

Dobra znalazłem ... problem był w ME.CurrentRecord - zamiast tego powinienem podać w VBA ME.ID lub w moim przypadku ME.Identyfikator gdyż ten wskazuje na konkretne unikalne pole a polecenie Current Record na bieżący rekord ale na liście formularza a nie w tabeli. Current Record nie zmiania się podczas sortowania danych w formularzu.

A jak to zrobić żeby móc modyfikować tylko jeden konkretny rekord - bo teraz można wyłączyć filtrowanie poprostu i cała tabela jest dostępna. w formularzu. A chciałem pobrać tylko jeden rekord a nie wszystkie.Ten post został edytowany przez Autora dnia 26.02.19 o godzinie 19:52

Temat: Access - jak podświetlić aktywny wiersz w w formularzu...

CurrentRecord zmienia sie ale trzeba Accessowi powiedziec zeby pobral nową wartość.

Co do reszty to to zadam pytanie. Czy formularz:
Opcja 1. Ma posiadać jako recordset tylko te rekordy które już zostaly wybrane?
Opcja 2. Ma posiadać wszystkie rekordy a ich filtrowanie realizowane jest bezpośrednio w formularzu?

To sa dwie różne kwestie.
Opcja 1. W najprostszy sposób to można to zrobic poprzez stworzenie kwerendy i ustawinie jej jko źródło danych dla formularza
Opcja 2. Bardziej wymagająca. Trzeba stworzyć pola które beda pozwalały na filtrowanie rekordów (czy to przez wstawienie pol do formularza czy poprzez wywolania innego formularza - technika dowolna). Po czym trzeba Accesowi powiedziec (napisać makro lub VBA) zeby rekordy filtrowal zgodnie z podanymi kryteriami podanymi w polach.

Edit:
Jeżeli chodzi o załączony plik. Wszystko działa jak należy. Formularz otwiera się z filtrowaniem. Dlaczego? Ponieważ źródłem danych dla niego jest Tabela1 czyli wszystkie możliwe rekordy, a zapis "[Identyfikator]="& Me.Identyfikator" mówi Accessowi, że ma przejść do rekordu gdzie Identyfikator jest równy Identyfikatorowi a aktywnego formularza. Jeżeli przeszkadza pasek nawigacji na dole formularza to można go wyłączyć poprzez ustawienie pola "Przyciski nawigacyjne" na wartość "Nie" w Arkuszu właściwości . Oczywiście właściwości muszą odnosić się do formularza.Ten post został edytowany przez Autora dnia 26.02.19 o godzinie 20:55
Piotr Wójcik

Piotr Wójcik energetyk, elektryk,
komputerowiec

Temat: Access - jak podświetlić aktywny wiersz w w formularzu...

Krzysztof B.:
CurrentRecord zmienia sie ale trzeba Accessowi powiedziec zeby pobral nową wartość.

Co do reszty to to zadam pytanie. Czy formularz:
Opcja 1. Ma posiadać jako recordset tylko te rekordy które już zostaly wybrane?
Opcja 2. Ma posiadać wszystkie rekordy a ich filtrowanie realizowane jest bezpośrednio w formularzu?

To sa dwie różne kwestie.
Opcja 1. W najprostszy sposób to można to zrobic poprzez stworzenie kwerendy i ustawinie jej jko źródło danych dla formularza
Opcja 2. Bardziej wymagająca. Trzeba stworzyć pola które beda pozwalały na filtrowanie rekordów (czy to przez wstawienie pol do formularza czy poprzez wywolania innego formularza - technika dowolna). Po czym trzeba Accesowi powiedziec (napisać makro lub VBA) zeby rekordy filtrowal zgodnie z podanymi kryteriami podanymi w polach.

Opcje nr 2 już zrobiliśmy w naszych przykładach tak to właśnie działa. I chyba jest najprostsze. Wystarczy wyłączyć s formularzu filtrowanie i wszystko.

Opcją 1 faktycznie fajnie tylko powiela ilość elementów bazy.

Ja porostu nie wiem jak to się praktycznie robi tzn wprowadzanie i przeglądanie danych.
Ale jeszcze poczytam dzięki.

Temat: Access - jak podświetlić aktywny wiersz w w formularzu...

Opcja 2. Nie o to mi chodziło. Bardziej na zasadzie pola kombi i po jego aktualizacji formularz sie sam filtruje w zależności od zawartości.
Opcja 1. Właśnie nie. Dlaczego? Ponieważ przygotowuje sie tylko jeden raport wynikowy a poprzez obiekty pomocnicze (formularze nawigacyjne z opcjami wyboru) buduje sie źródło dla tego jednego konkretnego formularza.
Przykład.
Mam formularz "Wyswietl produkty", w którym jest kilka pól wyboru, np checkbox z opcjami wyboru (Aktywne, Nieaktywne). Wybierając jedną opcji i naciśnięciu jakiegoś przycisku uruchamia mi się nowy formularz, którego źródłem danych jest recordset zbudowany na SQL. I tak w zdarzeniu On_Load formularza wstawiam linijkę kodu
 Me.RecordSource = sSQL
Me.Refresh

gdzie sSQL jest zmienną globalną zadeklarowaną jako String i przyjmuje np postać
"SELECT * FROM Tabela1 WHERE Tabela1.Rodzaj='Aktywne'"


Duze rozbudowane aplikacje mają z reguły bardzo dużo obiektów, A czego mają jeszcze więcej to linijek kodu do wybierania danych z pośród dostępnych i implementowania ich w już stworzonych formularzach/raportach.
Pozdrawiam



Wyślij zaproszenie do