Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Access] - VBA wyszukiwanie w tabeli

23 Jul 2013 07:45 7434 31
  • Level 14  
    Oprogramowaniem w VBA trochę się już zajmuje ale w excelu a nie Accessie więc potrzebuję pomocy. Mianowicie mam stworzyć skrypt który chcę umieścić w formularzu gdzie po wpisaniu z palca pesela wciskam przycisk i z bazy wyszukuje mi pozostałe dane pracownika. Docelowo zrobię żeby dane te wskakiwały do raportu i będę je stamtąd drukował ale z tym już wiem jak sobie poradzić dlatego potrzebuję pomocy tylko z tym fragmentem skryptu. Jeżeli to pomocne to tabela nazywa się : dbo.pracownicy kolumny w niej Pesel, Imię, Nazwisko, kod, ulica, Miejscowość.

    Czy macie jakieś pomysły? Raczej to trudne nie jest pewnie na zasadzie "SELECT..." ale zanim to sam rozgryzę to trochę czasu minie a jednak obecnie nie mam tyle czasu na samodzielną naukę.

    Pozdrawiam,
  • Level 39  
    Na formularzu pole tekstowe txtPesel oraz pozostałe w tej konwencji (txt+NazwaPola).
    Obok pola przycisk Wyszukaj -> w jego zdarzeniu kod (nie skrypt :) ).

    Code: vb
    Log in, to see the code


    Pisałem z palca (nie sprawdzałem w Access czy są błędy).
    Ale coś w ten deseń powinno działać.
  • Helpful post
    Level 39  
    Zakładam, że w nagłówku formularza masz niezwiązane pole tekstowe, gdzie wpisujesz PESEL. W zdarzeniu 'po aktualizacji' masz kod:

    Code: vb
    Log in, to see the code


    Można też utworzyć kwerendę takim samym selectem i wtedy tę samą kwerendę użyjesz do formularza i raportu. Wtedy:

    Code: vb
    Log in, to see the code


    Tak jest wg mnie prościej.
  • Level 39  
    PRL wrote:
    Można też utworzyć kwerendę takim samym selectem i wtedy tę samą kwerendę użyjesz do formularza i raportu.
    Prościej będzie "moim" sposobem.
    Nie wiem czemu na upartego chcesz tworzyć głupią kwerendę do takiej duperelki.
    A gdybyś takich "hocków-klocków" miał w bazie 1000 - to stworzysz 1000 kwerend?
    Stosowanie kwerend ma oczywiście sens, ale raczej do zestawów rekordów (a nie do wyłuskania pojedynczych rekordów).
    Przykładowo - do stworzenia przefiltrowanego zestawu wybranych rekordów z bazy.
  • Level 39  
    Kolego, Twój sposób nie jest prostszy, co widać po ilości kodu, to po pierwsze.
    Po drugie jedna kwerenda będzie wykorzystana do formularza i raportu.
    Po trzecie kwerenda, to nie obiekt zabierający duże zasoby, lecz prosty string SELECT...
    Po czwarte łatwiej modyfikować kwerendę w razie jakiś późniejszych zmian.

    P.S. Dlaczego nazywasz kwerendę głupią?
    W ostatnim projekcie mam około 300 'głupich' kwerend...
  • Helpful post
    Level 39  
    PRL wrote:
    Twój sposób nie jest prostszy, co widać po ilości kodu, to po pierwsze.
    Dołóż do twojej kwerendy logikę aplikacji (wypełnianie pól formularza) i twój kod będzie o WIEEEEEEEEELE dłuższy.
    PRL wrote:
    Po drugie jedna kwerenda będzie wykorzystana do formularza i raportu.
    W jaki sposób?
    Do wyłuskania paru pól stosujesz zewnętrzną kwerendę - nie obraź się.. ale to jakaś pomyłka.
    Co innego, jeśli formatka ma zawierać jakąś listę/tabelę - wtedy tak. Zwłaszcza jeśli robisz kwerendy parametryczne.
    Ale nie dla jednego rekordu!!!!!
    Dalej twierdzę - że to błąd.

    PRL wrote:
    Po trzecie kwerenda, to nie obiekt zabierający duże zasoby, lecz prosty string SELECT...
    Po czwarte łatwiej modyfikować kwerendę w razie jakiś późniejszych zmian.
    Nie obraź się, ale mówisz głupoty.
    PRL wrote:
    W ostatnim projekcie mam około 300 'głupich' kwerend...
    I o czym to świadczy?

    Nie jest moją intencją kogoś obrażać.. ale naprawdę - zastanów się czy do paru pól musisz uruchamiać zewnętrzną kwerendę, potem (i tak) do niej w kodzie robić odnośniki/zapytanie - czy nie lepiej to zapytanie zrobić od razu do samej bazy?
  • Level 39  
    Quote:
    Dołóż do twojej kwerendy logikę aplikacji (wypełnianie pól formularza) i twój kod będzie o WIEEEEEEEEELE dłuższy.


    Dłuższy od tego?
    Code: vb
    Log in, to see the code


    Po co stosujesz w swoim kodze recordset? Recordesty stosuje się m.in. wtedy, gdy istnieje potrzeba zrobienia czegoś, czego kwerenda nie wykona.

    Quote:
    W jaki sposób?
    Do wyłuskania paru pól stosujesz zewnętrzną kwerendę - nie obraź się.. ale to idiotyzm.
    Co innego, jeśli formatka ma zawierać jakąś listę/tabelę - wtedy tak. Zwłaszcza jeśli robisz kwerendy parametryczne.

    Co to jest zewnętrzna kwerenda?
    Bo kwerenda w tym samym pliku mdb nie jest zewnętrzną.
    To, czy kwerenda zwróci 1 rekord, czy milion zależy tylko od zapytania.
    Kwerenda, którą użyje autor jest właśnie kwerenda parametryczna.

    Quote:

    Dalej twierdzę - że to pomyłka.
    Ale nie dla jednego rekordu!!!!!

    Jeszcze raz: zapytanie nie zależy od ilości zwróconych rekordów.

    P.S. Jak chcesz ze mną podyskutować na temat Akcesa, to zapraszam na PW, a nie tutaj.
  • Level 14  
    dzięki za szybką i trafną pomoc!
  • Level 39  
    PRL wrote:
    Dłuższy od tego?
    Dłuższy....
    Zrób działający przykład - pochwal się kodem.
    Wtedy wszyscy zobaczymy.
    PRL wrote:
    Co to jest zewnętrzna kwerenda?
    To kwerenda tworzona poza kodem formularza - od którego nie uciekniesz (autor postu chce wpisywać PESEL w formularzu i na nim otrzymać efekt).
    PRL wrote:
    To, czy kwerenda zwróci 1 rekord, czy milion zależy tylko od zapytania.

    To, co chce dostać autor postu to :
    winettou wrote:
    mam stworzyć skrypt który chcę umieścić w formularzu gdzie po wpisaniu z palca pesela wciskam przycisk i z bazy wyszukuje mi pozostałe dane pracownika

    Dane JEDNEGO pracownika, JEDEN rekord.

    @winettou
    Jeśli kolega uważa temat za wyczerpany proponuję zamknąć go.
  • Level 39  
    Kolego. Jak napiszesz dziesiątki aplikacji w Akcesie, to się nauczysz wielu rozwiązań.
    Na przykład takiego, jak w załączniku.

    P.S. I nie dyskutujmy na forum ze sobą...
  • Level 14  
    Widzę "ostra" dyskusja się wywiązała. Mam jeszcze pytanie czy jest jakiś bardziej profesjonalny sposób na zrobienie raportu niż chcę go zrobić. Mianowicie w raporcie daje tło (wydruk formularza z polami do ręcznego wypełnienia) następnie nakładam na to odpowiednie TxtBoxy z imieniem nazwiskiem peselem itd ?
  • Helpful post
    Level 39  
    Są 2 sposoby.
    Jeżeli nie masz gotowych formularzy, to drukujesz obraz plus pola tekstowe.
    Jeżeli chcesz drukować na gotowych, to niestety musisz się wpasować.

    P.S. A jak to jest, że nie masz żadnych punktów?;)
  • Level 14  
    Czyli rozumiem że tworzę raport sobie w tle daje moj obraz powiedzmy w jpg i wpasowuje tam pola tekstowe? i daje ze Raport.TxtImie = Formularz.TxtImie itd?
  • Level 39  
    Szkoła mówi, że raport powstaje z kwerendy. Kwerenda ma parametry z formularza.
    Idąc w odwrotną stronę. Najpierw jest formularz, gdzie użytkownik 'coś kombinuje'.
    Na podstawie tych kombinacji kwerenda dostaje odpowiednie parametry.
    I na końcu raport, z tej kwerendy, ma dane do wydrukowania.

    Widać, że albo nie patrzyłeś na mój przykład mickpr.mdb, albo coś kombinujesz...
  • Level 39  
    PRL wrote:
    P.S. I nie dyskutujmy na forum ze sobą...
    Dlaczego?
    Nie zamierzam ani nikogo obrażać, ani się wstydzić tego, co piszę.
    PRL wrote:
    Kolego. Jak napiszesz dziesiątki aplikacji w Akcesie, to się nauczysz wielu rozwiązań.
    Na przykład takiego, jak w załączniku.

    No i dobrze, że dałeś przykład. To że "pojechany kreatorem" - mniejsza o to.
    Tyle, że z takim rozwiązaniem ograniczasz sobie pole manewru.
    Ja zaś - że tak powiem - zmierzałem w stronę języka VB - gdzie gotowców nie ma, ale też nie ma prawie żadnych ograniczeń co do elastyczności formularza, raportu czy innego elementu aplikacji. Przykładowo - ja wstawię na formularz zaprojektowany w mój sposób dane z 10 niepowiązanych i/lub powiązanych ze sobą tabelek. A czy ty to zrobisz kreatorem?

    Udowodniłeś, że twoje rozwiązanie działa i jest krótsze - przyznaję ci rację.
    Czy jest lepsze - nie byłbym taki pewny.

    A co do ilości napisanych aplikacji w Access'ie - to mam ich kilkanaście na koncie.
    I nie były to projekty tworzone kreatorem. Spełniały swoje funkcje przez lata.
    Może twój dorobek jest znaczniejszy.... ale mam swoje zdanie i wcale nie uważam, żebym się mylił.

    Jednak zapewne w tym przypadku lepiej koledze machnąć przykład kreatorem, zwłaszcza - że nie każdy ma ochotę wchodzić w VBA - jeśli nie musi.
    I masz rację - nie musi.
  • Level 39  
    Quote:
    Udowodniłeś, że twoje rozwiązanie działa i jest krótsze - przyznaję ci rację.
    Czy jest lepsze - nie byłbym taki pewny.


    Młody człowieku, w czym jest gorsze i dlaczego:
    Code: vb
    Log in, to see the code

    Jest gorsze od:
    Code: vb
    Log in, to see the code


    Za stary jestem, żeby wdawać się z Tobą w potyczki. Jak widać, nie umiesz przyjąć krytyki i Ty zawsze musisz mieć rację.
    Prosiłem, żebyś nie robił tego na forum!
    Ale jak chcesz.
    Kiedy ja pisałem kod VBA w Access 2.0, to Ty nawet nie byłeś w planach swoich rodziców.
    To tak tylko żeby nakreślić różnice.
    Nie będę Ci młody człowieku się tłumaczył!
  • Level 39  
    PRL wrote:
    Kiedy ja pisałem kod VBA w Access 2.0, to Ty nawet nie byłeś w planach swoich rodziców.
    Myślę, że najpierw powinieneś mnie spytać o wiek, bo (niestety) nie trafiłeś.
    W Access 2.0 pisałem mój pierwszy program PRACUJĄC w mojej drugiej firmie w życiu. Więc sobie oblicz ile mogę mieć lat. Młody człowieku :)

    Wracając do merytoryki:
    Jeśli uważasz, że korzystanie z kreatorów i robienie aplikacji w jedyny słuszny sposób - czyli tak jak to zrobił Ms jest mądre - to tak sobie uważaj.
    Nie mam zapędów ideologicznych aby naprawiać świat, napisałem - że twój sposób jest dla mnie gorszy i tak go postrzegam.
    Dlaczego? Otóż dlatego, że jest zero-rozwojowy.
    UWAGA.... Możesz mieć inne zdanie, a moim obowiązkiem nie jest zgadzanie się z Tobą.

    Nigdy nie robię w ten sposób aplikacji (nawet jeśli powstają w Accesie) - ponieważ takie "aplikacje" mój kolega zwykł nazywać "sztukami", działają fizycznie, a że bylejak - to już inna inszość.

    Nigdy bym nie sprzedał żadnej aplikacji robionej kreatorem.
    Nie trzeba informatyka by to ocenić - pierwsza lepsza sekretarka wyrzuciła by mnie za drzwi. (Jedna z moich aplikacji służyła do prowadzenia spraw sekretariatu).
    Nie grunt skasować jednorazowo kapuchę - grunt być serwisantem swojej aplikacji i móc spokojnie spać po nocach.

    Ale oczywiście - możesz wiedzieć więcej ode mnie. Ja z miłą chęcią czegoś się od Ciebie nauczę. Zawsze miałem to szczęście, że spotykałem mądrzejszych od siebie.
    Miłego dnia.
  • Level 39  
    Quote:
    Zawsze miałem to szczęście, że spotykałem mądrzejszych od siebie.

    Czyli szczęście Cie nie opuszcza, bo trafiłeś na mnie.:)

    Czy Ty nie potrafisz odpowiadać na pytania?
    Zadałem Ci pytanie i nie odpowiedziałeś.

    1. W którym miejscu moje rozwiązanie okazało się dłuższe?
    2. W czym Twoje rozwiązanie jest lepsze od mojego?

    Twoje:
    Code: vb
    Log in, to see the code


    Moje:
    Code: vb
    Log in, to see the code


    I teraz nie polemizuj, tylko odpowiedz i uzasadnij odpowiedzi na dwa powyższe pytania. Tak się cały czas przy nich upierałeś.
  • Level 39  
    PRL wrote:
    1. W którym miejscu moje rozwiązanie okazało się dłuższe?
    mickpr wrote:
    Udowodniłeś, że twoje rozwiązanie działa i jest krótsze - przyznaję ci rację.
    Czy jest lepsze - nie byłbym taki pewny.

    PRL wrote:
    2. W czym Twoje rozwiązanie jest lepsze od mojego?
    Jest lepsze, ponieważ:
    mickpr wrote:
    nie ma prawie żadnych ograniczeń co do elastyczności formularza, raportu czy innego elementu aplikacji. Przykładowo - ja wstawię na formularz zaprojektowany w mój sposób dane z 10 niepowiązanych i/lub powiązanych ze sobą tabelek. A czy ty to zrobisz kreatorem?
    mickpr wrote:
    Nigdy bym nie sprzedał żadnej aplikacji robionej kreatorem.

    Wystarczy tyle ?

    Bez obrazy - ale kreatory to są dobre dla pani Krysi z księgowości (o ile umie cokolwiek więcej niż zwykła księgowa). Kreator (dla mnie) to synonim lenistwa i bylejakości.
  • Level 39  
    Wymiękam w dyskusji z Tobą.
    Nie potrafisz przyznać racji, gdy ktoś ma rację.
    Rzeczywiście 'upór jest Twoją specjalnością'.
    Nie masz racji, a brniesz w uparte...

    EOT
  • Level 14  
    To sobie pogadaliście:D a teraz ja malutki spytam się was w jaki sposób mogę wstawiać do raportu te dane?
    Próbowałem tak :
    Code: vb
    Log in, to see the code


    No i zle, próbowałem też tak :
    Code: vb
    Log in, to see the code


    Nadal źle, może mnie oświecicie jak to się robi?:)

    Pozdrawiam[/code]
  • Level 39  
    Wygląda na to, że nie przyjrzałeś się mojemu przykladowi 'mickpr.mdb'.
    Nie przeczytałeś też tego:

    Quote:
    PRL napisał:

    Szkoła mówi, że raport powstaje z kwerendy. Kwerenda ma parametry z formularza.
    Idąc w odwrotną stronę. Najpierw jest formularz, gdzie użytkownik 'coś kombinuje'.
    Na podstawie tych kombinacji kwerenda dostaje odpowiednie parametry.
    I na końcu raport, z tej kwerendy, ma dane do wydrukowania.
  • Level 14  
    Niestety tak jak wspominalem nie mogę dodawać kwerend, opcja ta jest zablokowana przez administratora. A z tego co widzę u Ciebie możliwość wprowadzania danych jest tylko przez kwerende?
  • Level 39  
    Jaką wersję Acc używasz?
    Pracujesz w domenie?
    Jak to możliwe, że masz zablokowane kwerendy, a VBA nie?!
    Coś mi tu nie gra...

    P.S. Kwerenda nie służy w tym przypadku do wprowadzania danych, lecz do pobierania.
  • Level 14  
    W pracy pracuje na koncie z ograniczeniami, możliwe ze cos zle robie. bo próbowałem dodać twoja kwerende do mojego projektu i wtedy wyskakiwał komunikat więc może ją recznie zrobie. Teraz wkurza mnie to że nie mam niczego do wyboru przy boxach w zakladce zrodło formantu.

    używam 2002 accessa

    Dodano po 3 [minuty]:

    Niestety, napewno brak tworzenia kwerend. Tak ustawil to admin i koniec;/
  • Level 39  
    1. Sprawdź czy plik bazy czasem nie jest tylko do odczytu (R/O).
    2. Spróbuj otworzyć bazę trzymając wciśnięty SHIFT.
  • Level 39  
    W takim razie Twoje pytania skieruj do administratora, a nie tutaj.

    Dodano po 2 [minuty]:

    @mickpr, gdyby plik był tylko do odczytu, to auto nie mógłby stosować VBA, a jednak może.

    Dodano po 14 [minuty]:

    Quote:
    Niestety, napewno brak tworzenia kwerend. Tak ustawil to admin i koniec;/


    Skoro masz zablokowane tworznie (bez sensu) kwerend, a masz dostęp do VBA, to stwórz kwerendy kodem, a nie QBE.;)
    Code: vb
    Log in, to see the code
  • Level 14  
    Ciekawy pomysł, tylko jak to mam zrobić? Pokaże moj kod jak wyglada i może dopomożesz?
    Code: vb
    Log in, to see the code



    Tylko proszę nie śmiać się z mojego prymitywnego pisania! Swoja drogą jaką książkę polecić możesz do nauki?

    Dodano po 1 [godziny] 26 [minuty]:

    Ok, zrobiłem tak że w źródle rekordow pokazuje mi tak
    Code: vb
    Log in, to see the code


    Czyli tak jakby Kwerende ale niestety nie pokazuje mi danych z tabeli adresy ponieważ nie wiem jak dac w Me.Recordsource From z 2 tabel albo Kwerendy która określilem sobie wyzej ale nie moge jej zapsiać nijak.

    Code: vb
    Log in, to see the code
  • Helpful post
    Level 39  
    Żeby już nie kombinować i nie używać kwerend, skoro nie możesz.
    Jeżeli na formularzu masz już dane, to wystarczy na raporcie w niezwiązanym polu tekstowym użyć:

    =Forms!Pracownik!PESEL

    =Forms!Prazownik!Nazwisko

    i tak dalej.

    W załączniku jest wykonanie bez użycia kwerendy.
  • Level 14  
    Juz prawie wszystko gra, wszystko działa jak powinno. Jednak rozszerzam raport o nowe dane... Mam zmienną/ zmienne które zmieniają się względem wybranej opcji (przycisku). Problem pojawia się jak chcę aby
    Code: vb
    Log in, to see the code

    i aby Urzad tez wchodził mi też do raportu. Kiedy zrobię normalnie
    =[Formularze]![Adresówki]![Urzad]
    i nawet odświeżę raport to pokazuje mi błąd w tym polu.

    Wiem że Urzad nie jest formantem więc domyślam się że przez to pokazuje błąd pytanie jak go mam ominąć?

    Dzięki za pomoc!