Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 63392 Skopiuj do schowka Sterowanie kryteriami kwerendy Access z poziomu Excel
Autor Wiadomość
Johan 
Stały bywalec Excelforum


Pomógł: 87 razy
Posty: 299
Wysłany: 04-12-2018, 13:41   Sterowanie kryteriami kwerendy Access z poziomu Excel

Witam tęgie głowy.
Zachęcony przez J_B usiłuję "przesiąść" się na Access".
Za pomocą utworzonych kwerend wyciągam z tabeli "unikaty" kilku pól i lokuję je w ListBox-ach
Kod:
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset

Private Sub CommandButton1_Click()
    Set cnn = New ADODB.Connection
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=  D:testy\forum\db.mdb;Persist Security Info=False"
    Set rs = New ADODB.Recordset
    rs.Open "Select * from kwPrzedmiot", cnn, adOpenDynamic, adLockOptimistic
    rs.MoveFirst
    Do Until rs.EOF
        ListBox1.AddItem rs!przedmiot
        rs.MoveNext
    Loop
    Set rs = Nothing
    cnn.Close
    Set cnn = Nothing

Oczywiście dla poszczególnych Listbox-ów zmienia się nazwa kwerendy i nazwa pola.
Moje pytanie jest następujące: czy można użyć jednej kwerendy i zapytaniu zmieniać nazwy tabeli i pola?
ID posta: 357660 Skopiuj do schowka
 
 
marzatela 
Excel Expert



Zaproszone osoby: 291
Pomogła: 422 razy
Posty: 2320
Wysłany: 04-12-2018, 16:29   

Możesz wprowadzić dodatkową zmienną np. MyQuery i w zależności od tego, skąd ma brać dane - zbudować kwerendę w formie Stringu z parametrami. A następnie otwierać Recordset z ten sposób:
Kod:
rs.Open MyQuery, cnn, adOpenDynamic, adLockOptimistic
_________________
marzatela

http://www.szultaset.pl
ID posta: 357670 Skopiuj do schowka
 
 
Johan 
Stały bywalec Excelforum


Pomógł: 87 razy
Posty: 299
Wysłany: 04-12-2018, 18:08   

Dziękuję za zainteresowanie.
Niestety słaby ze mnie wędkarz i Twoja wędka nie pozwoli mi złapać rybki. :hamer
Chyba jestem zmuszony prosić o bardziej szczegółową podpowiedź :oops:
Czy chodzi o utworzenie kodem kwerendy, podanie wybranych parametrów, pobranie danych, usunięcie kwerendy?
ID posta: 357671 Skopiuj do schowka
 
 
marzatela 
Excel Expert



Zaproszone osoby: 291
Pomogła: 422 razy
Posty: 2320
Wysłany: 04-12-2018, 19:01   

Każdą kwerendę Accessa można zapisać w kodzie SQL i taki kod trzeba wpisać do VBA. Na początek zerknij tu:
http://mojezmaganiainform...widoku-SQL.html
I wstaw przykład Twojej bazy (może być okrojony, dane też mnie nie interesują) i opisz - w jaki sposób chciałbyś zmieniać kwerendę, z jakich tabel i z jakimi wartościami parametrów.
_________________
marzatela

http://www.szultaset.pl
ID posta: 357676 Skopiuj do schowka
 
 
Johan 
Stały bywalec Excelforum


Pomógł: 87 razy
Posty: 299
Wysłany: 04-12-2018, 19:24   

Od załącznika trzeba było zacząć - przepraszam.
Oczywiście proszę o zmianę ścieżki do bazy Access.

forum.zip
Pobierz Plik ściągnięto 20 raz(y) 29.21 KB

ID posta: 357678 Skopiuj do schowka
 
 
marzatela 
Excel Expert



Zaproszone osoby: 291
Pomogła: 422 razy
Posty: 2320
Wysłany: 04-12-2018, 20:05   

Brakuje mi jakichś referencji i nie mogę uruchomić, ale generalnie dopisz do kodu:
Kod:
MyQuery1 = "SELECT wyniki.przedmiot " & _
            "FROM wyniki " & _
            "GROUP BY wyniki.przedmiot;"

    rs.Open MyQuery1, cnn, adOpenDynamic, adLockOptimistic
    rs.MoveFirst

a dla drugiego listboxa:
Kod:
MyQuery2 = "SELECT wyniki.opiekun " & _
                "FROM wyniki " & _
                "GROUP BY wyniki.opiekun;"

    rs.Open MyQuery2, cnn, adOpenDynamic, adLockOptimistic
_________________
marzatela

http://www.szultaset.pl
ID posta: 357680 Skopiuj do schowka
 
 
Johan 
Stały bywalec Excelforum


Pomógł: 87 razy
Posty: 299
Wysłany: 05-12-2018, 09:18   

Jeżeli chodzi o referencje to w projekcie VBA dodałem
Cytat:
Microsoft ActiveX Data Objects 2.8 Library

Natomiast co do kodu-dokładnie o to chodziło. Usunąłem kwerendy z mojej bazy, Twoim myQuery pobieram to co chciałem.
Serdecznie dziękuję za okazaną pomoc :beer
Wielu rzeczy się nauczyłem na tym forum, a Wy kolejny raz pokazujecie moje miejsce w szeregu :oops:
Pozdrawiam wszystkich "zakręconych" Excel-em
ID posta: 357701 Skopiuj do schowka
 
 
marzatela 
Excel Expert



Zaproszone osoby: 291
Pomogła: 422 razy
Posty: 2320
Wysłany: 05-12-2018, 11:18   

Tamtą referencję mam.
Tak na marginesie - obiekt cnn otwieraj tylko raz, na początku makra i zamknij też tylko raz - na końcu. To połączenie przecież się nie zmienia.
_________________
marzatela

http://www.szultaset.pl
ID posta: 357714 Skopiuj do schowka
 
 
Johan 
Stały bywalec Excelforum


Pomógł: 87 razy
Posty: 299
Wysłany: 05-12-2018, 18:32   

Referencje mam jak w załączonym zrzucie.
Co do połączenia dziękuję za cenną uwagę.

ref.jpg
Plik ściągnięto 6 raz(y) 37.44 KB

ID posta: 357759 Skopiuj do schowka
 
 
szuszana 
ExcelSpec


Pomogła: 169 razy
Posty: 592
Wysłany: 05-12-2018, 20:45   

Oraz do uwag Marzanny dodam jeszcze, że bezwzględnie musi być obsługa błędów w takim kodzie ponieważ w przypadku błędu może pozostać plik ldb (dla mdb) i nie będziesz mógł ponownie otworzyć bazy.
Recordset nie zamierzasz jak widzę edytować pomyśl o adOpenStatic, adLockReadOnly.
Myślę, że powinieneś usunąć referencje do ADO i wykorzystać CreateObject (stałe zdefiniować).
ID posta: 357764 Skopiuj do schowka
 
 
Johan 
Stały bywalec Excelforum


Pomógł: 87 razy
Posty: 299
Wysłany: 06-12-2018, 10:07   

Jeszcze raz dziękuję za zainteresowanie. Wasze uwagi na pewno podniosą poziom mojej wiedzy.
Pokazany załącznik wykonałem tylko na potrzeby pokazania mojego problemu. Obsługę błędów posiadam ("szukajka" okazała się bardzo pomocna), a czy jest ona właściwa i wystarczająca czas i próby pokażą. Póki co nie "sypie" się.
Co do recordset-u to wprowadzam także dane do bazy i używam jednakowego polecenia do połączenia z bazą we wszystkich moich działaniach. Czy jest to właściwe? nie wiem, nie zastanawiałem się nad tym, a poziom mojej wiedzy powoduje, że nie widzę problemu (przynajmniej do tej pory).
ID posta: 357784 Skopiuj do schowka
 
 
Johan 
Stały bywalec Excelforum


Pomógł: 87 razy
Posty: 299
Wysłany: 06-12-2018, 11:18   

I urodził mi się nowy problem, dla was pewnie drobnostka.
Nie tworzę nowego wątku, bo jest to poniekąd kontynuacja.
Jak powinien wyglądać string myQuery w przypadku gdy chcę wyciągnąć unikaty z pola "opiekun", ale dla określonego warunku z pola "przedmiot".
W skrócie opis pożądanego działania:
-ładuję ListBox1 unikatami z pola przedmiot
-wybieram przedmiot z listy
-ładuję Listbox2, tu mają się znaleźć unikaty z pola opiekun ale tylko dla warunku przedmiot zaznaczonego w ListBox1.
Jak wykonać poszczególne kroki wiem, chodzi o "treść" myQuery.
ID posta: 357789 Skopiuj do schowka
 
 
Johan 
Stały bywalec Excelforum


Pomógł: 87 razy
Posty: 299
Wysłany: 06-12-2018, 13:07   

Wydłubałem coś takiego
Kod:
myQuery = "SELECT wyniki.przedmiot, wyniki.opiekun " & "FROM wyniki " & _
            "WHERE wyniki.przedmiot = '" & pp & "' GROUP BY wyniki.opiekun;"
niestety nie działa i krzyczy
Cytat:
Próba wykonania kwerendy, któa nie zawiera podanego wyrażenia 'przedmiot' jako elementu funkcji agregującej.
ID posta: 357796 Skopiuj do schowka
 
 
Johan 
Stały bywalec Excelforum


Pomógł: 87 razy
Posty: 299
Wysłany: 06-12-2018, 14:47   

Wymęczłem
Kod:
myQuery = "SELECT opiekun " & "FROM wyniki " & _
            "WHERE przedmiot = '" & ListBox1.Text & "' " & _
             "GROUP BY opiekun;"

Przepraszam za moją niecierpliwość i nieustanne pisanie.

Jeszcze raz dziękuję za zainteresowanie i okazaną pomoc :beer
ID posta: 357799 Skopiuj do schowka
 
 
marzatela 
Excel Expert



Zaproszone osoby: 291
Pomogła: 422 razy
Posty: 2320
Wysłany: 06-12-2018, 17:03   

W pierwszej linijce niepotrzebne jest to łączenie stringów. Wystarczy tak:
Kod:
myQuery = "SELECT opiekun FROM wyniki " & _
            "WHERE przedmiot = '" & ListBox1.Text & "' " & _
             "GROUP BY opiekun;"
_________________
marzatela

http://www.szultaset.pl
ID posta: 357803 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe