Проблемы с FreeUDFLib на Windows XP
Добавлено: 16 июн 2010, 07:44
Доброе время суток!
Стоял Interbase 5.6 с подключенным FreeUDFLib.dll, дельфевая задача. ОС была какая-то Windows XP (предположительно до SP2).
В один прекрасный день винда накрылась. Поставили Windows XP SP2 (может SP3), все восстановили назад и теперь вот какая проблема - при выполнении запроса, который использует функции f_Mid и f_lrtrim из библиотеки FreeUDFLib периодически вываливаются ошибки. Причем тенденция такая - перегружаем комп, выполняем запрос - нормально. Еще пару раз выполняем - все, ошибка. и до перегрузки не исправляется. Тот же запрос, но выполненный через IBExpert работает стабильнее, т.е. ошибка вываливается гораздо позднее, чем из дельфевой задачи.
Текст ошибки:
General SQL Error.
A fatal exception occurred during the execution of a user defined function.
A fatal exception occurred during the execution of a user defined function.
A fatal exception occurred during the execution of a user defined function.
Access violation. The code attempted to access a virtual address without privilege to do so.
Текст запроса:
SELECT ID,ACTUALDATE,IDCL,CLNAME,NEXTDATE
FROM PL_ALLCLIENTS
ORDER BY CLTYPE ASC , CLNAME
где
CREATE VIEW PL_ALLCLIENTS(
ID,
ACTUALDATE,
IDCL,
CLTYPE,
CLTYPENAME,
CLCODE,
CLNAME,
CLSHNAME,
.....
NEXTDATE)
AS
select
c.id,c.actualdate,c.idcl,c.cltype,ct.name,
cast(F_Mid(F_LRTrim(c.okpo)||F_LRTrim(F_LRTrim(c.mandser)||" "||F_LRTrim(c.mandnum)),0,249) as char(250)),
cast(F_Mid(F_LRTrim(c.fullname)||F_LRTrim(F_LRTrim(c.manlname)||" "||F_LRTrim(c.manfname)||" "||F_LRTrim(c.manmname)),0,249) as char(250)),
cast(F_Mid(F_LRTrim(c.shortname)||F_LRTrim(F_LRTrim(c.manlname)||" "||F_LRTrim(c.manfname)||" "||F_LRTrim(c.manmname)),0,249) as char(250)),
c.rnn, ...,c.nextdate
from pl_clients c
left join pl_cltypes ct on ct.id=c.cltype
left join pl_countries cn on cn.id=c.country
left join pl_regions r on r.id=c.region
left join pl_districts d on d.id=c.district
left join pl_compscats cs on cs.id=c.category
left join pl_currencies cr on cr.id=c.currency
left join pl_docstypes dt on dt.id=c.mandtype
;
опытным путем установлено, что ошибка начинается, когда добавляем clname (выделено жирным, вычисляемое поле с использованием функций F_Mid, F_LRTrim) в условия сортировки.
Вопрос - почему вываливается ошибка и что надо исправить? На предыдущей винде (да и на пре-предыдущей Windows 2000 Server) все работало как часы. Пока винду не перебивали - брал бэкап этой базы, разворачивал у себя на WinXPSP2 - такая же проблема, но тогда не сильно беспокоило, т.к. рабочая база была в строю. Сейчас путей назад уже нет:) Помогите пожста, кто чем может?
Стоял Interbase 5.6 с подключенным FreeUDFLib.dll, дельфевая задача. ОС была какая-то Windows XP (предположительно до SP2).
В один прекрасный день винда накрылась. Поставили Windows XP SP2 (может SP3), все восстановили назад и теперь вот какая проблема - при выполнении запроса, который использует функции f_Mid и f_lrtrim из библиотеки FreeUDFLib периодически вываливаются ошибки. Причем тенденция такая - перегружаем комп, выполняем запрос - нормально. Еще пару раз выполняем - все, ошибка. и до перегрузки не исправляется. Тот же запрос, но выполненный через IBExpert работает стабильнее, т.е. ошибка вываливается гораздо позднее, чем из дельфевой задачи.
Текст ошибки:
General SQL Error.
A fatal exception occurred during the execution of a user defined function.
A fatal exception occurred during the execution of a user defined function.
A fatal exception occurred during the execution of a user defined function.
Access violation. The code attempted to access a virtual address without privilege to do so.
Текст запроса:
SELECT ID,ACTUALDATE,IDCL,CLNAME,NEXTDATE
FROM PL_ALLCLIENTS
ORDER BY CLTYPE ASC , CLNAME
где
CREATE VIEW PL_ALLCLIENTS(
ID,
ACTUALDATE,
IDCL,
CLTYPE,
CLTYPENAME,
CLCODE,
CLNAME,
CLSHNAME,
.....
NEXTDATE)
AS
select
c.id,c.actualdate,c.idcl,c.cltype,ct.name,
cast(F_Mid(F_LRTrim(c.okpo)||F_LRTrim(F_LRTrim(c.mandser)||" "||F_LRTrim(c.mandnum)),0,249) as char(250)),
cast(F_Mid(F_LRTrim(c.fullname)||F_LRTrim(F_LRTrim(c.manlname)||" "||F_LRTrim(c.manfname)||" "||F_LRTrim(c.manmname)),0,249) as char(250)),
cast(F_Mid(F_LRTrim(c.shortname)||F_LRTrim(F_LRTrim(c.manlname)||" "||F_LRTrim(c.manfname)||" "||F_LRTrim(c.manmname)),0,249) as char(250)),
c.rnn, ...,c.nextdate
from pl_clients c
left join pl_cltypes ct on ct.id=c.cltype
left join pl_countries cn on cn.id=c.country
left join pl_regions r on r.id=c.region
left join pl_districts d on d.id=c.district
left join pl_compscats cs on cs.id=c.category
left join pl_currencies cr on cr.id=c.currency
left join pl_docstypes dt on dt.id=c.mandtype
;
опытным путем установлено, что ошибка начинается, когда добавляем clname (выделено жирным, вычисляемое поле с использованием функций F_Mid, F_LRTrim) в условия сортировки.
Вопрос - почему вываливается ошибка и что надо исправить? На предыдущей винде (да и на пре-предыдущей Windows 2000 Server) все работало как часы. Пока винду не перебивали - брал бэкап этой базы, разворачивал у себя на WinXPSP2 - такая же проблема, но тогда не сильно беспокоило, т.к. рабочая база была в строю. Сейчас путей назад уже нет:) Помогите пожста, кто чем может?
