Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

VBA + excel + update (jak sprawdzic czy dany rekord istnieje w bazie danych)

Alkaidek 05 Wrz 2011 12:40 2450 2
  • #1 05 Wrz 2011 12:40
    Alkaidek
    Poziom 10  

    Swoją zabawę z vba i excelem rozpoczęłam od wczoraj...
    Napisałam makro, które robi aktualizacje cen. W excelu podawany jest kod towaru, cena, która jest aktualizowana dla tego towaru oraz dla którego cennika cena ta ma być aktualizowana. Wszystko w tym dodatku jest teoretycznie okej i teraz tu moje pytanie... Jak sprawdzić czy dany rekord w ogóle istnieje w bazie i wyświetlić informację o braku towaru, gdy wpisany rekord(NrTowar) nie znajduje się w bazie.

    Oto kod, który wykonuje Update do mojej bazy:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

  • Pomocny post
    #2 05 Wrz 2011 13:38
    marcinj12
    Poziom 40  

    Rzucasz się od razu na głęboką wodę, mam nadzieję że już programowałeś wcześniej :)

    Są dwa sposoby rozwiązania Twojego problemu:
    1. Przed wykonaniem UPDATE zrobić SELECT, i jeżeli nie zwróci on pożądanych wyników -> oznaczyć rekord jako nieistniejący w bazie. Sam czasami robię to w ten sposób:
    a. wykonać (z wykorzystaniem ADODB.Recordset)

    Kod: vb
    Zaloguj się, aby zobaczyć kod
    żeby wybrać wszystkie rekordy które istnieją w bazie.

    b. pętlą
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    przelecieć przez wszystkie rekordy i zapisać je do porównania na później. Na przykład: stworzyć tablicę lub, jak na przykładzie, jeżeli nie chcesz się bawić w przeszukiwanie tablicy, po prostu dołączasz do stringa rozdzielanego np. średnikiem kolejne indeksy (ew. ze średnikiem na początku). Tworzysz w ten sposób ciąg w stylu:
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    c. Dla każdego indeksu przed UPDATE sprawdzasz, czy indeks występuje w tablicy. Jeżeli masz je w stringu pelnaListaIndeksow rozdzielone np. średnikiem, sprawdzasz po prostu czy:
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Jeżeli jest -> to indeks jest w bazie i wykonujesz UPDATE, jeżeli nie -> to go tam nie ma i oznaczasz go stosowaną informacją.

    2. Drugi sposób to działanie "na żywo" : robisz UPDATE i sprawdzasz ilość rekordów, których zapytanie dotyczyło. Jeżeli = 0 tzn. indeks nie istnieje w bazie (lub z jakiś powodów nie został updatowany), jeżeli = 1, tzn. że zaktualizowano dokładnie jeden indeks.
    Wkleję poniżej kod z programu którym ja to realizuję, bo nieco inaczej wykonuję zapytania (z obiektem ADODB.Command). Możliwe że na Twoim kodzie też zadziała, ale nie sprawdzałem. Zmienna o której mowa to RecordsAffected (nazwana tak tylko dla zgodności z innymi językami, możesz tam wstawić dowolną zmienną). Sądzę że reszty się domyślisz :)
    Kod: vb
    Zaloguj się, aby zobaczyć kod

  • #3 05 Wrz 2011 14:15
    Alkaidek
    Poziom 10  

    Dzięki wielkie, wykorzystałam sposób drugi, który zadziałał ;)

TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo