W dniu 2016-03-02 o 09:00,
boloc...@gmail.com pisze:
>> Dlatego, ze próbujesz otwierać dwa niezależne zestawy danych używając
>> tego samego połączenia.
>> Ale to już wiesz, bo przeczytałeś tekst wyjątku ;-)
> Wiem, ale... inne aplikacje dzialaja tak samo, jedno polaczenie do bazy i kilkanascie otwartych query i dziala bez zastrzezen!
Ale zmienił się AnyDAC i działanie MARSA ma pewne ograniczenia i
niedogodności, poczytaj sobie na MSDN.
Kluczową sprawą jest włączenie *set nocount on*.
>>> MARS w ustawieniach FireDAC'a jest wlaczony, nie ma zadnych cudow - ot kilka ADQuery, otwieranych w zaleznosci od potrzeb.
>> Tak, ale jak są otwierane i jak dokładnie dla każdego z nich jest
>> ustawione Connection i FetchOptions?
> Wszystkie sa podpiete pod jedno Connection, FetchOptions bylo OnDeman - zmienilem na All, zaczelo dzialac.
To może działać poprawnie tylko i wyłącznie w jednym przypadku - kiedy w
tym samym czasie dla tego samego połączenia masz tylko jeden otwarty
kursor na serwerze.
SQL Profiler Twoim przyjacielem.
>>> A tnie sie niesamowicie - dodatkowo uruchomienie procedury skladowanej powoduje deadlock!!
>> A to już Twój problem, a nie FireDAC/MSSQL.
> No chyba jedna nie do konca moj :) bo...
Nie ma bo; mam wrażenie, że nie do końca rozumiesz jak to działa.
I tak, zważywszy na to że MSSQL działa tak a nie inaczej, to jest to
Twój błąd :)
>> wszystko zależy co ta procedura robi, jak to robi i jak jest odpalana z
>> aplikacji - chodzi o transakcje.
> Procedura robi update na jedenj tabeli, jest "opakowana" transakcjaNie
>> Masz w tej procce set nocount on?
> Nie mam :/ ale nigdy nie bylo i D2007 dzialo bez problemow...
> Pokombinuje jeszcze z tym
ZAWSZE musisz mieć to włączone przy MARS.
>> Ta procka aktualizuje dane w tabelach, na których są triggery?
>> Czy triggery mają set nocount on?
> Nie ma trigerow na tej tabli, nie sa potrzebne
>
>> I jeszcze jedno; jak masz ustawione FetchOptions.CursorKind,
> Domyslna wartosc ckAutomatic
Zostaw.
>> ResourceOptions.DirectExecute, i jeszcze coś było z odpowiedzią serwera,
>> ale nie pamiętam co :/
> DirectExecute jest wylaczony
Włącz.
>>> Jedyne rozwiaznie jakie znalazlem to instalacja nowego klienta SQL ale czy to jest rozwiaznie?
>> Na pewno nie zaszkodzi, bo MARS zadziała Ci tylko z NativeClient - nie z
>> czystym ODBC.
> Fakt, ze nie zaszkodzi - na kilku stanowiskach bez zmian w aplikacji (wylaczone FetchAll) pomoglo. Teraz jest wlaczone FetchAll i na innych bez upgradeu zaczelo dzialac, ale upgrade zrobie chyba na wszystkich.
Tylko, ze FetchAll to obosieczny miecz...
>> Podpowiedzi;
>> 1) FetchAll zawsze załatwia sprawę, ale musi być tryb blokujący do
>> otwierania dataseta
> W tej chwili jest FetchAll i tryb nie blokujacy i jakos dziala
>
>> 3) ConnectionPooling powinien zawsze załatwić sprawę.
> Hmm...opcja do przemyslenia i poczytania, nie uzywalem tego ale moze trzeba zaczac :)
>
> Dzieki za podpowiedzi
> Bolo
>
--
wloochacz