Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ADO (странное поведение) [D5, MSSQL]


PSV ©   (2008-06-19 15:44:00) 

Здравствуйте. Вопрс в следующем: на MSSQL есть процедура, которую выполняю посредством компонентов ADO (Delphi5). На выполнение требуется максимум 6 сек. Процедура возвращает набор данных. На этапе разработки (Active:=True) отрабатывает нормально. При запуске программы выдает ошибку commandtext does not return result set. Использовал по очереди компоненты TADOQuery, TADOStoredProc,TADoDataSet. Результат-та же ошибка. Запрос перехваченный трассировщиком и запущенный на MSSQL возвращает данные. Урезал процедуру до минимума - выдает не те данные но быстро - около 1 сек. В этом случае все работает - но результаты не те. Впечатление будто если процедура не вложилась в секунду то все. Подскажите как быть.


PSV   (2008-06-20 12:49:00) [1]

строка, отображаемая в профайлере:
exec sp_executesql N'exec ot_ARM @P1
', N'@P1 datetime', 'Jun 20 2008 12:00:00:000AM'

строка SET NOCOUNT ON , добавленная в процедуру - помогла.

всем откликнувшимся большое спасибо!


Ega23   (2008-06-20 10:54:00) [2]


> SET NOCOUNT ON поставь в процедуре.


Кстати да, у тебя же там Update есть...


stud   (2008-06-20 10:53:00) [3]

а чему равно значение параметра-  даты, при перехвате запроса через профайлер?


ЮЮ   (2008-06-20 04:41:00) [4]

> ADO (Delphi5)

Древнее Delphi не нашел? Update для ADO установлен?

SET NOCOUNT ON поставь в процедуре.


PSV   (2008-06-19 18:02:00) [5]

Дело даже не во времени выполнения процедуры. После того, как я убрал создание временной таблицы и цикл, но удлинил время выполнения процедуры путем выполнения 'левых' запросов до 9 сек. она отрабатывает с программы.


PSV   (2008-06-19 17:42:00) [6]

в Query Analyzer через 1 сек. пустой результат ;с программы - та же ошибка ; из среды разработки как в Query Analyzer


Ega23   (2008-06-19 17:30:00) [7]

ALTER   PROCEDURE ot_ARM(@FD datetime = 0)

Если так, то что?


PSV   (2008-06-19 17:27:00) [8]

30 (по умолчанию)


Ega23   (2008-06-19 17:26:00) [9]

Чему равно значение TADOConnection.CommandTimeout на клиенте?


PSV   (2008-06-19 17:23:00) [10]

6 сек.


Ega23   (2008-06-19 17:13:00) [11]


> MSSQL 2000 MDAC 2.8 SP1
>

Сколько секунд идёт выполнение из Query Analyzer?


PSV   (2008-06-19 17:06:00) [12]

MSSQL 2000 MDAC 2.8 SP1


Ega23   (2008-06-19 16:55:00) [13]


> Это MSSQL 2005 ?


На каком основании Вы так думаете и какое это имеет значение?


stas   (2008-06-19 16:33:00) [14]

Это MSSQL 2005 ?
какая версия MDAC? попробуйте подключится через Native Client


Ega23   (2008-06-19 16:31:00) [15]

и сколько этот ужос из QA выполняется?


PSV   (2008-06-19 16:27:00) [16]

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


MsGuns   (2008-06-19 16:06:00) [17]

Код запуска в делфи и текст хранимки сюда


stas   (2008-06-19 16:06:00) [18]

1. Как вызываете процедуру
2. Покажите текст процедуры


Наверх

Титульная страница Поиск, карта сайта Написать письмо