Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Доступ к полю с подзапросом  [new]
Chertoz
Member

Откуда:
Сообщений: 18
Добрый день!
Подскажите плиз.
Работаю с таким запросом к БД MS SQL:
SELECT     path, COUNT(*) AS count, idparent,
(SELECT     dateadd  FROM          folderbase
WHERE      ({ fn CONCAT({ fn CONCAT(path, '\') }, namefolder) } = fb.path)) AS dateadd
FROM         folderbase AS fb
GROUP BY path, idparent
ORDER BY path

В программе обращаюсь к полю с подзапросом "dateadd"
s = "";
s.cat_sprintf("SELECT     path, COUNT(*) AS count, idparent,(SELECT \
		dateadd FROM          folderbase WHERE      \
		({ fn CONCAT({ fn CONCAT(path, '\') }, \
		namefolder) } = fb.path)) AS dateadd FROM         \
		folderbase AS fb GROUP BY path, idparent ORDER BY path");
DataModule1->temp->SQL->Text = s;
DataModule1->temp->Active = true;
TDateTime dt2 = DataModule1->temp->FieldByName("dateadd")->AsDateTime;


Значения этого поля выдаются равными "30.12.1899", хотя они не нулевые?
Что не так здесь?

Модератор: Тема перенесена из форума "C++".


Сообщение было отредактировано: 19 май 15, 07:45
19 май 15, 06:21    [17658798]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к полю с подзапросом  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Немного не понял сути проблемы. Попробуйте вот такой запрос:

SELECT *, [dateadd] = (
		SELECT TOP(1) fb1.[dateadd]
		FROM dbo.folderbase fb1
		WHERE fb1.[path] + '\' + fb1.namefolder = fb.[path]
	)
FROM (
	SELECT [path], idparent, [count] = COUNT(*)
	FROM dbo.folderbase
	GROUP BY [path], idparent
) t
ORDER BY [path]


Если все по-прежнему, то было бы неплохо узнать какие данные содержаться в folderbase
19 май 15, 09:54    [17659316]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к полю с подзапросом  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8815
fn CONCAT и фигурные скобки - это явно не TSQL.
19 май 15, 10:56    [17659795]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к полю с подзапросом  [new]
Glory
Member

Откуда:
Сообщений: 104751
Владислав Колосов
fn CONCAT и фигурные скобки - это явно не TSQL.

да, это не TSQL. Это поддержка ODBC escape sequence
19 май 15, 11:21    [17659984]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к полю с подзапросом  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8815
30.12.1899 - значения поля. Дата-то 30.
19 май 15, 11:34    [17660083]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к полю с подзапросом  [new]
Wlr-l
Member

Откуда:
Сообщений: 602
Владислав Колосов,

({ fn CONCAT({ fn CONCAT(path, '\') }, namefolder) } = fb.path))

как было уже сказано означает
 fb1.[path] + '\' + fb1.namefolder
.

Начиная с 2012 можно написать так:

 CONCAT(fb1.[path], '\', fb1.namefolder)


Функция CONCAT, в отличии от +, заменяет NULL пустой строкой.
19 май 15, 11:36    [17660104]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к полю с подзапросом  [new]
Chertoz
Member

Откуда:
Сообщений: 18
Наверное немного непонятен вопрос мой, потому что модератор перенес тему из форума С++.
В среде MS SQL все работает правильно.
Скрин прилагаю[img=]
Суть вопроса в том, что в программе не могу получить выданные запросом значения этого поля (dateadd).

К сообщению приложен файл. Размер - 38Kb
20 май 15, 02:44    [17664416]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к полю с подзапросом  [new]
Chertoz
Member

Откуда:
Сообщений: 18
Нашел ошибку:
s = "";
s.cat_sprintf("SELECT     path, COUNT(*) AS count, idparent,(SELECT \
		dateadd FROM          folderbase WHERE      \
		({ fn CONCAT({ fn CONCAT(path, '\\') }, \/*двойной слеш должен быть*/
		namefolder) } = fb.path)) AS dateadd FROM         \
		folderbase AS fb GROUP BY path, idparent ORDER BY path");
DataModule1->temp->SQL->Text = s;
DataModule1->temp->Active = true;
TDateTime dt2 = DataModule1->temp->FieldByName("dateadd")->AsDateTime;


Всем спасибо!
20 май 15, 07:32    [17664542]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить