Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Zasady

[Access 2013] Dołączanie danych do wewnętrznej tabeli z kilku PC (frontów bazy).

Idź do strony Poprzedni  1, 2

 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Bazy danych
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
mrowek



Dołączył: 28 Maj 2005
Posty: 330
Skąd: pniewy wlkp

PostWysłany: Pon Gru 18, 2017 2:57 pm      Temat postu: Odpowiedz z cytatem Pisownia

Kod:


Dim sHostName As String

' Get Host Name / Get Computer Name

sHostName = Environ$("computername")




open mode:
- shared
- exclusive

w exclusive nikt inny nie podlaczy sie do danych/bazy. w shared mozna

ogolnie po zmianie formatu z accdb na mdb jako tabela polaczaona (sieciowa) przestal sie pojawiac komunikat o bledzie 3734 -> pojawia sie czasami inny: Could not update; currently locked. czasem ze siec jest niedostepna Your network access was interrupted. To continue, close the database, and then open it again.

testy: pc->lan +lap->wifi + serw = baza na sambie, dysk laptopowy

kazdy klient sie zawaiesza na pare minut podczas zapisu

zmienilem funkcje testujaca aby uzywala adodb.connection oraz adodb.command, zmienilem tez zapytanie wylaczajaca join z zewnetrznej tabeli, poniewaz nr byl ten sam dla dwoch frontow, to odpowiednio ustawilem 1 i 2 aby odroznic inserty.

w wolnej chwili sprawdze czy przenisienie danych na inny serw/dysk/system polepszy responsywnosc udzialu sieciowego :D i tym samym poprawi sytuacje (samba w implementacji appla nie jest wydajna )

sprobowac mozna jeszcze robic inserty z pomoca recordsetu, a pobieranie danych zrobic na innym obiekcie.

edit2:

procedury testowe: mk2 <- nowa, mk <- oryginalna

Kod:
Option Compare Database


Public Sub mk2()
Dim tabela As String
Dim datapoc As Date
Dim datakon As Date
Dim cnn As adodb.Connection
Dim i As Long

Set cnn = CurrentProject.Connection
Dim cmd As adodb.Command


  tabela = "instr"
  cnn.IsolationLevel = adXactCursorStability
  cnn.CommandTimeout = 10
  
  datapoc = Time()
  For i = 1 To 100
  
    Set cmd = New adodb.Command
    
    cmd.CommandTimeout = 10
    cmd.CommandText = " INSERT INTO instr_transakcje ( produkt, revINSTR, revCust, revVLX, userid, [user], nr, [note], sts, stsnowy, centrum, qty ) " & _
                " SELECT temp_instr.produkt, temp_instr.revINSTR, temp_instr.revCust, temp_instr.revVLX, temp_instr.userid, temp_instr.user, 2, temp_instr.note, temp_instr.sts, temp_instr.stsnowy, temp_instr.centrum, temp_instr.qty " & _
                " from temp_instr"
    cmd.ActiveConnection = cnn
    cmd.Execute , , adCmdText Or adExecuteNoRecords
    
  Next i

  datakon = Time
  Debug.Print "Poc: " & datapoc & "   " & vbNewLine & "Kon: " & datakon & ""
  
End Sub



Public Sub mk()

'=====
Dim tabela As String, i As Integer
Dim datapoc As Date, datakon As Date
  
  'On Error GoTo Except

  DoCmd.SetWarnings (0)

  tabela = "instr"
  
  datapoc = Time()
  For i = 1 To 100
   DoCmd.RunSQL " INSERT INTO instr_transakcje ( produkt, revINSTR, revCust, revVLX, userid, [user], nr, [note], sts, stsnowy, centrum, qty ) " & _
                " SELECT temp_instr.produkt, temp_instr.revINSTR, temp_instr.revCust, temp_instr.revVLX, temp_instr.userid, temp_instr.user, " & tabela & ".NR, temp_instr.note, temp_instr.sts, temp_instr.stsnowy, temp_instr.centrum, temp_instr.qty " & _
                " FROM temp_instr LEFT JOIN " & tabela & " ON (temp_instr.revINSTR = " & tabela & ".revINSTR) AND (temp_instr.produkt = " & tabela & ".produkt);", False
  Next i
  
  datakon = Time
  Debug.Print "Poc: " & datapoc & "   " & vbNewLine & "Kon: " & datakon & ""
  
  Exit Sub

'Except:
'MsgBox Err.Description, vbCritical, "Błąd m2-1002"
End Sub


Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Numer GG
Andrzej_55



Dołączył: 19 Lut 2016
Posty: 20

PostWysłany: Pon Gru 18, 2017 6:40 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

Dzięki za wsparcie pomysłami.
W polu sts tabeli temp_instr wpisałem odpowiednio:
- pierwszemu klientowi 51
- drugiemu 61
w tabele z 10-cioma wierszami 52 i 62
w tabele ze 100 wierszami 53 i 63
Widać przemieszanie insertów w tabeli docelowej od poszczególnych klientów aż do załamania.

