lazarus = Firebird - транзакции

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: lazarus = Firebird - транзакции

Сообщение Снег Север » 14.04.2018 14:05:16

Раньше вы писали про ошибку компиляции, теперь - времени выполнения. Так где ошибка возникает?
У меня нет FB так что проверить не могу. Но ошибка при закрытии программы может быть вызвана тем, что вы закрываете при активном соединении с базой и не освобожденных созданных объектах.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: lazarus = Firebird - транзакции

Сообщение bpg » 14.04.2018 16:59:58

Ошибку при компиляции поборол, теперь при исполнении.
Причем только при запуске в отладчике, при запуске просто exeшника все нормально. Но как то "очкую" ;-0, что за хрень?
В отладчике увидел только что вызывается SIGSEGV в application.inc в процедуре
Код: Выделить всё
{------------------------------------------------------------------------------
  TApplication RunLoop
  control is passed to event processor.
------------------------------------------------------------------------------}
procedure TApplication.RunLoop;
begin
  repeat
    if CaptureExceptions then
      try // run with try..except
        HandleMessage;
      except
        HandleException(Self);
      end
    else
      HandleMessage; // run without try..except
  until Terminated;
end;                                     


Добавлено спустя 5 часов 52 минуты 52 секунды:
Поборол SIGSEGV. Сам был виноват.
теперь другая проблема, я там понял что эвенты об изменении, добавлении и т.д. данных в таблице сервером присылаются только после Commit.
Я начал отлавливать эти события.
Теперь в процедуре
Код: Выделить всё
procedure TMainForm.OnFBEvent(Sender: TObject; EventName: string;
  EventCount: longint; var CancelAlerts: boolean);

хотел рефрешить датасет , чтобы обновлять даные. Но не выходит
Что я только не пробовал. И закрывал и открывать SQLQuery , делал Active:= False, Active:= True, делал Refresh запроса, не помогает, данные не обновялются...
Они обновляются только если я отключаю и включаю сам IBConnection.
Но тогда пропадает TFBEvent. Ну не инициализировать же его каждый раз заново после каждого Commit на сервере, ЧЯДНТ?
Может не так настроен у меня DataModule. Подскажите пожалуйста.
bpg
новенький
 
Сообщения: 36
Зарегистрирован: 28.11.2017 21:23:18

Re: lazarus = Firebird - транзакции

Сообщение wofs » 14.04.2018 23:55:38

Имхо, у вас проблема с транзакциями и только с ними.
То есть вы стартуете "длинную" транзакцию чтения, меняете данные в другой и рефрешите свой датасет в старой транзакции, которая ничего не знает об измененных данных.
Приведите код как вы стартуете транзакции на чтение и запись и с какими параметрами.

p.s. Events прекрасно работают без всяких плясок. Правда использую ibx для доступа к Firebird.
Аватара пользователя
wofs
постоялец
 
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань

Re: lazarus = Firebird - транзакции

Сообщение bpg » 15.04.2018 09:07:55

Помогла эта тема viewtopic.php?f=5&t=10232&p=85344&hilit=Refresh#p85344
Ввел параметры
nowait
read_committed
rec_version
До этого в трасировке была CONCURRENCY
bpg
новенький
 
Сообщения: 36
Зарегистрирован: 28.11.2017 21:23:18

Re: lazarus = Firebird - транзакции

Сообщение olegy123 » 15.04.2018 09:23:02

bpg писал(а): вываливается External SIGSEGV.
проблемы работы с объектами/указателями/данными которых нет или они другие.. это в народе называется утечка памяти..
EventsM может не в чем не виноват.

проблему должен показать контроль кучи..
http://wiki.freepascal.org/heaptrc
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: lazarus = Firebird - транзакции

Сообщение bpg » 16.04.2018 13:32:17

POST_EVENT о событиях в таблицах из тригера приходит только после Commit. Как тогда узнать о событии Вставки, например?
И зачем тогда нужны Event от самой БД, о подключении , отключении, начале транзакций и т.д.? Ведь в них пропадает весь смысл? Если был Commit то и так ясно что подключение было. Или я не прав?
Мне бы хотелось в приложении выводить в статус события происходящие с БД.
bpg
новенький
 
Сообщения: 36
Зарегистрирован: 28.11.2017 21:23:18

Re: lazarus = Firebird - транзакции

Сообщение olegy123 » 16.04.2018 15:03:20

bpg писал(а):Как тогда узнать о событии Вставки, например?

Тогда ответь - когда данные являются актуальными для всех? До того как их внесли или после того как они станут доступны всем?

bpg писал(а):И зачем тогда нужны Event от самой БД
Смысл в том чтобы клиенту сообщить об изменении данных.. типа некий твит или телеграмм сообщения. Очень нужная вещь если клиентов много и/или данные тяжелые.

