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

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

Проблемы с ClientDataSet [D3, MSSQL]


kolj ©   (2009-12-03 00:59:00) 

Всем привет!
Обнаружыл странную вещь, к Гриду через DataSource подключен Dataset. Select возвращает 1000 записей и работает приблизительно 3 секунды, но грид их выводит на екран через минуту при етом пока идет етот процес загрузка процесора 100 процентов. Грид DevExpress.
Есть у когото идеи, что ето мжет быть и в чем проблема?
Спасибо!


kolj   (2009-12-03 14:03:00) [1]

SELECT
 emp.EmployeeID,
 emp.UserName,
 cep.Name as Position,
 ocep.Name as OfficialPosition,
 emp.LastNameUkr,
 emp.LastName,
 emp.LastNameEng,
 emp.Surname,
 emp.Address,
 emp.Phones,
 (select top 1 ll.LevelName from vwEmployeeLanguages el with (nolock)
    join vwLanguages l with (nolock) on l.LanguageID = el.LanguageID
    join vwLanguageLevel ll with (nolock) on ll.LanguageLevelID = el.LanguageLevelID
  where  el.EmployeeID = emp.EmployeeID and l.Name = 'English') as EnglishLevel,
 emp.Note,
 emp.Status,
 emp.ULC,
 emp.DLC,
 emp.TS,
 sbus.SBU_Name,
 sbus.SBUID,
 emp.DOB,
 emp.EducationFrom,
 emp.PreviousPlaceOfWork,
 emp.AccessibilityFields,
 emp.OrgID,
 emp.OrgCode,
 emp.DateOfEmployment,
 emp.RetiringDate,
 emp.StartOfProfCareer,
 emp.SpecializationsID,
 es.SpecializationsName,
 emp.UserCompName,
 emp.UserCompNumber,
 os.OrgPath,
 sbus.SBUDirectorID,    
 emp1.LastName as SBUDirectorName,
 emp.AssignedSBU,
 sbus1.SBU_Name As AssignedSBU_Name,
 emp.AbsentTill,
 emp.MessengerID,
 (dbo.FieldsList(4, emp.EmployeeID)) As WorkPlace,
 (dbo.FieldsList(1, emp.EmployeeID)) As Room,
 (dbo.FieldsList(2, emp.EmployeeID)) As OfficeLocation,
 (dbo.FieldsList(3, emp.EmployeeID)) As WorkPhone,
 emp.EndOfTrialPeriod,
 emp.Abiliton_ID,
 ab.AbilitonName,
 emp.DiscountCardNumber
FROM vwEMPLOYEES emp with (nolock)
    left join vwEmployeeSBU with (nolock) on emp.EmployeeID = vwEmployeeSBU.EmployeeID
    left join vwSBUs sbus with (nolock) on sbus.SBUID = vwEmployeeSBU.SBUID
    left join vwEmployees emp1 with (nolock) on emp1.EmployeeID = sbus.SBUDirectorID      
    left join vwEmployeeSpecializations es with (nolock) on es.SpecializationsID = emp.SpecializationsID
    left join vwOrgStructure os with (nolock) on emp.OrgID = os.OrgID
    left join vwSBUs sbus1 with (nolock) on sbus1.SBUID = emp.AssignedSBU
    left join vwCurrentEmployeePosition cep with (nolock) on emp.EmployeeID = cep.EmployeeID
    left join vwCurrentOffEmployeePosition ocep with (nolock) on emp.EmployeeID = ocep.EmployeeID
    left join vwAbiliton ab on ab.Abiliton_ID = emp.Abiliton_ID
ORDER BY emp.LastName


Anatoly Podgoretsky   (2009-12-03 13:33:00) [2]

> kolj  (03.12.2009 12:02:05)  [5]

Ну ты определил только время выполнения скрипта, а не время выдачи.


Сергей М.   (2009-12-03 13:10:00) [3]


> Misrosoft Profiler и просто смотрел сколько скрипт выполняетса
> через Menagment Studio


А как выглядит скрипт ?


sniknik   (2009-12-03 12:41:00) [4]

> Программа написана на Delphi 3
проверь скомпили на D7, может не так уж и много изменений понадобится


sniknik   (2009-12-03 12:40:00) [5]

> на обработчик OnFilterRecord следующий код:
отключай на время открытия, включай после.
+ DisableControl датасету на это время (а можно только это, только + сделать по нему выключатель в фильтре)


kolj   (2009-12-03 12:02:00) [6]

Программа написана на Delphi 3. Работа над ней началась в 1997 году. Используетса ClientDataSet, на обработчик OnFilterRecord следующий код:

procedure FilterRecord(DataSet: TDataSet;
 var Accept: Boolean);
begin
 if DataSet <> nil then
 with DataSet do
 case DATA_MODE of
   dmActive: Accept := FieldByName('STATUS').Value = 'W';
   dmInactive: Accept := FieldByName('STATUS').Value = 'N';
   dmAll: Accept := true;
 end;
end;

>> Select возвращает 1000 записей и работает приблизительно
>> 3 секунды

>Подробнее - как ты это определил ?

Misrosoft Profiler и просто смотрел сколько скрипт выполняетса через Menagment Studio


Виталий Панасенко   (2009-12-03 10:39:00) [7]

небось группировка какая-то используется?


sniknik   (2009-12-03 09:26:00) [8]

> Select возвращает 1000 записей и работает приблизительно 3 секунды
непорядок... 1000 записей так долго возвращать, должны быть цифры порядка 0,03 - 0,3 сек, а у тебя в 10 раз больше...

> что ето мжет быть и в чем проблема?
ну, очевидно же - "Грид DevExpress."... сложно проверить со стандартным и убедиться?
и второе по списку но не по значению - код. все ошибки, неважно какие, даже логические традиционно гнездятся в 17й строке. проверь.
и +, D3 это религия такая использовать настолько устаревшее?  или драйвер пишешь, тогда ClientDataSet там очевидно не к месту (имхо конечно, мало ли чего бывает) .


Сергей М.   (2009-12-03 09:18:00) [9]


> Select возвращает 1000 записей и работает приблизительно
> 3 секунды


Подробнее - как ты это определил ?


Sergey13   (2009-12-03 08:40:00) [10]

> [0] kolj   (03.12.09 00:59)
> подключен Dataset

Клиентский? Или какой другой? Чем обусловлено использование CDS-а? Есть ли какая то обработка в датасете типа в afterOpen или в AfterScroll?


Наверх

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