Piotr Henke

Piotr Henke specjalista, Zakład
Opel Polska w
Gliwicach

Temat: DlookUP

Sprawę powiązań pó ltekstowych w formularzu na początku załatwiłem wrzucając tabele do formularza i używając DoCmd.FindRecord mogę nadać jednemu polu tekstowemu wartość zależną od innego pola tekstowego. Ostatnio wpadłem na funkcje DlookUP i prawdoodobnie popełniam błąd w składnia wydaje mi się że mógłbym tego użyć mając efekt podobny bez tabel w formularzu.

Mam formularz gdzie w polu tekstowym o nazwie [tekst1] wpisuje się wartość, ta wartość jest sprawdzana czy istnieje w [tabeli1] w [polu1], wyszukana wartość mogłaby być wprowadzona do innego pola tekstowego w formularzu. Wtedy miałbym mozliwośc porównywania czy wartość szukana z [tekst1]jest identyczna z wynikiem funkcji np dLookUP ale niestety nie znalazłem sposobu na prawidłową składnie
http://www.zmianywpodatkach.pl/Piotr Henke edytował(a) ten post dnia 25.11.10 o godzinie 21:29

konto usunięte

Temat: DlookUP

Zerknij na to:
? DLookup ("Firma","Klienci", "[Id]=1")
Interesuje nas kolumna firma w tabeli klienci, gdzie id=1. Znak zapytania jest z okna immediate.
Piotr Henke

Piotr Henke specjalista, Zakład
Opel Polska w
Gliwicach

Temat: DlookUP

Nie wiem czy wszystko poprawnie zapisane ale działa tak jak chciałem
wynik = DLookup("pole1", "TABELA1", "pole1 = tekst1")

gdzie pole1 to pole w tabeli1 a tekst1 to pole tekstowe w formularzu
wynik to warość rekordu w pole1 = tekst1 ,oczywiście jeżeli istnieje taki rekord

wszystko to dzieje się po after_update tekst1

Problemem był dla mnie zapis ,gdzie cudzysłow ,gdzie nawias:)

dziękiPiotr Henke edytował(a) ten post dnia 22.11.10 o godzinie 22:53
Łukasz W.

Łukasz W. Popyt Planuje
Produkcję

Temat: DlookUP

czesc

Mam także problem z DLookUp :) problem pewnie tkwi w ""''&

a mianowicie

aa: DLookUp("Nazwa";"[nazwy_klient]";"[nazwy_klient]![numer]= ?????? )

tak wygląda funkcja i do tego momentu działa na pewno dobrze, bo gdy wpiszę numer z palca np 230 to wpisuje do tabeli odpowiednia nazwę klienta ale pzy wszystkich polach tabeli a nie o to przecież chodzi.

chcę aby "Nazwa" wpisywana była na podstawie pola --> [nr_klienta] które jest w tabeli funkcji (dopisanie nazwy tabeli tez nic nie pomaga )

Numery klientów są cyfram, literami , nieraz kombinacja.
Jak to zapisać?? może ktoś wie??

z góry dzięki za pomoc
Paweł D.

Paweł D. Programista Analityk
- Firmowe Bazy
Danych

Temat: DlookUP

Albo za szybko piszesz albo błędnie,
dlookup tylko pobiera dane, niczego nie dopisuje do tabeli

Jeśli chodzi o dopisanie to prościej zastosować zwykłego inserta do
dopisania nazwy w tabeli?


DoCmd.RunSQL "INSERT INTO nazwa_tabeli (Nazwa) VALUES('Dopisana Nazwa Klienta')"


czy zaktualizowania nazwy w tabeli


DoCmd.RunSQL "UPDATE nazwa_tabeli SET Nazwa='Dopisana Nazwa Klienta' WHERE IdKlienta=" & IdAktualizowanegoKlienta
Łukasz W.

Łukasz W. Popyt Planuje
Produkcję

Temat: DlookUP

dzieki Pawel za pomoc,ale upieram sią za Dlookupp

JAk ma dokladnie wyglądać ta funkcja ??

aa: DLookUp("Nazwa";"[nazwy_klient]";"[nazwy_klient]![numer]= ?????? )

co wpisać zamiast pytajników??
Michał Dziubek

Michał Dziubek Programista,
INFORM\'1

Temat: DlookUP

DLookUp(“[nzwa]”,”[nazwy_klient]”,”[nazwy_klient]![numer] =’”&[tabela].[nr_klienta]&”’”)


To powinno zadziałać, rozważ jednak użycie joina rozwiązanie zdecydowanie bardziej wydajniejsze
Karol Wojda

Karol Wojda Student,
Politechnika
Świętokrzyska w
Kielcach

Temat: DlookUP

”[nazwy_klient]![numer] =’”&[tabela].[nr_klienta]&”’”

a co oznacza ' w tym wyrażeniu??

Dzięki.
Monika M.

Monika M. PROGRAMISTA VBA,
Excel, Access,
Outlook, Word -
SZKOLENIA

Temat: DlookUP

Karol Wojda:
”[nazwy_klient]![numer] =’”&[tabela].[nr_klienta]&”’”

a co oznacza ' w tym wyrażeniu??

Ponieważ:
Numery klientów są cyfram, literami , nieraz kombinacja.

- to nr_klienta jest typem tekstowym, a więc trzeba wrzucić w cudzysłów albo pojedyncze znaki apostrofu, podobnie, jak w poleceniu SQL, np.:
Select Name, Contry
From tblKlienci
Where Country = 'Polska'
Łukasz W.

Łukasz W. Popyt Planuje
Produkcję

Temat: DlookUP

Dzieki wszystkim za odpowiedzi , ale nie działa ::D ;)

O co chodzi z "join"
Potrzebuje użyć odpowiednika wyszukaj pionowo w excelu, macie jakies sugestie?
Michał Dziubek

Michał Dziubek Programista,
INFORM\'1

Temat: DlookUP

Zakładam że używasz dlookup do tego aby na kwerendzie/raporcie/gridzie pokazać
nazwę klienta którą masz w innej tabeli niż tę która pytasz.

Najważniejsze to jest zmiana podejścia z excelowego na accessowy/bazodanowy;)
Czyli operujemy na zbiorach danych (tabele/kwerendy) które możemy dowolnie łączyć, a nie na statycznych skoroszytach.

I teraz: masz tabele klientów z polami idklienta, nazwa
i tabele zamowień idzamowienia,idklienta,kwota

i wybierasz dane z zamowien
Select
idzamowienia
,idklienta
,kwota
from
zamowienia


Co da Ci liste zamowień. Teraz chcesz dodać nazwę klienta, Ty chcesz użyć dlookup co jest błędne i pewnie wynika z podejścia excelowego (wyszukaj pionowo), a powinieneś połączyć obie tabele za pomocą join-a, czyli:

Select
idzamowienia
,zamowienia.idklienta
,klient.nazwa
,kwota
from
zamowienia
inner join klienci on klienci.idklienta=zamowienia.idklienta


Efekt, nie potrzebujemy dllookup. Różnica:
Silnik bazy danych połączy tabele po polu idklienta, dzięki czemu w jednym zapytaniu masz dostęp do 2 tabel, w przypadku wykorzystania dlookup dla każdego wiersza bedzie wykonywane zapytanie do bazy klientów, narzut przy dużej ilości danych naprawdę spory.

SQL-owo odpowiednik dlookup można by napisać tak:

Select
idzamowienia
,idklienta
,(select nazwa from klienci where idklienta=zamowienia.idklienta) as dlookup
,kwota
from
zamowienia

Czyli podzapytanie wykonywane dla każdego rekordu z tabeli zamówień, efekt dla 10000 rekordów 10000 razy pytasz bazę o nazwę klienta, nawet jeżeli się powiela. W przypadku join raz pytasz tabele zamowien i raz tabele klientów, oczywiście jest narzut na samą operacje złączenia, ale nie taki jak w przypadku podzapytań.

Mam nadzieje, że rozwiałem niejasnościMichał Dziubek edytował(a) ten post dnia 05.10.11 o godzinie 20:32

konto usunięte

Temat: DlookUP


Select
z.idzamowienia
,z.idklienta
,w.nazwa as dlookup
,z.kwota
from
zamowienia as z join (select sum(kwota) as k , nazwa from klienci) as w on w.idklienta=z.idklienta


raz a dobrzePrzemysław R. edytował(a) ten post dnia 05.10.11 o godzinie 20:55
Michał Dziubek

Michał Dziubek Programista,
INFORM\'1

Temat: DlookUP

Przemysław R.:

Select
z.idzamowienia
,z.idklienta
,w.nazwa as dlookup
,z.kwota
from
zamowienia as z join (select sum(kwota) as k , nazwa from klienci) as w on w.idklienta=z.idklienta


raz a dobrze

No nie wiem czy dobrze:
1. w podzapytaniu (tabela w) brak group by
2. w definicji sprzężenia odwołujesz się do kolumny której nie masz w tabeli
w: idklienta
3. tabela klienci nie ma pola kwota które chcesz zsumować
4. po co wykonywać sumowanie jeżeli nawet go nie pokazujesz w wyniku

Poza tym to był przykład obrazujący przykład łączenia danych - hipotetyczny, a nie opis sposobu na wyciągnięcie sumarycznie zamówień klienta

konto usunięte

Temat: DlookUP

Michał Dziubek:
Przemysław R.:

Select
z.idzamowienia
,z.idklienta
,w.nazwa as dlookup
,z.kwota
from
zamowienia as z join (select sum(kwota) as k , nazwa from klienci) as w on w.idklienta=z.idklienta


raz a dobrze

No nie wiem czy dobrze:
1. w podzapytaniu (tabela w) brak group by

fakt, brakuje
2. w definicji sprzężenia odwołujesz się do kolumny której nie masz w tabeli
w: idklienta

może jest, może nie ma - chodzi o przykład
3. tabela klienci nie ma pola kwota które chcesz zsumować

fakt
4. po co wykonywać sumowanie jeżeli nawet go nie pokazujesz w wyniku

bo się pomyliłem - późno było :P
Poza tym to był przykład obrazujący przykład łączenia danych - hipotetyczny, a nie opis sposobu na wyciągnięcie sumarycznie zamówień klienta

chodzi o to że subselect skorelowany wykorzystany w przykładzie jaki przytoczyłeś jest bezsensownym rozwiązaniem bo dokładnie ten sam efekt można zrobić joinem

subselect skorelowany jest ok, w momencie gdy masz np. różne przedziały dla każdego wiersza, w momencie gdy jest znak = to równie dobrze można zastosować subselect w FOR lub zwykłego join-a

zgodzisz się z tą opinią?
Michał Dziubek

Michał Dziubek Programista,
INFORM\'1

Temat: DlookUP

Przemysław R.:
chodzi o to że subselect skorelowany wykorzystany w przykładzie jaki przytoczyłeś jest bezsensownym rozwiązaniem bo dokładnie ten sam efekt można zrobić joinem

subselect skorelowany jest ok, w momencie gdy masz np. różne przedziały dla każdego wiersza, w momencie gdy jest znak = to równie dobrze można zastosować subselect w FOR lub zwykłego join-a

zgodzisz się z tą opinią?

Oczywiście, ze się zgodze, nawet to napisałem w swoim poście i jakbyś przeczytał uważnie całość, proponowane rozwiązanie jest z join (drugi select w moim poscie). Subselect miał zobrazować działanie dlookup i pokazać jego słabość..

Następna dyskusja:

DLookUp - wyszukiwanie dany...




Wyślij zaproszenie do