Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2010, 14:54   #1
TriSDev
Новичок
Джуниор
 
Регистрация: 20.02.2010
Сообщений: 1
По умолчанию ADOQuery

Имеется следующая проблема:

Есть SQL запрос

declare @kab integer, @vidplat integer, @vidobsl integer,@date2 date, @adm integer

set @kab=2
set @date2='16.02.2010'
set @adm=5

SELECT AZ_VidPlat.Name AS VidPlat, AZ_VidObsl.Name AS VidObsl,COUNT(*) as Kol, SUM(AZ_Price.Price) AS Sum
FROM AZ_Price INNER JOIN
AZ_Svod INNER JOIN
AZ_Clienti ON AZ_Svod.IdCli = AZ_Clienti.IdCli ON AZ_Price.IdVidObsl = AZ_Svod.IdVidObsl AND AZ_Price.IdVidPlat = AZ_Svod.IdVidPlat INNER JOIN
AZ_VidObsl ON AZ_Price.IdVidObsl = AZ_VidObsl.IdVidObsl INNER JOIN
AZ_VidPlat ON AZ_Price.IdVidPlat = AZ_VidPlat.IdVidPlat
WHERE (AZ_Svod.s2 = 1) and(CONVERT(nchar(10), AZ_Clienti.Date, 120) = @date2) and (AZ_Svod.A = @adm)
GROUP BY AZ_Svod.IdKab2, AZ_VidPlat.Name, AZ_VidObsl.Name
HAVING (AZ_Svod.IdKab2 = @kab)
ORDER BY VidPlat, VidObsl DESC

------------------------------------------------------------------------
добавляю его ADOQuery

ADOQuerySQL.SQL.Clear;

ADOQuerySQL.SQL.Add('declare @kab integer,@date2 date, @adm integer');

ADOQuerySQL.SQL.Add('set @kab=2');
ADOQuerySQL.SQL.Add('set @date2=''16.10.2010'');
ADOQuerySQL.SQL.Add('set @adm=5');

ADOQuerySQL.SQL.Add('SELECT AZ_VidPlat.Name AS VidPlat, AZ_VidObsl.Name AS VidObsl,COUNT(*) as Kol, SUM(AZ_Price.Price) AS Sum');
ADOQuerySQL.SQL.Add('FROM AZ_Price INNER JOIN');
ADOQuerySQL.SQL.Add('AZ_Svod INNER JOIN');
ADOQuerySQL.SQL.Add('AZ_Clienti ON AZ_Svod.IdCli = AZ_Clienti.IdCli ON AZ_Price.IdVidObsl = AZ_Svod.IdVidObsl AND AZ_Price.IdVidPlat = AZ_Svod.IdVidPlat INNER JOIN');
ADOQuerySQL.SQL.Add('AZ_VidObsl ON AZ_Price.IdVidObsl = AZ_VidObsl.IdVidObsl INNER JOIN');
ADOQuerySQL.SQL.Add('AZ_VidPlat ON AZ_Price.IdVidPlat = AZ_VidPlat.IdVidPlat');
ADOQuerySQL.SQL.Add('WHERE (AZ_Svod.s2 = 1) and(CONVERT(nchar(10), AZ_Clienti.Date, 120) = @date2) and (AZ_Svod.A = @adm)');
ADOQuerySQL.SQL.Add('GROUP BY AZ_Svod.IdKab2, AZ_VidPlat.Name, AZ_VidObsl.Name');
ADOQuerySQL.SQL.Add('HAVING (AZ_Svod.IdKab2 = @kab)');
ADOQuerySQL.SQL.Add('ORDER BY VidPlat, VidObsl DESC');

ADOQuerySQL.ExecSQL();
ADOQuerySQL.Active:=true;


так вот после компиляции этот запрос мне ничего не выдает, хотя при тех же входных параметрах в Management Studio запрос отрабатывает на ура. Интересен и тот момент что если в компоненте ADOQuery в параметр SQL дабовить этот запрос просто вставкой, то запрос отрабатывает, а через SQL.Add() нет, может кто подскажет как заставить работать через SQL.Add()???
TriSDev вне форума Ответить с цитированием
Старый 20.02.2010, 15:07   #2
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Код:
//ADOQuerySQL.ExecSQL();
ADOQuerySQL.Active:=true;
soleil@mmc вне форума Ответить с цитированием
Старый 24.02.2010, 07:56   #3
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

уже кучу раз обсуждалось!!!!
execSQL-ипользуется когда запрос не должен возращать записи (update, delete,insert)
active:=true, или open-используется когда запрос должен возвращать записи(select)
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AdoQuery salima Помощь студентам 17 09.12.2009 21:01
ADOQuery Sanakan Помощь студентам 0 10.11.2009 23:31
AdoQuery Stanislav БД в Delphi 34 26.06.2009 22:09
ADOQuery antoni БД в Delphi 3 19.06.2009 07:49
ADOQuery Roof БД в Delphi 2 12.07.2008 18:08