Access Violation, некорректное выполнение запросов или вызовов API, ошибки утилит командной строки, в общем все, что вам мешает работать
Модераторы: kdv, dimitr
-
VitalikIsVitalik
- Сообщения: 80
- Зарегистрирован: 15 ноя 2009, 11:54
Сообщение
VitalikIsVitalik » 23 ноя 2009, 16:01
Иногда падает процедура, с сообщением: Unsucessful execution caused system error that does not preclude successful execution of subsequent statments. At procedure Test Line:37, col:4. Данные в таблицах одни и те же. Если надо пришлю скрипт создания тестовой БД.
Код: Выделить всё
CREATE OR ALTER PROCEDURE TEST (
param NUMERIC(10,0))
RETURNS (
o_result INTEGER)
AS
DECLARE VARIABLE max_obl INTEGER = 0;
DECLARE VARIABLE q_user INTEGER = 0;
DECLARE VARIABLE is_need_blob INTEGER;
DECLARE VARIABLE offc_new INTEGER;
DECLARE VARIABLE group_id INTEGER;
BEGIN
SELECT UserNew
FROM Users
WHERE ID = :param
INTO :q_user;
SELECT COALESCE(MAX(Obl), 0)
FROM TypesBlob AS ts
WHERE ts.MemberType = :q_user
AND ((ts.Offc <> 0 AND ts.MemberID = 0)
OR(ts.Offc = 0 AND EXISTS(SELECT 1
FROM Members AS g
WHERE g.GroupID = ts.MemberID)))
INTO :max_obl;
IF (max_obl = 0) THEN
BEGIN
o_result = 0;
SUSPEND;
EXIT;
END
is_need_blob = 0;
FOR SELECT t.Offc, t.MemberID
FROM TypesBlob AS t
WHERE t.MemberType = :q_user
AND (t.Offc <> 0 OR(EXISTS(SELECT g.Member
FROM Members AS g
WHERE g.GroupID = t.MemberID)))
ORDER BY Offc ASC
INTO :offc_new, :group_id
DO
BEGIN
IF (NOT EXISTS(SELECT s.Offc
FROM ListBlobs AS s
WHERE s.id = :param
AND((s.Offc = :offc_new)
OR(s.Offc = ANY(SELECT g.Member
FROM Members AS g
WHERE g.GroupID = :group_id))))) THEN - РУГАЕТСЯ ВОТ НА ЭТО
BEGIN
is_need_blob = 1;
END
END
IF (is_need_blob = 0) THEN
BEGIN
o_result = 1;
SUSPEND;
EXIT;
END
ELSE
BEGIN
o_result = -178;
SUSPEND;
EXIT;
END
END^
-
hvlad
- Разработчик Firebird
- Сообщения: 1244
- Зарегистрирован: 21 мар 2005, 10:48
Сообщение
hvlad » 23 ноя 2009, 20:03
Что в firebird.log ?
-
hvlad
- Разработчик Firebird
- Сообщения: 1244
- Зарегистрирован: 21 мар 2005, 10:48
Сообщение
hvlad » 24 ноя 2009, 14:14
Воспроизводимый пример можешь сделать ?
-
VitalikIsVitalik
- Сообщения: 80
- Зарегистрирован: 15 ноя 2009, 11:54
Сообщение
VitalikIsVitalik » 24 ноя 2009, 14:29
Vitalik (Server) Tue Nov 24 13:20:11 2009
Shutting down the server with 2 active connection(s) to 1 database(s), 0 active service(s)
Vitalik (Server) Tue Nov 24 13:20:17 2009
SERVER/process_packet: broken port, server exiting
Vitalik (Server) Tue Nov 24 13:21:26 2009
Database: TESTBASE
deadlock
internal Firebird consistency check (error during savepoint backout (290), file: exe.cpp line: 4126)
-
VitalikIsVitalik
- Сообщения: 80
- Зарегистрирован: 15 ноя 2009, 11:54
Сообщение
VitalikIsVitalik » 24 ноя 2009, 14:53
Могу скинуть скрипты создания базы и хп.
Есть ньюанс, в реальном приложении создаётся много коннектов в БД из разных потоков.
-
hvlad
- Разработчик Firebird
- Сообщения: 1244
- Зарегистрирован: 21 мар 2005, 10:48
Сообщение
hvlad » 24 ноя 2009, 15:28
Ты понимаешь, что такое воспроизводимый пример ?
Можешь его создать ?
Мне всё равно какие там скрипты и приложения.
Мне нужны файлы и инструкция - как с их помощью воспроизвести ситуацию.
-
VitalikIsVitalik
- Сообщения: 80
- Зарегистрирован: 15 ноя 2009, 11:54
Сообщение
VitalikIsVitalik » 24 ноя 2009, 17:14
Я заметил что это проблема возникает когда я создам соединение и ничего не делаю.
В старых версиях были CONNECTION TIMEOUT, DUMMY PACKET INTERVAL но в firebird.conf не нашёл таких параметров.
Как быть в 2.5?
-
hvlad
- Разработчик Firebird
- Сообщения: 1244
- Зарегистрирован: 21 мар 2005, 10:48
Сообщение
hvlad » 24 ноя 2009, 18:17
Или мы говорим на одном языке об одном и том же и не скачем с темы на тему, или я в этом не участвую...
-
VitalikIsVitalik
- Сообщения: 80
- Зарегистрирован: 15 ноя 2009, 11:54
Сообщение
VitalikIsVitalik » 01 дек 2009, 17:36
Тестовое приложение пока выслать не могу.
У Вас не было проблем с ADO-ным пулом коннектов? Точно ситуацию воспроизвести не могу, но проблемы начинаются именно тогда, когда, спустя примерно 1 м. 20.сек начинают отваливаться неактивные коннкты, процедуры валяться на пустом месте.
-
VitalikIsVitalik
- Сообщения: 80
- Зарегистрирован: 15 ноя 2009, 11:54
Сообщение
VitalikIsVitalik » 03 дек 2009, 10:26
Во всех процедурах указывалась именно 37-я строка.
Unsucessful execution caused system error that does not preclude successful execution of subsequent statments. At procedure Test Line:37, col:4
Более точная последовательность действий:
1. Запускаю приложение.
2. Создаётся несколько коннектов(3,4), далее все удаляются(pConnection->Close(); pConnection.Release()), кроме первого. После удаления они "висят" как неактивные(смотрю FBScanner-ом), спустя 1м. 20сек. убиваются, остаётся один первый.
3. Создаю коннект(в приложении), выполняю процедуру, вываливается сообщение об ошибке: "Unsucessful execution caused system error that does not preclude successful execution of subsequent statments. At procedure Test Line:37, col:4".
ADO, IBProviderFree3.
В строке подключения OLE DB Services=-1.
-
hvlad
- Разработчик Firebird
- Сообщения: 1244
- Зарегистрирован: 21 мар 2005, 10:48
Сообщение
hvlad » 03 дек 2009, 10:47
У тебя клиент и firebird.msg правильные ? Друг-другу и серверу соответствуют ?
-
VitalikIsVitalik
- Сообщения: 80
- Зарегистрирован: 15 ноя 2009, 11:54
Сообщение
VitalikIsVitalik » 03 дек 2009, 12:32
Да, всё из Firebird-2.5.0.25784-0_Win32.zip.
Что отвечает за путь к firebird.msg, в реестре ничего не нашёл?
-
hvlad
- Разработчик Firebird
- Сообщения: 1244
- Зарегистрирован: 21 мар 2005, 10:48
Сообщение
hvlad » 03 дек 2009, 15:01
Сдаётся мне, провайдер или прикладной код не весь текст ошибки показывает.
-
VitalikIsVitalik
- Сообщения: 80
- Зарегистрирован: 15 ноя 2009, 11:54
Сообщение
VitalikIsVitalik » 03 дек 2009, 15:10
В момент вылета процедуры на клиенте :Источник=IBProvider.3.Free Описание=Ошибка выборки данных результирующего множества At procedure 'TEST1' line: 37, col: 4.At procedure 'TEST2' line: 162
col: 1 , ловлю комовское исключение.
После захожу в IBExpert и пытаюсь выполнить эту же процедуру с теми же параметрами:Unsucessful execution caused system error that does not preclude successful execution of subsequent statments. At procedure Test2 Line:37, col:4.
На клиенте вылазит когда делаю: recordSet->MoveFirst(), raw_Execute отрабатывает нормально.
-
hvlad
- Разработчик Firebird
- Сообщения: 1244
- Зарегистрирован: 21 мар 2005, 10:48
Сообщение
hvlad » 03 дек 2009, 15:48
VitalikIsVitalik писал(а):В момент вылета процедуры на клиенте :Источник=IBProvider.3.Free Описание=Ошибка выборки данных результирующего множества At procedure 'TEST1' line: 37, col: 4.At procedure 'TEST2' line: 162
col: 1 , ловлю комовское исключение.
После захожу в IBExpert и пытаюсь выполнить эту же процедуру с теми же параметрами:Unsucessful execution caused system error that does not preclude successful execution of subsequent statments. At procedure Test2 Line:37, col:4.
То у тебя "'TEST1' line: 37, col: 4", то "Test2 Line:37, col:4" - ты уж определись.
VitalikIsVitalik писал(а):На клиенте вылазит когда делаю: recordSet->MoveFirst(), raw_Execute отрабатывает нормально.
Я понятия не имею, что делают эти методы.
Без примера ничем помочь не могу
-
VitalikIsVitalik
- Сообщения: 80
- Зарегистрирован: 15 ноя 2009, 11:54
Сообщение
VitalikIsVitalik » 04 дек 2009, 15:19
Фаербёрду всё равно, если к нему, из одного процесса в разных потоках создаётся много коннектов?
Нужны ли исходники примера?
Если что, куда его высылать?
Последний раз редактировалось
VitalikIsVitalik 04 дек 2009, 15:53, всего редактировалось 2 раза.