Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.019 c
11-1197050289
Jon
2007-12-07 20:58
2009.02.01
TrayIcon PopupEx


1-1207547683
scat
2008-04-07 09:54
2009.02.01
Создание формы по имени класса формы


15-1228831528
Вова
2008-12-09 17:05
2009.02.01
запрос


6-1197982424
user51
2007-12-18 15:53
2009.02.01
подключение к ADSL модему, нужно правильное отображение


2-1229713016
Nostalgia
2008-12-19 21:56
2009.02.01
однонаправленные списки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский