Страница 1 из 1

MS SQL + Delphi

Добавлено: 14 авг 2012, 16:34
paparocii
Добрый день

Жизнь заставила, в процессе перехода с Pervasive на MS SQL, переношу все хозяйство написанное на Delphi.

Из delphi коннектюсь к MS SQL напрямую с использованием SDAC (для оракла использую ODAC, поэтому выбор пал на SDAC).

Собственно, вопросы:
1. Не получаются DML запросы: на Insert, Update ругается что-то типа:
Сообщение 17750, уровень 16, состояние 0, процедура na_getflagsfast, строка 1
Не удалось загрузить динамическую библиотеку namssql.dll или одну из библиотек, на которые она ссылается. Причина: 1114(Произошел сбой в программе инициализации библиотеки динамической компоновки (DLL).).
Сообщение 17750, уровень 16, состояние 0, процедура na_getmultipleinfo, строка 1
Не удалось загрузить динамическую библиотеку namssql.dll или одну из библиотек, на которые она ссылается. Причина: 1114(Произошел сбой в программе инициализации библиотеки динамической компоновки (DLL).).
Сообщение 50012, уровень 11, состояние 1, процедура T$KATORG_U, строка 65
Call master..na_getmultipleinfo in T$KATORG_U return an error (NAP: 1, RPC: 1792)
Сообщение 3609, уровень 16, состояние 1, строка 5
Транзакция завершилась в триггере. Выполнение пакета прервано.
Что с этой ошибкой делать - не знаю.

2. Похоже что из-за NAP сервера. Он то работает, то не работает. Очень не стабилен. "Изучаю литературу", пока не понятно из-за чего

3. Nrec при insert запросом в MS SQL будет генерироваться триггером (как в Oracle), или же нужно "вычислять" max(nrec)+1 как в Pervasive. Есть ли надежда что nrec генерируется триггером?

Re: MS SQL + Delphi

Добавлено: 14 авг 2012, 17:01
n0where
1. А почему не сделать стандартными средствами? без Напа? С другой стороны в MSSQL почемуто не даёт делать update нескольким записям, если одной - то все ок. Если нескольким - ошибка. Спасались через курсор
3. Не надейтесь

Re: MS SQL + Delphi

Добавлено: 14 авг 2012, 17:09
spark
paparocii писал(а):Добрый день

Жизнь заставила, в процессе перехода с Pervasive на MS SQL, переношу все хозяйство написанное на Delphi.

Из delphi коннектюсь к MS SQL напрямую с использованием SDAC (для оракла использую ODAC, поэтому выбор пал на SDAC).

Собственно, вопросы:
1. Не получаются DML запросы: на Insert, Update ругается что-то типа:
Сообщение 17750, уровень 16, состояние 0, процедура na_getflagsfast, строка 1
Не удалось загрузить динамическую библиотеку namssql.dll или одну из библиотек, на которые она ссылается. Причина: 1114(Произошел сбой в программе инициализации библиотеки динамической компоновки (DLL).).
Сообщение 17750, уровень 16, состояние 0, процедура na_getmultipleinfo, строка 1
Не удалось загрузить динамическую библиотеку namssql.dll или одну из библиотек, на которые она ссылается. Причина: 1114(Произошел сбой в программе инициализации библиотеки динамической компоновки (DLL).).
Сообщение 50012, уровень 11, состояние 1, процедура T$KATORG_U, строка 65
Call master..na_getmultipleinfo in T$KATORG_U return an error (NAP: 1, RPC: 1792)
Сообщение 3609, уровень 16, состояние 1, строка 5
Транзакция завершилась в триггере. Выполнение пакета прервано.
Что с этой ошибкой делать - не знаю.

2. Похоже что из-за NAP сервера. Он то работает, то не работает. Очень не стабилен. "Изучаю литературу", пока не понятно из-за чего

3. Nrec при insert запросом в MS SQL будет генерироваться триггером (как в Oracle), или же нужно "вычислять" max(nrec)+1 как в Pervasive. Есть ли надежда что nrec генерируется триггером?
3. Да, Nrec будет выдаваться триггером.

Чтобы делать апдейты групповые, нужно или триггер выключать, а потом включать, или курсором...

Re: MS SQL + Delphi

Добавлено: 14 авг 2012, 17:10
spark
n0where писал(а):1. А почему не сделать стандартными средствами? без Напа? С другой стороны в MSSQL почемуто не даёт делать update нескольким записям, если одной - то все ок. Если нескольким - ошибка. Спасались через курсор
3. Не надейтесь
1. Это так триггеры написаны. При их отключении все апдейтится хорошо.
3. Почему нет? Триггер же нреки выдает. Мы делаем вставку извне без вычисления нреков.

Re: MS SQL + Delphi

Добавлено: 16 авг 2012, 01:13
LaaLaa
Если не ошибаюсь то для групповой вставки записей лучше поиспользовать храимые вьюхи. Для каждой таблицы есть созданная в ms sql вьюха.

Re: MS SQL + Delphi

Добавлено: 04 июн 2014, 14:13
RAJAH
Похожие проблемы после переустановки napsrv. Галактика стала выдавать "внутреннюю ошибку интерфейса доступа к базе данных". В ms70drv.log сбрасывается множество сообщений типа:

Код: Выделить всё

04.06.2014 14:06:45 [RUSSIA81#USER]:
DECLARE @CurDT DATETIME, @AtlDate INT, @AtlTime INT
SELECT @CurDT=GETDATE()
SELECT @AtlDate=dbo.ToAtlDate(@CurDT), @AtlTime=dbo.ToAtlTime(@CurDT)
INSERT INTO CONTOUREVENTS(ATL_LASTUSER,ATL_OWNER,ATL_ORIGINOFFICE,ATL_LASTDATE,ATL_LASTTIME,ATL_NREC,TYPEEVENT,CCONTOUR,CMODULE,CUSER,COMMENTEVENT) VALUES( ?,?,?,@AtlDate,@AtlTime,?,?,?,?,?,?)
IF @@ERROR=0 AND @@ROWCOUNT>0 SELECT Sys#UL FROM CONTOUREVENTS WHERE ATL_NREC=?
04.06.2014 14:06:45 [RUSSIA81#USER]:
  42000: [Microsoft][ODBC SQL Server Driver][SQL Server]Call master..na_getmultipleinfo in CONTOUREVENTS_I return an error (NAP: 1000, RPC: 1024)
В Query Analyzer запрос также аналогичную ошибку показывает:

Код: Выделить всё

Call na_getallupdelinfo in X$JOURNALCONFIG_U return an error (NAP: 1000, RPC: 0)
chkmssql прогонял на триггеры и хранимки, исправил - не помогло. Что можно попробовать?

Re: MS SQL + Delphi

Добавлено: 04 июн 2014, 14:57
edward_K
в 99% смена nap-а порождает необходимость смены MS70DRV.dll
для начала убедитесь что MS70DRV.dll от той же даты или новее и nap соответствует версии Галактики.

Re: MS SQL + Delphi

Добавлено: 04 июн 2014, 15:11
RAJAH
ms70drv.dll новее - 5.5.18.1 против 5.5.18 у napsrv.
Вопрос снят: кардинальное решение - удаление базы и восстановление.