Форум: "Базы";
Текущий архив: 2009.02.01;
Скачать: [xml.tar.bz2];
ВнизADO (странное поведение) Найти похожие ветки
← →
PSV (2008-06-19 15:44) [0]Здравствуйте. Вопрс в следующем: на MSSQL есть процедура, которую выполняю посредством компонентов ADO (Delphi5). На выполнение требуется максимум 6 сек. Процедура возвращает набор данных. На этапе разработки (Active:=True) отрабатывает нормально. При запуске программы выдает ошибку commandtext does not return result set. Использовал по очереди компоненты TADOQuery, TADOStoredProc,TADoDataSet. Результат-та же ошибка. Запрос перехваченный трассировщиком и запущенный на MSSQL возвращает данные. Урезал процедуру до минимума - выдает не те данные но быстро - около 1 сек. В этом случае все работает - но результаты не те. Впечатление будто если процедура не вложилась в секунду то все. Подскажите как быть.
← →
MsGuns © (2008-06-19 16:06) [1]Код запуска в делфи и текст хранимки сюда
← →
stas © (2008-06-19 16:06) [2]1. Как вызываете процедуру
2. Покажите текст процедуры
← →
PSV (2008-06-19 16:27) [3]1.Процедура возвращает данные о всех работников предприятия
Состоит из запроса в несколько таблиц и изменения последней даты перемещения на первую дату перемещения на данную профессию.
ALTER PROCEDURE ot_ARM(@FD datetime)
AS
Select
r.TabN
,Famil+" "+Imya+" "+Otchectv as F
,Mug_Gen
,convert(varchar(10),convert(datetime,Dat_rogd),104) as DR--"Дата рожд."
,f.Name+" "+isnull(r.Razr,"") as PR--"Профессия"
,d.Name as PD--"Подразделение"
,Tel --as "Телефон"
,p.Iden_kod --as "Иден.код"
isnull(ltrim(Obl+" "),"")+isnull(ltrim(Gorod+" "),"")+isnull(ltrim(Reg+" "),"")+
isnull(ltrim(Der+" "),"")+isnull(ltrim(Ul+" "),"")+
isnull(Dom+" ","")+isnull(ltrim(Korp+" "),"")+isnull(Kv,"") as ADR--"Адрес"
,convert(varchar(10),convert(datetime,ar.DFPer),104) DS--"Дата поступл."
,convert(varchar(10),convert(datetime,r.DFPer),104) DD--as "Дата перемещ."
,r.KodProf,r.Razr,r.DFPer as DP
into #TMP
from
PersPeremNew ar
,Personal p
,PersData t
,PersPeremNew r
,Sperem rn
,SpodrN d
,SprofN f
where
ar.VidDog not in(3,5,7,8,6)
and ar.DFPer in(select Max(DFPer) from PersPeremNew where Iden_kod=p.Iden_kod and VidPer=1 and DFPer<=@FD) and ar.VidPer=1
and t.InsDate in(select Max(InsDate) from PersData where Iden_kod=p.Iden_kod and InsDate<=@FD)
and r.VidPer=rn.Id
and rn.PrCnst>=1
and r.DFPer in(select Max(DFPer) from PersPeremNew,Sperem where Iden_kod=p.Iden_kod and Id=VidPer and VidPer<>2 and PrCnst>=1 and DFPer<=@FD) and r.VidPer<>2
and d.KeyPodr=r.KodPodr
and f.KeyProf=r.KodProf
and ar.Iden_kod=p.Iden_kod
and ar.Iden_kod=t.Iden_kod
and ar.Iden_kod=r.Iden_kod
and
p.Iden_kod not in(select Iden_kod from PersPeremNew uv1 where VidPer=2 and DNDog=ar.DFPer and DFPer<=@FD)
order by Famil,FIO
while exists(
select t.Iden_kod from #tTMP t,
(select t.Iden_kod,max(DFPer)as DFP,DP
from PersPeremNew n,#tTMP t,Sperem where t.Iden_kod=n.Iden_kod and VidPer=Id and PrCnst=1
and DFPer<DP group by t.Iden_kod,DP)n,PersPeremNew m,Sperem
where t.Iden_kod=m.Iden_kod and t.Iden_kod=n.Iden_kod and m.VidPer=Id and PrCnst=1
and DFP=m.DFPer and m.KodProf=t.KodProf and isnull(m.Razr,"")=isnull(t.Razr,"")
)
update t set t.DP=DFP from #tTMP t,
(select t.Iden_kod,max(DFPer)as DFP,DP
from PersPeremNew n,#tTMP t,Sperem where t.Iden_kod=n.Iden_kod and VidPer=Id and PrCnst=1
and DFPer<DP group by t.Iden_kod,DP)n,PersPeremNew m,Sperem
where t.Iden_kod=m.Iden_kod and t.Iden_kod=n.Iden_kod and m.VidPer=Id and PrCnst=1
and DFP=m.DFPer and m.KodProf=t.KodProf and isnull(m.Razr,"")=isnull(t.Razr,"")
select TabN as "Таб.№",F as "ФИО",Mug_Gen as "Пол",DR as "Дата рожд.",PR as "Профессия",
PD as "Подразделение",Tel as "Телефон",Iden_kod as "Иден.код",ADR as "Адрес",
DS as "Дата поступл.",convert(varchar(10),convert(datetime,DP),104) as "Дата перемещ." from #tTMP
order by F
GO
2. ADOQuery.SQL ot_ARM :Dt
← →
Ega23 © (2008-06-19 16:31) [4]и сколько этот ужос из QA выполняется?
← →
stas © (2008-06-19 16:33) [5]Это MSSQL 2005 ?
какая версия MDAC? попробуйте подключится через Native Client
← →
Ega23 © (2008-06-19 16:55) [6]
> Это MSSQL 2005 ?
На каком основании Вы так думаете и какое это имеет значение?
← →
PSV (2008-06-19 17:06) [7]MSSQL 2000 MDAC 2.8 SP1
← →
Ega23 © (2008-06-19 17:13) [8]
> MSSQL 2000 MDAC 2.8 SP1
>
Сколько секунд идёт выполнение из Query Analyzer?
← →
PSV (2008-06-19 17:23) [9]6 сек.
← →
Ega23 © (2008-06-19 17:26) [10]Чему равно значение TADOConnection.CommandTimeout на клиенте?
← →
PSV (2008-06-19 17:27) [11]30 (по умолчанию)
← →
Ega23 © (2008-06-19 17:30) [12]
ALTER PROCEDURE ot_ARM(@FD datetime = 0)
Если так, то что?
← →
PSV (2008-06-19 17:42) [13]в Query Analyzer через 1 сек. пустой результат ;с программы - та же ошибка ; из среды разработки как в Query Analyzer
← →
PSV (2008-06-19 18:02) [14]Дело даже не во времени выполнения процедуры. После того, как я убрал создание временной таблицы и цикл, но удлинил время выполнения процедуры путем выполнения "левых" запросов до 9 сек. она отрабатывает с программы.
← →
ЮЮ © (2008-06-20 04:41) [15]> ADO (Delphi5)
Древнее Delphi не нашел? Update для ADO установлен?
SET NOCOUNT ON поставь в процедуре.
← →
stud © (2008-06-20 10:53) [16]а чему равно значение параметра- даты, при перехвате запроса через профайлер?
← →
Ega23 © (2008-06-20 10:54) [17]
> SET NOCOUNT ON поставь в процедуре.
Кстати да, у тебя же там Update есть...
← →
PSV (2008-06-20 12:49) [18]строка, отображаемая в профайлере:
exec sp_executesql N"exec ot_ARM @P1
", N"@P1 datetime", "Jun 20 2008 12:00:00:000AM"
строка SET NOCOUNT ON , добавленная в процедуру - помогла.
всем откликнувшимся большое спасибо!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2009.02.01;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.005 c