VFP - MSSQL 2005
Zbigniew Grzelczak - 01-02-2007 00:07
VFP - MSSQL 2005 1. Czy w MSSQL jest instrukcja odpowiadająca Lock() w VFP ? 2. Czy dobierając się do baz MSSQL przez ODBC, można korzystać z trybu transakcji jawnych (explicit) w MSSQL?
Pozdrawiam
Marcin A. Guzowski - 02-02-2007 00:09
Zbigniew Grzelczak napisał(a): > 1. Czy w MSSQL jest instrukcja odpowiadająca Lock() w VFP ?
Akurat nie używałem Visual FoxPro (jeśli o to chodzi), więc trudno mi powiedzieć. Jak napiszesz, co chcesz osiągnąć, to wtedy się wypowiem o możliwościach.
> 2. Czy dobierając się do baz MSSQL przez ODBC, można korzystać z trybu > transakcji jawnych (explicit) w MSSQL?
Oczywiście można. Każdy dobry ODBCowski provider powinien to zapewniać.
-- Pozdrawiam, Marcin Guzowski http://guzowski.info
Zbigniew Grzelczak - 03-02-2007 00:02
Chciałbym zablokować ostatni rekord tabeli, aby nikt w międzyczasie nie zmienił jego zawartości. Odczytać z niego dane. Zrobić kilka innych czynności i odblokować rekord. Będę wdzięczny za wskazówki. Pozdrawiam
Użytkownik "Marcin A. Guzowski" <tu_wstaw_moje_imie@guzowski.info> napisał w wiadomości news:ept6l9$c0$1@atlantis.news.tpi.pl... > Zbigniew Grzelczak napisał(a): >> 1. Czy w MSSQL jest instrukcja odpowiadająca Lock() w VFP ? > > Akurat nie używałem Visual FoxPro (jeśli o to chodzi), więc trudno mi > powiedzieć. Jak napiszesz, co chcesz osiągnąć, to wtedy się wypowiem o > możliwościach. > >> 2. Czy dobierając się do baz MSSQL przez ODBC, można korzystać z trybu >> transakcji jawnych (explicit) w MSSQL? > > Oczywiście można. Każdy dobry ODBCowski provider powinien to zapewniać. > > > -- > Pozdrawiam, > Marcin Guzowski > http://guzowski.info
Marcin A. Guzowski - 03-02-2007 00:02
Zbigniew Grzelczak napisał(a): > Chciałbym zablokować ostatni rekord tabeli, aby nikt w międzyczasie nie > zmienił jego zawartości. Odczytać z niego dane. Zrobić kilka innych > czynności i odblokować rekord. > Będę wdzięczny za wskazówki.
W SQL Server 2005 nie ma specjalnych komend wyznaczających co ma być blokowane. Blokowanie to efekt wtórny związany z transakcjami lub/i hintami dot. blokowania (locking hints) w zapytaniach.
Z tego co widzę Ty oczekujesz blokowania na poziomie rekordu połączoną z pewnością operacji UPDATE. Jest to przewidziane w MSSQLu 2005. Generalnie jak robisz odczyt z tabeli, zakładany jest shared lock (S). Pozwala on na równoległy odczyt i modyfikację danych. Jeżeli w transakcyjnym zapytaniu SELECT dasz hinta UPDLOCK - wtedy odczyt będzie możliwy, ale sinik nie dopuści do modyfikacji odczytanych rekordów innemu procesowi niż ten, który założył UPDLOCK i wciąż trzyma transakcję. Domyślną ziarnistością blokady jest w tym przypadku poziom wiersza.
Więc tak:
CREATE TABLE lock_test (a int) GO INSERT INTO lock_test(a) VALUES(1) INSERT INTO lock_test(a) VALUES(2) GO
Połączenie 1: BEGIN TRAN SELECT * FROM lock_test WITH (UPDLOCK) WHERE a = 1 -- i tu jesteśmy w transakcji na odczycie
Połączenie 2: SELECT * FROM lock_test -- pójdzie
UPDATE lock_test SET a = 5 WHERE a = 1 -- nie pójdzie bo jest blokada
Jedna uwaga: teoretycznie blokowanie jest na poziomie wiersza, ale... jeśli dwa rekordy będą na jednej stronie danych, to SQL Server co prawda zablokuje dany RID (rekord) w trybie U (UPDATE), ale zablokuje też całą stronę danych w trybie IU - aby przeciwdziałać sytuacjom deadlockowym. Efekt będzie pewnie taki, że nie da się z Połączenia 2 updatować żadnego z 2ch wierszy.
-- Pozdrawiam, Marcin Guzowski http://guzowski.info
Zbigniew Grzelczak - 03-02-2007 00:02
Miło, że chciało Ci się tyle pisać. Dzięki temu nareszcie wiem na czym polega nieco inne podejście do współbieżności od tego, które znałem do tej pory. Bardzo dziękuję
Pozdrawiam
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Zdalny =?ISO-8859-2?Q?dost=EAp_do_MSSQL_bez_zarz=B1dzani?==?ISO-8859-2?Q?a?=
[MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?=
[MSSQL 2k] - jak =?ISO-8859-2?Q?pod=B3=B1czy=E6_serwer_na_?==?ISO-8859-2?Q?porcie_innym_ni=BF_1433=3F?=
MSSQL Express czy Oracle Express
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
[MSSQL 2000] =?ISO-8859-2?Q?wywo=B3anie_procesu_z_poziomu_?==?ISO-8859-2?Q?job=27a?=
[MSSQL 2K] =?ISO-8859-2?Q?Wp=B3yw_ustawie=F1_regionalnych_?==?ISO-8859-2?Q?serwera_na_zapytania?=
Pobierananie danych z innej bazy danych w MSSQL
MSSQL , funkcja pobierajaca sama date (bez czasu) w funkcji
[mssql] insert do tabeli na podstawie danych z innej tabeli
zanotowane.pldoc.pisz.plpdf.pisz.platanvarne633.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|