logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Access - jak zrobić formularz wyszukujący z jednej tabeli

slonnko 26 Lis 2012 22:20 16341 21
REKLAMA
  • #1 11578847
    slonnko
    Poziom 2  
    Posty: 3
    Ocena: 1
    Witam,

    Jestem bardzo początkującym użytkownikiem Access 2007 i potrzebuje zrobić formularz wyszukujący rekordy z jednej tabeli. Mam takie pola w tabeli: imię, nazwisko, rok urodzenia, miejsce ur. W formularzy chciałabym umieścić 4 pola do wpisania wyszukiwanych słów, tzn po wpisaniu Janek w pole Imię i 1981 w pole rok, wyszukiwałby osoby o imieniu janek i okreslonym roku urodzenia (formularz dopuszczałby wolne pola). Chciałabym, że po wciśnięciu przycisku program pokazywał wyniki, np w postaci dodatkowej tabeli (może być raportu, jeśli nie da rady z tabela).

    Da się coś takiego zrobić?

    Proszę o wskazówki.

    Pozdrawiam,

    Justyna
  • REKLAMA
  • #2 11579466
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    Da się zrobić (w skrócie):
    - Tworzysz nowy formularz.
    - Kładziesz na niego 4 wspomniane pola (najlepiej tekstowe, choć z datą będzie "kłopot", przycisk (szukaj) oraz tabelę (ja w roli tabelki polecam kontrolkę o nazwie listbox).
    - Do zdarzenia "click" przycisku szukaj wstawiasz kod - który ustawia źródło danych (row source) wspomnianego listbox'a jako kwerendę SQL (przykładowo: "SELECT imie, nazwisko, rok, miejsce from tabela_danych where ... i tutaj konstruujesz warunki w oparciu o wypełnienie (lub brak wypełnienia) określonych pól tabeli.
    - pamiętasz o odświeżeniu formatki i o wstawieniu początkowych danych w listbox podczas otwierania formularza (mogą to być wszystkie dane).
    - wreszcie - pamiętasz o ustawieniu ilości kolumn i ich szerokości w żądanej tabeli (jeśli używasz listbox).

    Jak koncepcyjnie nie będziesz wiedzieć o co chodzi - pytaj.
  • REKLAMA
  • #3 11583117
    slonnko
    Poziom 2  
    Posty: 3
    Ocena: 1
    Dzięki wielkie za podpowiedź:)

    Niestety utknęłam na kontrolce listbox: jak ją dodać?
    Dodałam przycisk szukaj, ale nie bardzo wiem, jak mam wstawić to row source. Kiedy dodaje przycisk nie ma tam opcji wpisania własnego kodu. Języka SQL tez niestety nie znam.

    Proszę o łopatologiczne wytłumaczenie:/
  • #4 11583509
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    slonnko napisał:
    listbox: jak ją dodać?
    To "Pole Listy"
    slonnko napisał:
    Języka SQL tez niestety nie znam.
    To będzie ciężko.

    Zrobiłem ci gotowca, ale mam nadzieję, że do niego zaglądniesz i postarasz się zrozumieć co tam jest (a jest naprawdę niewiele).
    W razie jak coś nie zrozumiesz - pytaj.
    Mam nadzieję, że należysz do tych osób, które chcą coś wiedzieć, a nie do tych - które chcą "spokojnie prześlizgnąć się przez życie aż do śmierci".

    Dla przypomnienia - kod formularza widoczny po wciśnięciu Ctrl+G.
    Załączniki:
    • BazaElektroda.rar (21.03 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #5 16285482
    marek_kkk
    Poziom 13  
    Posty: 152
    Pomógł: 1
    Ocena: 17
    Witam
    Postanowiłem odświeżyć temat, ponieważ szukam sposobu na wykonanie dokładnie takiej samej wyszukiwarki jaką zamieścił w swojej bazie mickpr z tą różnicą, że zamiast na listy formularzu umieszczona jest tabela, z której chciałbym wyszukiwać rekordy. Jeżeli miałby ktoś jakieś sugestie, to byłbym bardzo wdzięczny za pomoc.


    pozdrawiam[/i]
  • #6 16285774
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    A w czym Ci przeszkadza lista zamiast tabelki?
    Zamiast tabelki możesz utworzyć podformularz którego dane brane są z tabelki
    Np. tak:
    Access - jak zrobić formularz wyszukujący z jednej tabeli
  • #7 16286390
    marek_kkk
    Poziom 13  
    Posty: 152
    Pomógł: 1
    Ocena: 17
    OK, gdybym został przy liście, to czy było by możliwe wykonanie poniższej operacji:
    - przy użyciu Twojej wyszukiwarki wyszukuje dany rekord na liście a następnie chcę go usunąć (i tutaj mam problem ponieważ na liście nie mogę tego wykonać)
  • #8 16287314
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    Pewnie, że możesz usunąć (lista.RemoveItem) i potem odświeżyć listę.
    Możesz też usunąć (po kluczu pierwotnym) z tabeli rekord.
    Co za problem?

    Ja zawsze jako pierwszą kolumnę (ukrytą) ustawiam na klucz pierwotny/główny (primary key). Potem łatwo operować danym rekordem (klucz mamy w me.lista - wyświetlić go w polach na formularzu itd..
  • #9 16288936
    marek_kkk
    Poziom 13  
    Posty: 152
    Pomógł: 1
    Ocena: 17
    Przepraszam za moją dociekliwość ale jestem początkujący (nawet bardzo) jeśli chodzi o Accessa.
    Poniżej załączyłem prostą bazę danych z formularzem do wprowadzania, załóżmy że moja baza jest już gotowa ale chciałbym usunąć z niej pracownika Adam, w tym celu w wyszukiwarkę wpisuję wyraz Adam i na liście pojawia mi się szukana osoba i teraz za pomocą przycisku usuń chciałbym usunąć tą osobę z list i tabeli (cały rekord) standardowy przycisku usuń nie działa i tutaj moja prośba mógłbyś podpowiedzieć jak to zrobić?
    Załączniki:
    • Baza_Lista.rar (42.62 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #10 16289362
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    W kodzie przycisku wpisz sobie:
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • #11 16289763
    marek_kkk
    Poziom 13  
    Posty: 152
    Pomógł: 1
    Ocena: 17
    Dziękuje bardzo!!! :spoko: Działa jak należy.

    Mam jeszcze jedno pytanie, w jaki sposób można wypełnić pola formularza klikając dwukrotnie w dany rekord na liście?

    pozdrawiam
  • #12 16289802
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    Zaimplementuj kod "Przy kliknięciu dwukrotnym", który odczyta dane z wybranego wiersza ListView i wstawi wartości do odpowiednich pól formularza.
    Wartości kolejnych kolumn uzyskasz przez metodę Column(index)
    np.
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    Poucz się trochę podstaw VBA i SQL (jeśli chcesz się zajmować bazami danych - to znajomość SQL-a jest IMHO niezbędna).
    SQL to prosty język DDL/DML, opanujesz podstawy w godzinę, dwie. O "left outer join"-ach pogadamy potem.
    Co do VBA - to okrojony Visual Basic (for Application) stosowany do tworzenia prostych aplikacji w pakiecie Microsoft Office (nie tylko Access).
  • REKLAMA
  • #13 16330190
    diverko
    Poziom 1  
    Posty: 1
    Hi

    Próbowałem zrobić wyszukiwarkę podobną do tej zamieszczonej w powyższym poście (z małymi modyfikacjami). Dodałem kolumnę wiek i tutaj napotkałem na problem, mianowicie chciałbym filtrować wiek w przedziałach od - do ale coś nie bardzo mi to wychodzi może koś podpowiedziałby jak wykonać taką wyszukiwarkę. Próbowałem dodać regułę w kwerendzie ale nie działa tak jak należy. (szczegóły w załączniku)


    pozdrawiam
    Załączniki:
    • BazaElektroda.rar (36.04 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #14 16330623
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    Każdy z elementów bazodanowych ma swoje "źródło danych".
    W tym przypadku lista powinna mieć swój parametr RowSource ustawiony na konkretny "SELECT". Ustawiłeś to, ale niestety twoja "Tabela kwerenda" nie działa. Od tego zacznij.
    .
    Popełniłeś przy tym kilka błędów.
    - nazwy obiektów zawierają spacje - co prosi się o kłopoty.
    - odwołujesz się w SQL bezpośrednio do obiektów formularza - co nie jest najlepszym rozwiązaniem
    - próbujesz używać wartości liczbowych z przecinkiem - jednocześnie nie dbając o to czy separatorem jest przecinek ',' czy kropka '.'
    .
    Ja osobiście nie preferuję używania wartości konkretnych obiektów formularza w kodzie kwerendy. To nigdy nie działa dobrze. Za to preferuję używania predefiniowanych kwerend pomocniczych (to co robisz obliczając wiek z daty urodzenia można by przejrzyściej zrobić w kwerendzie dodatkowej- co uprościło by budowanie i rozwijanie programu).
    Drugą metodą stosowaną i/lub przeze mnie jest budowanie całej składni SQL w postaci składania SELECT'a w kodzie formularza. Ta metoda umożliwia tworzenie skomplikowanych kwerend opartych o pola formularza i inne parametry (np. przekazane z formularza wywołującego podformularz. Niestety ma też i wady - wymagana jest dbałość o przejrzystość konstrukcji kodu SQL kwerendy.
    To jest najprostszy (zapewniam Cię) filtr.
    Access - jak zrobić formularz wyszukujący z jednej tabeli
  • #15 16906836
    alwernia
    Poziom 1  
    Posty: 1
    Witam,

    podbijam temat. Dopiero zaczęłam pracę w programie Access 2017. Chcę stworzyć bazę danych, spośród której można będzie wyszukiwać rekordy wg pewnych wartości, pochodzących z jednej, zbiorczej tabeli. Zaczęłam od utworzenia Tabeli, do której wprowadziłam kilkaset rekordów. Tabela składa się z ok. 20 kolumn, każda opisuje odrębną właściwość. Głównie są to dane liczbowe.
    Chciałabym utworzyć coś w rodzaju jednego, zbiorczego, uniwersalnego formularza wyszukiwania, który zawiera wszystkie właściwości, w osobnych polach, ich tolerancje oraz przycisk "Szukaj", a korzystanie z nich jest za każdym razem indywidualne, tzn. wyszukuje się za każdym razem względem innych właściwości (np. po objętości i po wysokości zbiornika, a za chwilę po średnicy i po wymiarach dna), także pod względem ich ilości (np. po 3 właściwościach, a za chwilę po 7 właściwościach z 20 właściwości wprowadzonych; za każdym razem więcej niż 1). Sprawę utrudnia fakt, że nie we wszystkich rekordach w tabeli są wprowadzone wszystkie dane 20 właściwości (tj. w niektórych mam dane tylko dotyczące zbiornika i instalacji, a w innych jedynie te, dotyczące instalacji).
    Wyszukiwanie miałoby odbywać się następująco: wpisywano by wartości i ich tolerancje (by wyszukiwanie odbywało się np. dla wartości 2500m3 właściwości "objętość zbiornika" z tolerancją 20%, a program wyrzucałby rekordy odnoszące się do danej właściwości w przedziale 2500m3+/-20%). Tolerancje są stąd, że nie wiedziałam jak inaczej w prosty sposób zrobić wyszukiwanie w danych przedziałach. Taki Formularz zawierający wszystkie pola zrobiłam, dodałam okna z tolerancjami, opisałam operatorem Between <wyr> And <wyr>. Problem zaczyna się w momencie wpisania danych - nie wiem jak zrobić, by wyszukiwanie mogło odbywać się po wpisaniu części danych, tj. uzupełnieniu jedynie kilku pól z całego formularza. Zeby w momencie wyszukiwania np. po 4 właściwościach reszta z nich nie miała wpływu na wynik, wyłaczałą się automatycznie z wyszukiwania. Specyfika przypadku polega na tym, że nie mogę skonstruować jednego, sztywnego formularza wyszukiwania - za każdym razem wyszukiwanie może odbywać na podstawie innych właściwości spośród tych 20-tu, które znajdują się w tabeli - czasami są to dwie wartości właściwości, czasami 10. W momencie, gdy nie wpiszę danych do wszystkich okien - program nie daje żadnych wyników, chciałabym by dopuszczał puste okna. Próbowałam już wyłączać ręcznie pola, które w danym momencie nie są potrzebne (we właściwościach formularza), podzielić ten duży formularz zawierający 20 właściwości na kilka mniejszych, jednak nie przyniosło to rezultatu. Program musi być w miarę "samodzielny" - mają go obsługiwać osoby, które nie pracują na codzień w Accessie, więc muszą to prosto wyszukiwać.
    Chciałabym, żeby po naciśnięciu przycisku "Szukaj" program wyrzucał wyniki w postaci tabeli, która zawiera wszystkie 20 właściwości lub w formie jakiegoś raportu.
    Jest możliwość, by taki formularz wyszukiwania jakoś zrobić?

    Z góry dziękuje za każdą pomoc i pozdrawiam
  • #16 16909551
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    Najprościej zrobić to programowo - a więc kwerendę twoją (która wyszukuje odpowiednie rekordy z tabeli tworzyć w VBA.
    Przykładowo (upraszczam). Masz tabelę z polami ABCD i szukasz pól które mają A w zadanym przedziale i/lub (to jest ważne, bo od tego zależy rodzaj kwerendy) B w zakresie drugim.
    Kod: SQL
    Zaloguj się, aby zobaczyć kod
    .... itd.. .
    jeśli jakiejś wartości nie ma w bazie - to trzeba zamiast
    Kod: SQL
    Zaloguj się, aby zobaczyć kod

    wpisać :
    Kod: SQL
    Zaloguj się, aby zobaczyć kod

    Myślę, że to rozwiąże problem filtrowania rekordów które sa puste
  • #17 17188818
    GoldCannon
    Poziom 2  
    Posty: 4
    Witam mam ogromny problem ze stworzeniem formularza wyszukującego. Czytałem wcześniejsze wpisy, pobierałem przykładowe pliki które potem chciałem przystosować do swojej bazy danych. Niestety nie jestem programistą nie mam bladego pojęcia co robię źle ale cały czas wyskakuje mi błąd. 100 % że coś zrobiłem źle i już nie wiem jak z tego wybrnąć. Prowadzę firmę która zajmuje się renowacją i produkcją mebli moja baza składa się z min. tabeli w której jest id-Termin realizacji, imię, nazwisko, miejscowość, ulica, nr domu, zamówienie, materiał, hurtownia, cena itd. Chciałem zrobić formularz wyszukujący generalnie prawie po wszystkim tzn imię, nazwisko, zamówienie, miejscowość, cena. Mam bardzo dużo klientów powiedzmy że kiedy wszystko uzupełnię będzie z 50 rekordów, problemem jest przeszukiwanie wszystkiego żeby znaleźć potrzebne mi informacje do złożenia zamówienia w hurtowni. Potrzebuję pomocy. Załączam moją na razie okrojoną bazę, gdyby ktoś chciał na to spojrzeć i pomóc mi to ogarnąć postaram się odwdzięczyć. Chciałem nadmienić że baza powstawała na bazie tutoriali na YT oraz informacji na forach.
    Załączniki:
    • Baza Klientów.7z (39.62 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #18 17355041
    kuba3813
    Poziom 2  
    Posty: 3
    Cześć,

    Ogarnąłem sobie wyszukiwanie rekordów zgodnie z poradą, ale odgrzewam temat gdyż potrzebuję aby po wyszukaniu rekordów były aktywne hiperlinki.
    Czy jest takie coś możliwe do zrobienia.
    Za wszelką pomoc wielkie dzięki :)
  • #19 17359171
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    @kuba3813 - rozszerz temat. Gdzie mają być te hiperlinki? Jako rekordy w tabelce?
  • #20 17360963
    kuba3813
    Poziom 2  
    Posty: 3
    mickpr napisał:
    @kuba3813 - rozszerz temat. Gdzie mają być te hiperlinki? Jako rekordy w tabelce?


    Cześć,

    Zobacz formularz "wyszukaj sales" . Jak dasz wyszukaj to jedna kolumna jest z hyperlinkiem, który jako wynik wyszukiwania jest nieaktywny, a ja bym potrzebował, żeby można śmiało otwierać. Czy jest możliwość żeby to ogarnąć?

    Dzięki
    Załączniki:
    • SOP_TREE_NEW1.rar (190.8 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #21 17423813
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    Wygląda na to, że link nie może być elementem listy. Ciężko mi powiedzieć. Zawsze możesz oprogramować kliknięcie (podwójne) na wierszu listy by otworzyło Ci podany w jakiejś kolumnie link.
  • #22 18521363
    kuba3813
    Poziom 2  
    Posty: 3
    Cześć,
    Robię bazę w accesie dla ułatwienia sobie pracy i mam jedną zagwozdkę. W związku z tym, że można mnie nazwać "świeżakiem" w kwestich vba i sql potrzebuję wsparcia.
    Mianowicie w Form1 stworzyłem wyszukiwarki. Po wpisaniu numeru pozycji z query makro wyszkuje dane jako wiersze w oknach. Problem w tym, że potrzebuję aby jedno z okien miało sumę wyników na dole i nie mam pojęcia jak mogę stworzyć taki kod.

    Access - jak zrobić formularz wyszukujący z jednej tabeli


    Będę wdzięczny za pomoc.
    Załączniki:
    • Claim 2020.zip (297.94 KB) Musisz być zalogowany, aby pobrać ten załącznik.

Podsumowanie tematu

✨ W dyskusji poruszono temat tworzenia formularza wyszukującego w Microsoft Access 2007, który umożliwia wyszukiwanie rekordów z jednej tabeli na podstawie różnych kryteriów, takich jak imię, nazwisko, rok urodzenia i miejsce urodzenia. Użytkownicy dzielili się wskazówkami dotyczącymi dodawania kontrolek, takich jak listbox, oraz implementacji kodu SQL do filtrowania danych. Pojawiły się również pytania dotyczące usuwania rekordów oraz wypełniania pól formularza na podstawie wybranych elementów listy. W dalszej części dyskusji użytkownicy omawiali bardziej zaawansowane funkcje, takie jak filtrowanie według przedziałów wiekowych oraz implementację hiperlinków w wynikach wyszukiwania.
Wygenerowane przez model językowy.
REKLAMA