Mój przykład testowy uzupełniłem także o najprostrze sprawdzanie flagu.
I teraz mam w tabeli docelowej wszystkie wiersze od pierwszego uruchomionego klienta a potem od drugiego.
Tylko, że potrzebuję około 0,5 sekundy aby kliknąć w drugiego klienta, co oznacza, że zawsze flag jest już ustawiony przez pierwszego ... i spokojnie czeka na zakończenie jego insertów.

Załączam spakowane pliki.

Andrzej



BAZA201.rar
 Opis:

Pobierz
 Nazwa pliku:  BAZA201.rar
 Wielkość pliku:  137.01 KB
 Pobierano:  29 raz(y)

Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
mrowek



Dołączył: 28 Maj 2005
Posty: 330
Skąd: pniewy wlkp

PostWysłany: Pon Gru 18, 2017 7:06 pm      Temat postu: Odpowiedz z cytatem Pisownia

dla mk i mk2

po zmianie lokalizacji plików z smbd na serwer windowsowy/udostpenianie plikow jest ok.
zwiekszylem petle do 500 i śmiga bez problemu.

edit:
z ciekawosci zamienilem format z mdb (konwersja publish/save) na format accdb, odswiezylem linki i przestalo dzialac -_- komunikaty o pliku w edycji, zablokowanym przez innego usera itd.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Numer GG
Andrzej_55



Dołączył: 19 Lut 2016
Posty: 20

PostWysłany: Pon Gru 18, 2017 10:44 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

ZNALAZŁEM następujące rozwiązanie:
trzeba na stałe mieć uruchomiony plik blokady bazy wewnętrznej (napisać kawałek kodu przy otwarciu bazy) aby nie było otwierania i zamykania tego pliku.
I wtedy wydaje się być bezbłędnie.

Andrzej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
mrowek



Dołączył: 28 Maj 2005
Posty: 330
Skąd: pniewy wlkp

PostWysłany: Wto Gru 19, 2017 1:24 am      Temat postu: Odpowiedz z cytatem Pisownia

tzn, plik trzeci musi gdzies byc odpalony?
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Numer GG
Andrzej_55



Dołączył: 19 Lut 2016
Posty: 20

PostWysłany: Wto Gru 19, 2017 7:58 am  OP    Temat postu: Odpowiedz z cytatem Pisownia

Dokładnie tak.
Ja zrobiłem takie odpalenie via ukryty formularzyk z podłączonymi danymi (docelowa tabela). Formularzyk uruchamiam w zdarzeniu OnLoad każdego klienta (załączam) aby zagwarantować, że dopiero ostatni klient który się zamknie zdjął odpalenie 3-go pliku.

A.



BAZA201.rar
 Opis:

Pobierz
 Nazwa pliku:  BAZA201.rar
 Wielkość pliku:  148 KB
 Pobierano:  28 raz(y)

Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
mrowek



Dołączył: 28 Maj 2005
Posty: 330
Skąd: pniewy wlkp

PostWysłany: Wto Gru 19, 2017 2:36 pm      Temat postu: Odpowiedz z cytatem Pisownia

dobry hack

(bo wiadomosc jest za krotka)
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Numer GG
karolinavb
Site Admin


Dołączył: 25 Maj 2005
Posty: 7870

PostWysłany: Pią Gru 22, 2017 8:25 pm      Temat postu: Odpowiedz z cytatem Pisownia

Mróweczko ;-))
Aeż to było już na forum na przykład:
Cytat:
- na wejściu zawsze we front uruchamiamy wspomniany formularz, ukryty,
z publicznym w tym formularzu !!!! Recordset do jakiejś małej tabelki

Linki np.:
http://www.granite.ab.ca/access/performanceldblocking.htm
Pozostaje pytanie jakie uprawnienia ma user do folderu, w którym jest back, ale pytający o tym nie pisze, ale na przykład:
Couldn't use <filename>; file already in use.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Andrzej_55



Dołączył: 19 Lut 2016
Posty: 20

PostWysłany: Pią Gru 22, 2017 10:41 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

Dzięki za linki z przykładami.
Cóż - inni byli przede mną z pomysłem utworzenia stałego połączenia z bazą wewnętrzną via ukryty formularz.

Przyznam, że przykład z otwarciem recordsetu na tabeli bardziej mi się podoba od rozwiązania z formularzem.
Niezależnie od wariantu powinienem przenieść wywołanie z OnLoad do OnOpen (jednokrotne wywołanie) i dopisać zamykanie przed QUIT-em z bazy.

Andrzej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
mrowek



Dołączył: 28 Maj 2005
Posty: 330
Skąd: pniewy wlkp

PostWysłany: Sro Gru 27, 2017 9:16 pm      Temat postu: Odpowiedz z cytatem Pisownia

mam tu hipoteze ze w systemie plikow, cifs/samby i ogolnie microsoft faworyzuje ldb w porownaniu do nowego accldb,

przerabialem inny przypadek, accdb nie smigal, mdb bezproblemowo,

czyli accessa mozna uzyc do wydajnosciowo wymagajacych aplikacji ;-)
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Numer GG
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Bazy danych Wszystkie czasy w strefie CET (Europa)
Idź do strony Poprzedni  1, 2
Strona 2 z 2

 
Skocz do:  
Możesz pisać nowe tematy
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
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.16018 sekund, zapytan = 13
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |