konto usunięte

Temat: Złożona kwerenda aktualizująca zamiast usuwającej i...

Witam!
Od kilku dni zmagam się z następującym problemem: w jaki sposób stworzyć (w siatce projektu bądź napisać w accessowym SQLu) kwerendę aktualizującą A1, która dla wybranego z tabeli T1 zestawu rekordów i wybranych pól (Pa, Pb, Pc) zaktualizuje ich wartości zgodnie z wartościami, które mam zebrane w kwerendzie wybierającej W1, przy czym między T1 a W1 występują relacje inner join (złączenia 1 do 1) po 3 polach? Innymi słowy wartości „Aktualizuj do” są zmienne dla różnych rekordów, ich konkretne wartości są wcześniej zebrane w kwerendzie wybierające, a referencja która wartość ma nadpisać którą jest zdefiniowana wg relacji po 3 polach P1,P2 i P3. Jeszcze innymi słowy: w jaki sposób zastąpić parę kwerend usuwającą i dołączającą (opratą na W1) jedną kwerendą aktualizującą?
Googlowałem dużo, przejrzałem kilka tutoriali i podręczników do Accessa ale znalazłem tylko opisy dość prostych przypadków (aktualizacja wszystkich rekordów do tej samej wartości), które nie odpowiadają na moje pytania :(
Próbowałem napisać w accessowym SQLu kwerendę, która w instrukcji UPDATE ma podzapytanie skorelowane, ale albo accessowy SQL nie obsługuje czegoś takiego, albo robię jakiś błąd składniowy, w każdym razie Access po uruchomieniu mojej kwerendy pokazuje nie zrozumiały dla mnie błąd „Operacja musi wykorzystywać kwerendę, którą można aktualizować”.
Pytanie: czy istnieje jakiś sposób na stworzenie tego typu kwerendy aktualizującej czy też po prostu Access nie obsługuje czegoś takiego i jedyną alternatywą będzie stworzenie pary kwerend usuwającej i dołączającej?
Z góry dziękuję za pomoc!
Pozdrawiam.
Michał
Paweł M.

Paweł M. Solution Architect @
Qlik - Region East
Europe, Greece, I...

Temat: Złożona kwerenda aktualizująca zamiast usuwającej i...

Witaj Michale :)

Czy to pomoże?

UPDATE T1 INNER JOIN W1
ON (T1.P1=W1.P1) and (T1.P2=W1.P2) AND (T1.P3=W1.P3)
SET T1.Pa = W1.Pa, T1.Pb = W1.Pb, T1.Pc = W1.Pc;


Wesołych Świąt,
PawełPaweł M. edytował(a) ten post dnia 25.12.09 o godzinie 21:52

konto usunięte

Temat: Złożona kwerenda aktualizująca zamiast usuwającej i...

Michał Paszko:
Pytanie: czy istnieje jakiś sposób na stworzenie tego typu kwerendy aktualizującej czy też po prostu Access nie obsługuje czegoś takiego i jedyną alternatywą będzie stworzenie pary kwerend usuwającej i dołączającej?

dane z kwerendy którą łączysz z tabelą przenieś do tabeli tymczasowej (kwerenda tworząca tabele) i dopiero rób UPDATE. Access nie bardzo chce robić UPDATE jak z jednej strony masz nieedytowalny zestaw rekordów

co do samej idei zastąpienia DELETE / INSERT za pomocą UPDATE to jest to kiepski pomysł bo jak masz pierwszą metodę to nie ma bata żeby ci uciekły rekordy, w przypadku UPDATE jest to bardzo prawdopodobne, bo ta instrukcja nie dodaje nowych

jeżeli jednak chcesz robić bardziej zaawansowane rozwiązania przenieś logikę bazy danych do lepszego silnika np. MSSQL 2008 Express gdzie jest konstrukcja MERGE która dokładnie odpowiada twojemu zapotrzebowaniu

konto usunięte

Temat: Złożona kwerenda aktualizująca zamiast usuwającej i...

Czy to pomoże?

UPDATE T1 INNER JOIN W1
ON (T1.P1=W1.P1) and (T1.P2=W1.P2) AND (T1.P3=W1.P3)
SET T1.Pa = W1.Pa, T1.Pb = W1.Pb, T1.Pc = W1.Pc;

Cześć :)
Niestety - istota problemu polega właśnie na tym, że taka konstukcja nie chce zadziałać w Accessie (komunikat "Opracja musi wykorzystywać kwerendę, którą można aktualizować") :(((
pozdrawiam!!
M.

konto usunięte

Temat: Złożona kwerenda aktualizująca zamiast usuwającej i...

Przemysław R.:

dane z kwerendy którą łączysz z tabelą przenieś do tabeli tymczasowej (kwerenda tworząca tabele) i dopiero rób UPDATE. Access nie bardzo chce robić UPDATE jak z jednej strony masz nieedytowalny zestaw rekordów

Czyli wygląda na to, że tak jak bym chciał, się nie da :(((
co do samej idei zastąpienia DELETE / INSERT za pomocą UPDATE to > jest to kiepski pomysł bo jak masz pierwszą metodę to nie ma bata żeby ci uciekły rekordy, w przypadku UPDATE jest to bardzo > prawdopodobne, bo ta instrukcja nie dodaje nowych

Logika bazy jest tak pomyślana, że w moim przypadku nie ma żadnego ryzyka - nie będzie żadnych nowych rekrdów, a jedynie aktualizowanie wartości rekordów już istniejących, dlatego DELETE / INSERT wydaje mi się rozwiązaniem dość topornym no ale niestety chyba jedynym możliwym (tymczasowa z pewnych względów odpada) :(

Pozdr. i dzięki za info!!
M.

Wojciech Gardziński

Wypowiedzi autora zostały ukryte. Pokaż autora

konto usunięte

Temat: Złożona kwerenda aktualizująca zamiast usuwającej i...

Michał Paszko:
Przemysław R.:

dane z kwerendy którą łączysz z tabelą przenieś do tabeli tymczasowej (kwerenda tworząca tabele) i dopiero rób UPDATE. Access nie bardzo chce robić UPDATE jak z jednej strony masz nieedytowalny zestaw rekordów

Czyli wygląda na to, że tak jak bym chciał, się nie da :(((


zamiast joinów i kwerendy użyj DLOKUUP
powinno zadziałać, tyle że wolno
co do samej idei zastąpienia DELETE / INSERT za pomocą UPDATE to > jest to kiepski pomysł bo jak masz pierwszą metodę to nie ma bata żeby ci uciekły rekordy, w przypadku UPDATE jest to bardzo > prawdopodobne, bo ta instrukcja nie dodaje nowych

Logika bazy jest tak pomyślana, że w moim przypadku nie ma żadnego ryzyka - nie będzie żadnych nowych rekrdów, a jedynie aktualizowanie wartości rekordów już istniejących, dlatego DELETE / INSERT wydaje mi się rozwiązaniem dość topornym no ale niestety chyba jedynym możliwym (tymczasowa z pewnych względów odpada) :(

a chyba że tak, jak nie ma zagrożenia to spoko
Paweł M.

Paweł M. Solution Architect @
Qlik - Region East
Europe, Greece, I...

Temat: Złożona kwerenda aktualizująca zamiast usuwającej i...

Michał Paszko:

Cześć :)
Niestety - istota problemu polega właśnie na tym, że taka konstukcja nie chce zadziałać w Accessie (komunikat "Opracja musi wykorzystywać kwerendę, którą można aktualizować") :(((
pozdrawiam!!
M.
>

Cześć Michale,

Dlaczego ma niby nie działać? Spróbowałeś?

Tabela oryginalna T1:

Obrazek


Kwerenda W1 z danymi do podgrania:

Obrazek


Kwerenda A1 w trybie SQL:

Obrazek


Uruchamiamy kwerende i tabela wygląda tak...

Obrazek


Czym to się różni od Twojego zadania?

Pozdr,
Paweł

konto usunięte

Temat: Złożona kwerenda aktualizująca zamiast usuwającej i...

Paweł M.:
Czym to się różni od Twojego zadania?

zrób z kwerendy W1 kwerendę agregującą i zobacz czy działa
Paweł M.

Paweł M. Solution Architect @
Qlik - Region East
Europe, Greece, I...

Temat: Złożona kwerenda aktualizująca zamiast usuwającej i...

Przemysław R.:
Paweł M.:
Czym to się różni od Twojego zadania?

zrób z kwerendy W1 kwerendę agregującą i zobacz czy działa

Michał mówił o tym, że W1 jest kwerendą wybierającą.
Więc to raczej byłaby zmiana założeń zadania :P

konto usunięte

Temat: Złożona kwerenda aktualizująca zamiast usuwającej i...

Paweł M.:
Przemysław R.:
Paweł M.:
Czym to się różni od Twojego zadania?

zrób z kwerendy W1 kwerendę agregującą i zobacz czy działa

Michał mówił o tym, że W1 jest kwerendą wybierającą.
Więc to raczej byłaby zmiana założeń zadania :P

kwerenda wybierająca może mieć włączone agregowanie i generować błąd o którym pisał i nadal jset kwerendą wybierającąPrzemysław R. edytował(a) ten post dnia 28.12.09 o godzinie 11:35
Paweł M.

Paweł M. Solution Architect @
Qlik - Region East
Europe, Greece, I...

Temat: Złożona kwerenda aktualizująca zamiast usuwającej i...

Jeżeli W1.Pa,Pb,Pc zawierają agregacje - to fakt...

Oto co Microsoft o tym pisze:
http://support.microsoft.com/default.aspx?scid=kb;en-u...

Ale jeżeli nie - a błąd występuje, to należy sprawdzić czy w tabelach założone są primary key na P1,P2,P3 i czy kwerenda W2 nie generuje przypadkiem dubli dla tych samych wartości klucza P1,P2,P3.Paweł M. edytował(a) ten post dnia 28.12.09 o godzinie 12:02



Wyślij zaproszenie do