🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi
5 messages
5 total messages Started by baran_r Fri, 03 Jun 2016 20:30
Blokowanie tabeli w trakcie edycji - zawieszony zapis zmian
#344974
Author: baran_r
Date: Fri, 03 Jun 2016 20:30
26 lines
2170 bytes
Witam


Mam dane na serwerze  MSSQL 2012, podpinam się za pośrednictwem komponentów ANYDAC, pobrane dane wyświetlam i edytuje w TDBEDIT-ach

I mam problem z zapisem zmian.

Jeżeli tabela jest otwarta przez jednego użytkownika to wszystko działa poprawnie
natomiast jeżeli drugi użytkownik otworzy edytowaną tabelę i wyświetli jej zawartość zapis zaktualizowanych danych jest zawieszony do czasu aż drugi użytkownik zamknie tabelę lub dokona operacji edycji lub dodania rekordu. 

Do edycji pobieram dane do DBEDIT i po zakończeniu edycji w ramach transakcji zapisuje.

W skrócie wygląda to tak
DM.prac.Active :=True;
dm.ADConnection1.StartTransaction;
DM.prac.CachedUpdates  := true;
DM.prac.edit;

...edytuje dane......
DM.prac.post;
DM.prac.CommitUpdates;
DM.ADConnection1.Commit;
DM.prac.CachedUpdates  := false;


Co można zrobić aby zlikwidować ten problem ?
Re: Blokowanie tabeli w trakcie edycji - zawieszony zapis zmian
#344983
Author: J-23
Date: Sat, 04 Jun 2016 22:07
34 lines
2187 bytes
W dniu 03.06.2016 o 22:30, baran_r@poczta.onet.pl pisze:
> Witam
>
>
> Mam dane na serwerze  MSSQL 2012, podpinam się za pośrednictwem komponentów ANYDAC, pobrane dane wyświetlam i edytuje w TDBEDIT-ach
>
> I mam problem z zapisem zmian.
>
> Jeżeli tabela jest otwarta przez jednego użytkownika to wszystko działa poprawnie
> natomiast jeżeli drugi użytkownik otworzy edytowaną tabelę i wyświetli jej zawartość zapis zaktualizowanych danych jest zawieszony do czasu aż drugi użytkownik zamknie tabelę lub dokona operacji edycji lub dodania rekordu.
>
> Do edycji pobieram dane do DBEDIT i po zakończeniu edycji w ramach transakcji zapisuje.
>
> W skrócie wygląda to tak
> DM.prac.Active :=True;
> dm.ADConnection1.StartTransaction;
> DM.prac.CachedUpdates  := true;
> DM.prac.edit;
>
> ...edytuje dane......
> DM.prac.post;
> DM.prac.CommitUpdates;
> DM.ADConnection1.Commit;
> DM.prac.CachedUpdates  := false;
>
>
> Co można zrobić aby zlikwidować ten problem ?
>

Co dla Ciebie stanowi problem? Bo nie do końca to opisałeś. Baza 
zachowuje się odpowiednio czeka na zablokowany rekord aż zostanie 
zwolniony. Tyle :)

Pozdrawiam
Re: Blokowanie tabeli w trakcie edycji - zawieszony zapis zmian
#344995
Author: arivald
Date: Sun, 05 Jun 2016 05:47
43 lines
1981 bytes
W dniu 2016-06-03 o 22:30, baran_r@poczta.onet.pl pisze:
> Witam
>
>
> Mam dane na serwerze  MSSQL 2012, podpinam się za pośrednictwem komponentów ANYDAC, pobrane dane wyświetlam i edytuje w TDBEDIT-ach
>
> I mam problem z zapisem zmian.
>
> Jeżeli tabela jest otwarta przez jednego użytkownika to wszystko działa poprawnie
> natomiast jeżeli drugi użytkownik otworzy edytowaną tabelę i wyświetli jej zawartość
>
> Do edycji pobieram dane do DBEDIT i po zakończeniu edycji w ramach transakcji zapisuje.
>
> W skrócie wygląda to tak
> DM.prac.Active :=True;

> dm.ADConnection1.StartTransaction;
Tą linię wywal

> DM.prac.CachedUpdates  := true;
> DM.prac.edit;
>
> ...edytuje dane......
> DM.prac.post;

I tu ją dodaj:
dm.ADConnection1.StartTransaction;
> DM.prac.CommitUpdates;
> DM.ADConnection1.Commit;

> DM.prac.CachedUpdates  := false;
To też wywal. CachedUpdates powinno być włączone cały czas, jak używasz. 
Najlepiej jeszcze przed otwarciem datasetu.

>
>
> Co można zrobić aby zlikwidować ten problem ?
>

Nauczyć się co to sa cached updates, i jak działają transakcje.

-- 
Arivald
Re: Blokowanie tabeli w trakcie edycji - zawieszony zapis zmian
#344996
Author: wloochacz
Date: Mon, 06 Jun 2016 07:19
12 lines
1468 bytes
W dniu 2016-06-03 o 22:30, baran_r@poczta.onet.pl pisze:
> Co można zrobić aby zlikwidować ten problem ?
Już Ci koledzy napisali, co.
Dodatkowo, możesz (a wręcz powinieneś) przestawić bazę danych pod 
izolację transkacji _Snapshot_.
https://msdn.microsoft.com/pl-pl/library/tcbchxcb(v=vs.110).aspx

Jak to włączysz, to pewnie problem zniknie natychmiast.
Ale tak czy inaczej, źle używasz Cached Udpates.

-- 
wloochacz
Re: Blokowanie tabeli w trakcie edycji - zawieszony zapis zmian
#344997
Author: J-23
Date: Mon, 06 Jun 2016 20:41
16 lines
1647 bytes
W dniu 06.06.2016 o 09:19, wloochacz pisze:
> W dniu 2016-06-03 o 22:30, baran_r@poczta.onet.pl pisze:
>> Co można zrobić aby zlikwidować ten problem ?
> Już Ci koledzy napisali, co.
> Dodatkowo, możesz (a wręcz powinieneś) przestawić bazę danych pod
> izolację transkacji _Snapshot_.
> https://msdn.microsoft.com/pl-pl/library/tcbchxcb(v=vs.110).aspx
>
> Jak to włączysz, to pewnie problem zniknie natychmiast.
> Ale tak czy inaczej, źle używasz Cached Udpates.
>

źle używa bo nie rozumie transakcji. Także na początek lektura pt. 
"Transakcje baz danych" tak do poduszki

Pozdrawiam
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads