Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Access i odwołanie do tabeli....

G.B. 27 Apr 2005 14:33 8781 12
  • #1
    G.B.
    Level 13  
    Witam:
    Nie jestem zbyt biegły jeżeli chodzi o Accessa i Visual Basic, stąd moje banalne pewnie pytanie. Mianowicie: jak z poziomu kodu zawartego w procedurze zdarzenia zapisać jakąś wartość bezpośrednio w komórce tabeli?
    Procedura zdarzenia uruchamiana jest przez Form_load formularza niekoniecznie mającego związek z interesującą mnie tabelą. Piszę "niekoniecznie" dlatego, że interesuje mnie i jeden i drugi przypadek.

    Z góry dzięki.

    pozdrawiam czytających
    G.B.
  • #2
    m_wojcik
    Level 25  
    Hmm, no ja na przykład w kodzie odpalam kwerendę:
    DoCmd.OpenQuery "Que_nazwa" która robi wszystko co chcę (tworzy tabelę, wgrywa dane itp)
    Myslę że można też wstawić SQLa np. SELECT UPDATE
    Generalnie, w Accessie masz bardzo dobrego helpa i zobacz tam koniecznie alfabetyczny wykaz funcki i komend VB a znajdziesz rozwiązanie.
    Powodzenia!
  • #3
    G.B.
    Level 13  
    Dzięki za zainteresowanie tematem:
    Ehm... Tak jak pisałem nie jestem zbyt mocny jeżeli chodzi o Accessa. Szczerze mówiąc nie wiem co może mi dać kwerenda, o której mowa wyżej... Spróbuję uściślić jeszcze bardziej swoje pytanie. Chciałbym się odnieść bezpośrednio do tabeli tak jak do formularza np:
    Form_nazwaformularza.nazwaformantu.value=(tutaj wylicza się wartość do wstawienia)
    albo:
    Form_nazwaformularza.źródłformantu.value=(tutaj wylicza się wartość do wstawienia)

    Da się?

    pozdrawiam
    G.B.
  • #4
    Zuchan
    Level 16  
    Operacja, któą chcesz wykonać jest mozliwa do zrobienia, jednak nie ma gotowych mechanizmów w Accessie do przypisywania wartości komórkom tabeli.
    Namiary na Help Accessa są jak najbardziej właściwe, przeszkodą może być brak "zaawansowania". Proponuję poszukać odpowiedzi na forum poświęcone Accessowi. Na pewno jest możliwa taka operacja przypisania, po dokonaniu otwarcia tabeli jako dynamicznego zbioru rekordów. Wymaga to zaprzyjaźnienia się z takim słowem jak RecordSet i wszystkimi funkcjami jakie mu towarzyszą.
  • #5
    m_wojcik
    Level 25  
    Witam, czyli chodzi Ci o wpisanie wartosci do tabeli, nie do formularza? Czyli np. masz otwarty formularz logowania do bazy i chcesz gdzieś wpisać godzinę logowania (do jakiejś tajnej tabeli?)
    Zaraz to sprawdzę, a co do kwerendy to też jest to m. in. sposób na wpisanie do tabeli danych, o które CI chodzi, czyli np:
    - robisz tabelę LogonDate z polem LogonDate (format Data/Czas)
    - robisz kwerendę (widok SQL):
    "UPDATE LogonDate SET LogonDate.LogonDate = Now();"
    i potem w kodzie VB wkładasz operację jak pisałem wcześniej, z nazwą kwerendy powyżej. Powinno zadziałać - wpisze do tabelki "Now" czyli aktualną datę i godzinę.

    ...sprawdzałem wpis bezposredni, ale upiera się, że mozna ustawiać wartości w obiektach - czyli to co wyżej napisałem albo makro (SetValue).
    Może ktoś ma lepszy pomysł, ja niestety tez nie jestem super biegły ;)
  • #6
    Kristek
    Level 16  
    Przykład:

    1. Utwórz bazę pn. "db1.mdb"
    2. Utwórz tabelę "Tabela1" z polem o nazwie "dane" z typem "tekst"
    3. Utwórz formularz "Formularz1"
    4. W projekcie formularza dodaj kod:

    Private Sub Form_Load()

    Dim baza As Database
    Dim rst As Recordset
    Set baza = CurrentDb
    Set rst = baza.OpenRecordset("Tabela1", dbOpenDynaset)
    rst.AddNew
    rst![dane] = "kicha"
    rst.Update
    Set rst = Nothing
    Set baza = Nothing

    End Sub

    5. pozapisuj wszystko
    6. za każdym otwarciem formularza "Formularz1" w tabeli będzie ci przybywać 1 rekord w polu "dane" a zawierać będzie "kicha"

    Jeżeli musisz wpisać "kicha" w określonym miejscu w istniejącej tabeli w której już masz pewne dane, to musisz wprowadzić procedurę wyszukującą w tej tabeli rekord w którym mają być wpisane dane. (do tego służy np FindFirst)
  • #7
    G.B.
    Level 13  
    Dzięki serdeczne za zainteresowanie tematem.
    Wszystkie podane pomysły wypróbuję i obowiązkowo dam znać co i jak mi wyszło. Przed nami długo weekend więc będzie dosyc czasu.
    Jeszcze raz wielkie dzięki za porady.

    pozdrawiam
    G.B.
  • #8
    G.B.
    Level 13  
    witam:
    mam nadzieję że jeszcze kroś to czyta ;-)
    Kristek:
    Twoje rozwiązanie wydaje się być dokładnie tym czego szukam, jedno tylko pytanie:
    Dim baza As Database
    to u mnie nie chce przejść... nie mam takiego typu i w związku z tym mam oczywiście komunikat:
    Compile error: User-defined type not defined.
    z tego co pisałeś odniosłem wrażenie, że to typ predefiniowany... pewnie znowu czegoś nie wiem.
    Używam Accessa XP, nie wiem na ile to coś zmienia...
    Prośba o pomoc
  • Helpful post
    #9
    Kristek
    Level 16  
    hmm sprawdzę na accesie 2003 i dam ci znać (na 97 to działa na bank).
    Wiem że moduły pisane w access 97 i konwertowane do 2003 nie zawsze działają jak trzeba (!!!!). Dziwne byłoby żeby nie można tego zadeklarować w 2003.
    Szczerze powiedziawszy, to ze względu na niekompatybilność zrezygnowałem z office XP i powróciłem do... 97 :-)
    Ale jak pisałem wyżej - sprawdzę (ale najwcześniej we wtorek dam ci znać)
  • Helpful post
    #10
    m_wojcik
    Level 25  
    Zgadzam się z Kolegą, nie wiedzieć czemu w Accessie 2003 częśc rzeczy działa zupełnie inaczej i po konwersji bazy z '97 są problemy.
    G.B. : sprawdź jeszcze czy z kwerendą da się to zrobic tak jak chciałeś.
    Pozdrawiam -
  • #11
    G.B.
    Level 13  
    Witam ponownie:
    A'propos mojego problemu z "dim as database". Jakieś dziwactwo... Raczej nie związane z konwersją, a bardziej z systemem operacyjnym jak mi się wydaje.
    Fakty:
    - pod W98SE zarówno pod Office97 jak i pod OfficeXP jak otwieram przedmiotową bazę danych to nie mam typu "Database". Tworzę nową bazę, w którymkolwiek z office... ciągle brak wspomnianego typu.
    - pod WXP i Office2003 tworzę nową bazę .. jest i "Database"... otwieram męczoną bazę .. znowu go nie ma.. :-D
    Rozwiązanie:
    Utworzyć nową bazę danych pod WXP+Office2003(podejrzewam że inne pakiety Office też by się nadały) importować poprzez "wstaw tabelę" tabele, formularze, moduły itd. Tak "utworzona" baza danych ma wszystkie typy i działa bez zarzutu... nawet przeniesiona pod W98SE i dowolny office.
    Zamieszczam ten opis tylko po to, bo może kiedyś się komuś przyda.
    Problemem może być np. wersja napędu baz danych.. ale to już tylko przypuszczenie..
    Jak całkowicie skończę z tą bazą danych dam znać jeszcze czy wszystko gra.
    Dzięki jeszcze raz za zainteresowanie tematem.
    pozdrawiam
    G.B.
  • #12
    G.B.
    Level 13  
    Witam czytających:
    m_wojcik :
    Rzeczywiście pomysł z kwerendą nadaje się również do rozwiązania tego typu problemu, ale ze względu na charakter dokonywanych przeze mnie obliczeń, wygodniejsze dla mnie będzie zastosowanie kodu od Kristka. Niemniej, w każdym razie, zawsze się nauczyłem innego podejścia do problemu.
    Baza działa stabilnie ( póki co :-D ). Mam nadzieję, że będzie OK również dalej.
    Dzięki za pomoc, polecam się na przyszłość ;-).

    pozdrawiam
    G.B.
  • #13
    Kristek
    Level 16  
    Witam ponownie !
    Nie zdążyłem we wtorek zająć się tematem - dzisiaj postanowiłem to jeszcze trochę pomęczyć.
    Rzeczywiście tworząc rzeczoną "bazę z kichą" w AccesieXP (vel 2003 vel 10) brak jest odwołania do Database. Należy w "Tools" a potem "References" zaptaszkować "Microsoft Visual Basic For Applications Extensibility 5.3" oraz "Microsoft DAO 3.6 object library" i wtedy pozbywamy się Compile error: User-defined type not defined.
    Ale za to nie poradziłem sobie już z Type mismatch który pojawia się w zamian (!!!!!) a dotyczy ewidentnie tabeli :[.
    Dokonałem więc konwersji bazy utworzonej w Accesie97 do AccesaXP i....
    działa ok. Oba komputery na których pracowałem są na WinXP. Załączam bazę utworzoną w accesie 97 (raczej dla ciekawostki bo widzę że @G.B poradził sobie z problemem).