Dariusz Myszkowski

Dariusz Myszkowski Prezes Zarządu

Temat: szukaj wyrażenia w tabeli

Jak sprawdzić, czy dany tekst, zawarty np w polu tekstowym formularza występuje w kolumnie danej tabeli?
Próbowałem użyć funkcji Dlookup, ale nie działa prawidłowo.
Marzanna Szulta

Marzanna Szulta właściciel, Usługi
Informatyczne
SZULTASET

Temat: szukaj wyrażenia w tabeli

A jak wygląda to wyrażenie? Funkcja Dlookup powinna sobie z tym poradzić np. tak:
DLookup("ID";"TabelaKsiazki";"Autor like '" & "*Chris*" & "'")
Choć jeśli potrzebna jest odpowiedź czy występuje czy nie, kepiej jest po prostu zliczyć
DCount("*";"TabelaKsiazki";"Autor like '" & "*Chris*" & "'")
W przypadku jeżeli nie występuje - w Dlookup pojawi się #N/D!,, a dla Dcount zero.

Temat: szukaj wyrażenia w tabeli

Tak tylko gwoli uzupełnienia.
Funkcje agregujące fajne są ale w VBA potrafią namieszać zwłaszcza, nie zwracają NULLi, Tak jak na przykład robi to MS SQL.
Dobrą praktyką jest, podczas używania DLOOKUP, DCOUNT, DSUM,... jeszcze NZ(), która zwróci określony przez użytkownika parametr, w przypadku nie odnalezienia argumentów funkcji agregującej.
W ten sposób unikamy błędu albo nr 9 albo 13 (nie pamiętam) 'invalid use of null'


NZ(DLookup("ID";"TabelaKsiazki";"Autor like '" & "*Chris*" & "'"),"NIEODNALEZIONE")


*BTW Funkcja NZ() w VBA w Excelu nie występuje
Marzanna Szulta

Marzanna Szulta właściciel, Usługi
Informatyczne
SZULTASET

Temat: szukaj wyrażenia w tabeli

Zgadza się. Dlatego jako pierwszą wskazałam jednak Dcount.
A nz() jest moją ulubioną funkcją. W Excelu jej nie ma, gdyż Null nie występuje.Pusta komórka to w zależności od typu danych "" lub 0.
Dariusz Myszkowski

Dariusz Myszkowski Prezes Zarządu

Temat: szukaj wyrażenia w tabeli

To może inaczej. Próbuję stworzyć kwerendę dodającą. Stworzyłem formularz z przyciskiem, który pobiera nazwę aktualnego miesiąca i dołącza tę nazwę do odpowiedniej kolumny w tabeli.
Niestety, w tabeli już mogą znajdować się w niektórych rekordach nazwy takich miesięcy. Dlatego chciałbym, aby kwerenda dołączała nazwy miesiąca tylko do rekordów, które go nie posiadają.
Chciałem to zrobić poprzez funkcję w formularzu, bo nie mam pomysłu jak to zrobić w samej kwerendzie (w kryteriach). Ale może właśnie w kwerendzie będzie łatwiej?
Marzanna Szulta

Marzanna Szulta właściciel, Usługi
Informatyczne
SZULTASET

Temat: szukaj wyrażenia w tabeli

Teraz to już w ogóle trudno zrozumieć.Przede wszystkim - kwerenda dołączająca - dołoży do tabeli nowe rekordy. Chcąc zaktualizować rekordy w tabeli - trzeba użyć tabeli aktualizującej, która w danej kolumnie zaktualizuje dane do np. nazwy bieżącego miesiąca. To, które rekordy mają zostać zmienione też trzeba określić przez konkretne kryteria.
Dariusz Myszkowski

Dariusz Myszkowski Prezes Zarządu

Temat: szukaj wyrażenia w tabeli

Chodzi o kwerendę dołączającą.

Zamiarem moim jest posiadanie dokładnie jednego rekordu z danym miesiącem dla każdego klienta.

Kiedy rozpoczyna się miesiąc - np. październik - uruchamiam taką kwerendę i wszystko jest w porządku. Ale czasem takie rekordy również wpisuję ręcznie.
W związku z tym nie chcę, żeby przy danym kliencie widniały dwa razy miesiące "październik".
Czyli kwerenda dołączająca nie powinna dołączać rekordów "październik", jeśli już "październik" dołączony jest do danego klienta.

w tej chwili mam kwerendę:
INSERT INTO Tabela_miesięcy (nr_klienta, miesiąc )
SELECT Dane.[nr_klienta], First([Forms]![formularz]![Kombi_miesiące]) AS miesiąc
FROM Dane
GROUP BY Dane.[nr rejestru]
ORDER BY Dane.[nr rejestru];

ale tak jak wspomniałem, dołącza ona zawsze dany miesiąc do każdego rekordu. Zastanawiam się co mam wpisać w kryteria, żeby omijała rekordy z tym miesiącem.
Marzanna Szulta

Marzanna Szulta właściciel, Usługi
Informatyczne
SZULTASET

Temat: szukaj wyrażenia w tabeli

Przed wykonaniem kwerendy należy sprawdzić, czy jest już rekord z dla danego miesiąca i danego klienta. Jeżeli nie ma - to wykonujemy kwerende, jeżeli jest - nie wykonujemy.
To sprawdzenie można zrobić np.funkcją DCount - jak wyjdzie 0 - uruchamiamy.
Dariusz Myszkowski

Dariusz Myszkowski Prezes Zarządu

Temat: szukaj wyrażenia w tabeli

Tu nie chodzi o wykonanie kwerendy lub nie (po sprawdzeniu), ale wykonanie tylko dla wybranych rekordów.

Kombinuję z kwerendą...
Dariusz Myszkowski

Dariusz Myszkowski Prezes Zarządu

Temat: szukaj wyrażenia w tabeli

nic mi innego nie przychodzi już do głowy:

INSERT INTO Opłaty ( nr_rejestru, miesiąc )
SELECT Opłaty.nr_rejestru, [Forms]![formularz].[kombi] AS miesiąc
FROM Dane INNER JOIN Opłaty ON Dane.[nr rejestru] = Opłaty.nr_rejestru
WHERE (((Opłaty.miesiąc)<>[Forms]![Formularz].[kombi0]))
GROUP BY Opłaty.nr_rejestru;

Ale nie działa...
Marzanna Szulta

Marzanna Szulta właściciel, Usługi
Informatyczne
SZULTASET

Temat: szukaj wyrażenia w tabeli

Wracamy do punktu wyjścia: kwerenda dołączająca (INSERT...) dodaje nowe rekordy do tabeli. Modyfikacja rekordów już zapisanych w tabeli jest za pomocą tabeli aktualizującej.(UPDATE...)
Dariusz Myszkowski

Dariusz Myszkowski Prezes Zarządu

Temat: szukaj wyrażenia w tabeli

no właśnie mi nie chodzi o modyfikację, tylko o dodanie tylko dla wybranych rekordów.
Szymon Gacka

Szymon Gacka świat mikro...

Temat: szukaj wyrażenia w tabeli

to może ja spróbuję :)
Panie Prezesie, jeżeli chce Pan coś dodać do wybranych rekordów, to koniecznie trzeba użyć kwerendy UPDATE.
Dariusz Myszkowski

Dariusz Myszkowski Prezes Zarządu

Temat: szukaj wyrażenia w tabeli

Nadal się nie rozumiemy. Posiadam tabelę z danymi klientów. Dodatkowo posiadam tabelę, która jest skorelowana po numerze klienta. I o tej drugiej tabeli tu mowa.
Nie potrzebuję aktualizować w niej danych rekordów, a dopisywać nowe (a dokładnie dane dotyczące miesięcy). Czyli dany klient będzie miał najpierw dodany rekord styczniowy, później lutowy itd.

