Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 63928 Skopiuj do schowka Aktualizacja tabeli w ACC z Recordset-u
Autor Wiadomość
Artik 



Pomógł: 2602 razy
Posty: 8571
Wysłany: 25-01-2019, 01:18   Aktualizacja tabeli w ACC z Recordset-u

Na razie może teoretycznie, a jak się nie uda to przejdziemy do praktyki. :-)

Załóżmy taki scenariusz.
Pobieram, oczywiście z poziomu Excela :-) , Recordset z określonej tabeli bazy Access-a. Recordset zostaje odłączony.
Kod:
Rst.Open "SELECT * FROM " & sTable, conConnection, , , adCmdText
Set Rst.ActiveConnection = Nothing

Następnie wykonuję na tym Recordsecie różne czynności: dodanie rekordu, usunięcie rekordu, modyfikacja rekordu.

Teraz chciałbym zaktualizować tabelę z której Rst został pobrany, by wyglądała tak jak zmodyfikowany Rst.
Jakie czynności powinienem wykonać, by osiągnąć zamierzony cel?
Próbowałem coś na zasadzie
Kod:
Rst.ActiveConnection = cn
 Rst.UpdateBatch
ale bez większego (a nawet i mniejszego ;-) ) powodzenia.

Artik
_________________
Persistence is a virtue in the world of programming.
ID posta: 361249 Skopiuj do schowka
  Wersja Office-a: Win Office 365
 
Wormsek 



Zaproszone osoby: 2
Pomógł: 912 razy
Posty: 5266
Wysłany: 25-01-2019, 15:19   

Tak na czuja po nazwach bo nie wiem czy to w ogóle możliwe ;-)

Czyli otwórz RS. Zamknij połączenie. Działaj. Otwórz nowy RS2 z bazy i sklonuj z RS?
_________________
Pozdro
Worm

FAQ - Najczęściej zadawane pytania.
JAK KORZYSTAĆ Z SZUKAJKI
Słownik funkcji

Znajdź nas na Facebook'u

A może fajny dodatek do excela?
ID posta: 361300 Skopiuj do schowka
 
 
BrunO 
ExcelSpec



Pomógł: 119 razy
Posty: 513
Wysłany: 26-01-2019, 15:43   

Niby z zagadnieniem walczę od jakiegoś roku z okładem, ale sporo rzeczy do których doszedłem to efekt prób i błędów połączonych bardziej z czujem niż zrozumieniem tematu, ale mi jako tako mechanizm Pobierz do RS -> Namieszaj w RS -> Wrzuć zmiany w RS do DB jako tako działa* więc podzielę się mechanizmem który wypracowałem (chlastam to mocno z większej całości, więc mogłem gdzieś jakąś deklarację itp. przeoczyć).

Kod połączenia - pewnie inny też zadziała, ważne, żeby bazę poczuło.
Kod:
Sub OpenCN()


Public Const cnTyp As String = "ADODB.Connection"
Public Const cnProv As String = "Microsoft.ACE.OLEDB.12.0"

    Set Cn = CreateObject("ADODB.Connection")
    With Cn
        .Provider = "Microsoft.ACE.OLEDB.12.0"
        .ConnectionString = "Data Source=" & "TU SOBIE ŚCIEŻKĘ DO ACC ZPREPARUJ"
        End If
        .Open
    End With
   
End Sub


Kod tworzenia Recordsetu, pod sql wrzucamy jakiegoś SELECTA
Kod:
Public Sub SQL_do_RS(sql As String, rs As Recordset)
'zwraca wynik zapytania do recordsetu
Dim i As Long

Call OpenCN

rs.CursorLocation = adUseClient     '<=== To jest chyba kluczowe, żeby UpdateBath później zadziało
rs.Open sql, Cn, ADODB.adOpenForwardOnly, ADODB.adLockBatchOptimistic
Set rs.ActiveConnection = Nothing

Cn.Close
Set Cn = Nothing

End Sub


A gdy już powprowadzasz zmiany,


Kod:
Sub Zmiana_w_RS_do_DB(rs As Recordset)
'aktualizacja bazy na podstawie zmian wprowadzonych do recordsetu


'Historii dwóch poniższych linijek i ich konsekwencji nie pamiętam. Coś mi na pewno sypało błędem i wymyśliłem taką łatę, o której do tego momentu zapomniałem... Prawdopodobnie dałoby się na samym rs pojechać
Dim rsTemp As Recordset
Set rsTemp = rs

Call OpenCN()


rsTemp.ActiveConnection = Cn
rsTemp.UpdateBatch

Set rsTemp.ActiveConnection = Nothing

Cn.Close
Set Cn = Nothing

End Sub


*Aczkolwiek co do całej tej metody mam coraz bardziej sceptyczne podejście. Zadziała pod warunkiem, że od pobrania do aktualizacji RS nie zmieni się baza (a przynajmniej tabela, z której pobierzesz dane).
W związku z tym metoda raczej słabo sprawdzi się gdy na bazie będzie działało więcej niż jeden użytkownik. Dlatego ostatnio cały projekt przerobiłem z UpdateBatch na zwykle SQLowe UPDATE.
ID posta: 361355 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe