Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Не запускается SQL скрипт из Delphi


Автор: Spirit_FTZI2 12.4.2008, 20:43
Доброго времени суток!

Есть моя программулина, которая выводит инфу с БД в DBGrid. SQL server 2005 express + ADO компоненты + Delphi.

Есть запрос:
Код

SET DATEFORMAT DMY

DECLARE @StartDate     [DATETIME]
DECLARE @EndDate       [DATETIME]
DECLARE @DateTmp       [DATETIME]
DECLARE @EndTime       [NVARCHAR](10)

DECLARE @columns       [NVARCHAR](4000)
DECLARE @sql_str       [NVARCHAR](4000)
DECLARE @sql_str2      [VARCHAR](8000)

SET @StartDate = '01/03/2008' -- start period date
SET @EndDate   = '25/03/2008' -- end period date
SET @EndTime   = '18:00:00'   -- end period time

SET @columns       = ''
SET @DateTmp       = @StartDate


SELECT sq.[Отдел],
       sq.[ФИО],
       sq.[Кол-во  раб. часов в месяце],
       sq.[Кол-во рабочих дней в месяце],
       sq.[Фактич. кол-во дней на работе],
       sq.[Фактч. кол-во раб. часов],
       sq.[Из них кол-во часов после 18:00],
       sq.[Отпуск кол-во дней],
       sq.[Важные причины кол-во],
       sq.[Примечание],
       st.*,
       tl.*
  FROM 
(SELECT u.UID,
       g.[GroupName] AS 'Отдел',
       u.[Name] AS 'ФИО',
       '' AS 'Кол-во  раб. часов в месяце',
       '' AS 'Кол-во рабочих дней в месяце',
       (SELECT TOP(1) COUNT(CONVERT([NVARCHAR](15),l2.Date,103))
          FROM [dbo].[RALog] l2
         WHERE l2.Date > @StartDate AND l2.Date < @EndDate AND l2.UID = u.UID
         GROUP BY CONVERT([NVARCHAR](15),l2.Date,103)) AS 'Фактич. кол-во дней на работе',
       (SELECT TOP(1) CONVERT([NVARCHAR](5),SUM(DATEPART(hh,CONVERT([DATETIME],sq.[Time],108))) + CONVERT([INT],SUM(DATEPART(mi,CONVERT([DATETIME],sq.[Time],108)))/60)) + ':' + CONVERT([NVARCHAR](5),SUM(DATEPART(mi,CONVERT([DATETIME],sq.[Time],108))) - CONVERT([INT],SUM(DATEPART(mi,CONVERT([DATETIME],sq.[Time],108))) / 60)*60) + ':' + CONVERT([NVARCHAR](5),SUM(DATEPART(ss,CONVERT([DATETIME],sq.[Time],108))))
          FROM (SELECT CONVERT([NVARCHAR](15),l3.Date,103) AS 'Date',
                       CONVERT([NVARCHAR](10),(MAX(CONVERT([DATETIME],l3.[Time])) - MIN(CONVERT([DATETIME],l3.[Time]))),108) AS [Time]
                  FROM [dbo].[RALog] l3
                 WHERE l3.Date > @StartDate AND l3.Date < @EndDate AND l3.UID = u.UID
                 GROUP BY CONVERT([NVARCHAR](15),l3.Date,103)) AS sq) AS 'Фактч. кол-во раб. часов',
       (SELECT TOP(1) COALESCE(CONVERT([NVARCHAR](5),SUM(DATEPART(hh,CONVERT([DATETIME],sq.[Time],108))) + CONVERT([INT],SUM(DATEPART(mi,CONVERT([DATETIME],sq.[Time],108)))/60)) + ':' + CONVERT([NVARCHAR](5),SUM(DATEPART(mi,CONVERT([DATETIME],sq.[Time],108))) - CONVERT([INT],SUM(DATEPART(mi,CONVERT([DATETIME],sq.[Time],108))) / 60)*60) + ':' + CONVERT([NVARCHAR](5),SUM(DATEPART(ss,CONVERT([DATETIME],sq.[Time],108)))),'0:0:0')
          FROM (SELECT CONVERT([NVARCHAR](15),l3.Date,103) AS 'Date',
                       CONVERT([NVARCHAR](10),(MAX(CONVERT([DATETIME],l3.[Time])) - CONVERT([DATETIME],@EndTime)),108) AS [Time]
                  FROM [dbo].[RALog] l3
                 WHERE l3.Date > @StartDate AND l3.Date < @EndDate AND l3.UID = u.UID AND DATEDIFF(mi,CONVERT([DATETIME],l3.[Time]),CONVERT([DATETIME],@EndTime)) < 0 
                 GROUP BY CONVERT([NVARCHAR](15),l3.Date,103), l3.[Time]
                HAVING l3.[Time] = (SELECT CONVERT([NVARCHAR](10),(MAX(CONVERT([DATETIME],l5.[Time]))),108)
                                      FROM [dbo].[RALog] l5
                                     WHERE l5.UID = u.UID AND CONVERT([NVARCHAR](15),l5.Date,103) = CONVERT([NVARCHAR](15),l3.Date,103))) AS sq) AS 'Из них кол-во часов после 18:00',
       '' AS 'Отпуск кол-во дней',
       '' AS 'Важные причины кол-во',
       '' AS 'Примечание'
  FROM [dbo].[RALog] l
 INNER JOIN [dbo].[User] u
    ON (u.UID = l.UID)
 INNER JOIN [dbo].[Group] g
    ON (g.GID = u.GID)
WHERE l.Date > @StartDate
      AND l.Date < @EndDate
GROUP BY u.[Name], u.UID, g.[GroupName]) AS sq
LEFT JOIN [dbo].[tmp_StartTime] st
  ON (sq.UID = st.UID)
LEFT JOIN [dbo].[tmp_TimeLength] tl
  ON (sq.UID = tl.UID)
ORDER BY [Отдел], [ФИО]


В SQL server'e запрос ошибок не возвращает, нормально получаю данные, но из Delphi не могу получить данные. Ошибка: Неправильно определен обьект Parameter. Предоставлены несовместимые или неполные сведения.

Как получить выборку именно из Delphi??? Оччень нуна... 

БД прилагается.

Автор: Spirit_FTZI2 13.4.2008, 02:34
I'm sorry.

Проблема решена,  в названии столбца не должно быть 18:00, нужно так: sq.[Из них кол-во часов после 18],

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)