Wątek przeniesiony 2021-01-28 13:27 z Inne języki programowania przez cerrato.

VBA edytowanie danych w tabelach i kwerendach

0

kiedy muszę dokonać zmiany danych w tabeli to korzystam ze schematu

Dim baza As DAO.Database
Dim zrodlo As DAO.Recordset

Set baza=CurrentDb
Set zrodlo = baza.OpenRecordset("nazwa tabeli")
zrodlo.MoveFirst
zrodlo.Edit
zrodlo![jakies_pole]="jakaś nowa wartość"
zrodlo.Update
zrodlo.Close
set zrodlo=Nothing
set baza=Nothing

Problem pojawia się kiedy zamiast tabeli "nazwa tabeli" chciałbym edytować dane w kwerendzie. Czy ktoś może mi podrzucić kawałek kodu lub w inny sposób podpowiedzięć jak to zrobić w VBA. Z góry dziękuję.

0

@UglyMan: wiem. pierwsze kroki skierowałem na support. kiedy skorzystałem z tego, to po prostu otworzyło mi nową zakładkę z wynikiem kwerendy. Mój problem polega na tym że nie wiem jak to przełożyć na VBA tak aby uzyskać efekt jak w powyższym kodzie

0

Generalnie jeżeli wstawisz nazwę kwerendy to stworzysz recordset w typie dynaset. W czym masz problem?

0

Nie jestem znawcą od VBA, ale z tego, co tui piszą https://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/database-object-dao to

Use the OpenRecordset method to execute a select query and create a Recordset object.

Czyli możesz tam podać kwerende czyli SQLa.

0

@UglyMan: dowolny SELECT łączący dane z dwóch tabel

0

@Panczo: jeżeli wpiszę w miejsce "nazwa tabeli" - "nazwa kwerendy" to wywala mi błąd. I utknąłem. Możesz mnie poratować kawałkiem kodu gdzie to jet prawidłowo napisane?

0

Poratuje, jak zdradzisz jaki bład dostajesz...

To nie zadziała, możesz pobrać do recordset'u połączone dane np. tak:

sql = "select * from tab1 inner join tab2 on tab2.id=tab1.id"
Set zrodlo = baza.OpenRecordset(sql)

Ale to nie znaczy, że dostaniesz zestaw który można aktualizować

0

@Panczo: Piszę w Accessie i dostaję: Run-time error "3061' Za mało parametrów. Oczekiwano 1. przy Set zrodło=db.Openrecordset...

0

Czy kwerenda którą chcesz pobrać korzysta z wartości z innych formularzy, lub oczekuje parametru?

0

@Panczo: tak. pobiera jeden parametr z formularza. ale to chyba nie to ponieważ jak odpalam tę kwerendę to pokazuje dobrze oczekiwany wynik.

0

@Panczo: już chyba widzę że w poprzednim wpisie się myliłem. jak usnąłem parametr zadziałało

0

Otwarcie przez OpenRecodset nie zadziała jesli to są tam odnosniki do innych formularzy, mozna obejść np. tak:

Dim prm As DAO.Parameter
Dim qdf As DAO.QueryDef
Dim sql as string

sql=currentdb.QueryDefs("nazwa kwerendy").SQL
Set qdf = CurrentDb.CreateQueryDef(vbNullString, sql)
For Each prm In qdf.Parameters
    prm.Value = Eval(prm.Name)
Next
Set zrodlo = qdf.OpenRecordset
0

@Panczo: przepisałem, na razie bez zastanowienia, Twój kod i wywaliło mi błąd 424 Object required na set zrodlo=qdf.openrecordset

0

a zmieniłes nazwę kwerendy?

Nie mam teraz pod ręka access'a więc pozstaje Ci debug

0

@Panczo: aż taki początkujący to ja nie jestem :-) pewnie że zmieniłem :-)
Dzięki za pomoc. Powalczę chwilę sam i znajdę przyczynę.

0

@Panczo: jeszcze raz dzięki. Powalczyłem i teraz już działa tak jak chciałem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1