Вообще то только одними компонентами и самой БД легко реализовать чат. Сообщения записываются в таблицу, подается сигнал об обновлении записи в таблицу.. клиенты Refresh-ат локальные таблицы.

bpg писал(а):выводить в статус события происходящие с БД.
Events скорее низкоуровневое сообщение - как светофор на перекресте..
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: lazarus = Firebird - транзакции

Сообщение alexs » 16.04.2018 15:45:50

А зачем вообще обновлять пользователю таблицу с данными автоматом?
Дайте ему кнопку "Обновить". Ему нужно будет - нажмёт.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: lazarus = Firebird - транзакции

Сообщение bpg » 16.04.2018 16:34:54

В разных корпусах в разных кабинетах люди заносят личные дела, другим сотрудникам они нужны для обработки данных, занесения их в приказы и т.д.
Естественно, если нашли ошибку и данные изменили, нужно чтобы они СРОЧНО у всех обновились. Также если завели нового человека, то нужно чтобы у ответственного сотрудника тут же при формировании отчета добавлялся бы этот новый человек в отчет сразу.
bpg
новенький
 
Сообщения: 36
Зарегистрирован: 28.11.2017 21:23:18

Re: lazarus = Firebird - транзакции

Сообщение olegy123 » 16.04.2018 19:00:55

alexs писал(а):А зачем вообще обновлять пользователю таблицу с данными автоматом?
Есть же автоматы.. искусственный интеллект. m2m https://ru.wikipedia.org/wiki/%D0%9C%D0 ... 0%B8%D0%B5
в некоторых системах критично скорость обновления информации. Пример: Онлайн - торги, навигация, там где нужно анализировать большой объем информации, где стоимость обновления крайне высока, слабые сети.

Я своему другу в свое время предлагал заняться m2m (человек->машина,машина->человек,машина->машина). Но тот ссылался, что ему нужно семью кормить и продал свою программистскую душу 1С.
Через лет пять я узнал, что в Европе это направление признали очень перспективное - ну и заложили кучу денег на многие года.
Кстати, если разрабатываете пользовательский интерфейс то это уже человек->машина,машина->человек.

alexs писал(а):Дайте ему кнопку "Обновить". Ему нужно будет - нажмёт.
Сейчас компоненты приняты делаются "мультяшными" прикручивают движение, свечение, нажатие - с физическими параметрами. Это смотрится красиво и интересно..
Даже у знакомых всем делфовских платных компонент за тысячу евриков - появление информации идет с "пробуксовкой", с неким волшебством - а не сразу "плюх".
А Вы все по старому - у нас тут самообслуживание, на кнопу нажимаем сами..

Добавлено спустя 9 минут 4 секунды:
bpg писал(а):Естественно, если нашли ошибку и данные изменили, нужно чтобы они СРОЧНО у всех обновились. Также если завели нового человека, то нужно чтобы у ответственного сотрудника тут же при формировании отчета добавлялся бы этот новый человек в отчет сразу.
все правильно.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: lazarus = Firebird - транзакции

Сообщение Снег Север » 16.04.2018 20:28:03

bpg писал(а):Естественно, если нашли ошибку и данные изменили, нужно чтобы они СРОЧНО у всех обновились. Также если завели нового человека, то нужно чтобы у ответственного сотрудника тут же при формировании отчета добавлялся бы этот новый человек в отчет сразу.
Ну так таймер добавьте на Refresh, уже писали - всего делов-то! если данных больше дары десятков строк, то таблица юзеру, в любом случае, показывает только часть данных, любое пролистование уже сделает Refresh.
А с отчетами еще проще - запрос для отчета всегда будет давать актуальные данные с сервера, после транзакции на изменение/добавление.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: lazarus = Firebird - транзакции

Сообщение alexs » 16.04.2018 21:10:37

olegy123 писал(а):появление информации идет с "пробуксовкой", с неким волшебством - а не сразу "плюх".

Меня, блин, с потрохами сьедят, если в моих системах будет задержка открытиядокумента на 0.5 секунды. А за всякие блымканья на экране - вой стоит до небес.
Когда чел пялится в монитор с 8 и до 17 с часовым перерывом - ему эти красивости - только вред.
olegy123 писал(а):в некоторых системах критично скорость обновления информации. Пример: Онлайн - торги, навигация, там где нужно анализировать большой объем информации

Это не решается автообновлением. Если чел сидит и аналитичит - то ему важнее развёртки и удобные переходы между массивами. А статическая перерисовка одной и тоже инфы (всего лишь при изменении параметров) - не нужна. В литературе даже случай описан - когда вывод информации шёл таким потоком - что оператор растерялся и всё бросил, никак не реагировал. Была авария.

bpg писал(а): разных корпусах в разных кабинетах люди заносят личные дела, другим сотрудникам они нужны для обработки данных, занесения их в приказы и т.д.

Введённые данные доступны сразу и другим операторам - они то уже в БД. А вот нужны ли они перед глазами - это уже вопрос. Человек делает свои документы. И ему "чужая" информация в сей момент не нужна. Когда нужна будет - так ваша программ покажет её.
Мой любимый пример - операторы у меня непрерывно вносят документы. В день на оператора считается норма - 100 документов. Информации вносится очень много постоянно. Но в среднем у оператора в каждый момент времени либо открыта форма ввода текущего документа, либо открыт реестр документов с последним введённым данным оператором документом (открываю автоматом после сохранения документа).
А вот если надо - то есть и кнопка "Документы дня", и всевозможные фильтры на документы. И итоги всякие считаются.

bpg писал(а):Естественно, если нашли ошибку и данные изменили, нужно чтобы они СРОЧНО у всех обновились.

Главное чтобы они были исправлены в БД.
Вы же не печатаете все эти документы сразу после ввода?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: lazarus = Firebird - транзакции

Сообщение olegy123 » 16.04.2018 22:52:10

alexs писал(а):Меня, блин, с потрохами сьедят, если в моих системах будет задержка открытиядокумента на 0.5 секунды. А за всякие блымканья на экране - вой стоит до небес.

Мне нужно было работать с КЛАДР(это вроде 500мб). Клиент тонкий и должен работать на <1Мб/с.. Там локально не так шустро работало.
Вот приходилось прикручивать функционал на лимитах работать, фоновая подкачка данных.
Позиция в таблице оставалось текущей и в том месте экарана (общая позиция 6932 на экране 15) - при обновлении будет та же 15-ая, а не 1ая. Поэтому не нужно было от оператора требовать ручного управления.

alexs писал(а):Когда чел пялится в монитор с 8 и до 17 с часовым перерывом - ему эти красивости - только вред.
Вот вы не сидите с 8 до 17 на табурете? Скорее в кресле - так удобно.
Так вот не комфортность можно вызвать даже размером букв и цвета. А некоторые цвета могут даже вызвать эпилептический припадок. О гамма цвета вы не думаете - только потому что за вас уже подумала windows.

alexs писал(а):Это не решается автообновлением. Если чел сидит и аналитичит - то ему важнее развёртки и удобные переходы между массивами. А статическая перерисовка одной и тоже инфы (всего лишь при изменении параметров) - не нужна.
Тогда зачем делают компоненты на продажу с эффектом "музыкальности"?
Может с ними легче работать..

Добавлено спустя 8 минут 37 секунд:
alexs писал(а):В литературе даже случай описан - когда вывод информации шёл таким потоком - что оператор растерялся и всё бросил, никак не реагировал. Была авария.
А в играх как? Может там мозг в своей среде - работает в оптимальном режиме.. и обрабатывать в разы больше информации.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: lazarus = Firebird - транзакции

Сообщение alexs » 16.04.2018 23:09:38

olegy123 писал(а):Мне нужно было работать с КЛАДР(это вроде 500мб).

Этот пример уже вообще не в тему. Полный список тянуть на клиента (хоть тонкий, хоть толстый) - лишний геморой. Надо обрабывать запрос юзера и на основе его тащить данные.
olegy123 писал(а):Вот вы не сидите с 8 до 17 на табурете? Скорее в кресле - так удобно.

Многие операторы вообще стоят :-) Так удобнее. Я и не говорил про расскраску ничего. Я вообще противник попугйности. Есть системная тема - надо от неё плясать. Чтобы морда программы не была инородным пятном в системе на рабочем месте.
olegy123 писал(а):огда зачем делают компоненты на продажу с эффектом "музыкальности"?

Наверное чтобы продать? Вау эффект никто не отменял.
olegy123 писал(а):Может там мозг в своей среде - работает в оптимальном режиме.. и обрабатывать в разы больше информации.

Мы про обновление списка у юзера на экране? Или про что? :D
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: lazarus = Firebird - транзакции

Сообщение olegy123 » 17.04.2018 07:12:37

alexs писал(а):Надо обрабывать запрос юзера и на основе его тащить данные.
Так пришлось разбивать данные. Не тянуть весь список, лимитировать кол-во в запросе (около 100).. по первым символам изменять список в ComboBox. Если позиция зафиксирована - подгружать следующий список. Ошибки выделять цветом, можно конечно выплевывать модальное окно мол хрень написали, а можно цветом выделить где не нравится или не введены данные и спрятать(Enable:=false) кнопку "Сохранить".

По теме. Само POST_EVENT для человека никакой информации не несет. А вот для машины - да, машина сигнализирует через интерфейс человеку что состояние или данные изменились. А может ничего не сообщать.

alexs писал(а):Наверное чтобы продать? Вау эффект никто не отменял.
нет. Wow эффект это на неделю две.. потом к новому предмету привыкаете.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 29

Рейтинг@Mail.ru