Mam kod, który uruchamia kwerendę dodającą rekordy danego miesiąca do wszystkich numerów klienta. Niestety, niektóre takie rekordy wpisuję też ręcznie i w tym momencie pokazują mi się zdublowane rekordy miesięcy.

Np. wszyscy klienci (jest ich powiedzmy 100) mają wpisane rekordy dotyczące stycznia. Tych rekordów jest też 100. Ale dodatkowo Jan Kowalski ma wpisany ręcznie rekord lutowy (tabela ma w tym momencie 101 rekordów).
Jeśli uruchomię kwerendę dodającą rekordy lutowe, to Jan Kowalski będzie miał dwa rekordy lutowe. A tego właśnie chcę uniknąć.

PS. Stwierdzenie "Panie Prezesie" jest niepotrzebne.Ten post został edytowany przez Autora dnia 29.10.23 o godzinie 10:37
Marzanna Szulta

Marzanna Szulta właściciel, Usługi
Informatyczne
SZULTASET

Temat: szukaj wyrażenia w tabeli

Znowu się powtórzę, ale w taki wypadku najpierw sprawdzamy, czy jest już rekord w tabeli (np.przez DCount) i jeżeli nie ma - to wówczas wykonujemy kwerendę dodającą Insert.
Dariusz Myszkowski

Dariusz Myszkowski Prezes Zarządu

Temat: szukaj wyrażenia w tabeli

No i męczę się z tym od półtora miesiąca...

Jedyne co wydaje mi się najbliżej poprawnej składni to:


Obrazek


Bez trzeciej kolumny kwerenda wstawia wszystkim [nr_rejestru] prawidłowe wartości. Niestety, nie potrafię użyć składni z DCount, tak, żeby kwerenda wstawiała rekordy z [miesiąc] tylko tam, gdzie takiego [miesiąc] nie ma...
Próbowałem już na wiele sposobów, również z kryteriami <>[Forms]![Zbuduj_opłaty]![Kombi0]. Nic nie działa prawidłowo.

Czy ktoś pomoże?
Szymon Gacka

Szymon Gacka świat mikro...

Temat: szukaj wyrażenia w tabeli

przepraszam.
zacznijmy od początku. Ma Pan dwie tabele.
Pierwsza to dane klienta. To rozumiem.
Druga to co? Do tej drugiej "ręcznie" wpisuje Pan rekordy dotyczące miesięcy? Tutaj nie rozumiem co się dzieje.
Między tymi dwoma tabelami jest relacja ustawiona. To rozumiem.
Dariusz Myszkowski

Dariusz Myszkowski Prezes Zarządu

Temat: szukaj wyrażenia w tabeli

Druga tabela odpowiada między innymi za miesięczne opłaty klientów. Raz w miesiącu odpalam z guzika, aby zostały dołączone do tej tabeli (czyli też dla wszystkich aktualnych klientów w tej tabeli) płatności za dany miesiąc.
Oczywiście super to chodzi. Ale są osoby, które nadpłacają za kolejne miesiące. W takim przypadku w czasie płatności ręcznie dodaję taki rekord.
Później, kiedy chcę odpalam guzik (o którym wcześniej pisałem), okazuje się, że dany klient ma dwa rekordy dla danego miesiąca - jeden prawidłowo opłacony, drugi nie.

W związku z tym chcę, aby guzik odpalał mi kwerendą dołączającą, dla rekordów (klientów) z wpisanym już wcześniej miesiącem (czyli opłaconym miesiącem).

Jest opcja, żeby guzik odpalał kwerendę, która odgórnie doda wszystkie miesiące od razu. To też dobre rozwiązanie, ale generuje one inne problemy, o których w tej chwili nie ma sensu mówić.Ten post został edytowany przez Autora dnia 23.11.23 o godzinie 14:24

Następna dyskusja:

Error przy linkowaniu tabeli




Wyślij zaproszenie do