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

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

Не работает запрос.. [D6, dBase, FoxPro]


SergP. ©   (2005-11-02 13:35:00) 

Год назад спрашивал здесь, но толком никто не ответил...

ADO, Provider=VFPOLEDB.1

Такой запрос работает...

  zsql:='select podat.p, podat.name, nvl(a.'+fplan+',0)+nvl(b.'+fplan+',0) as zplan,nvl(a.'+ffakt+',0)+nvl(b.'+ffakt+',0) as zfakt, a.'+fplan+' as dplan, a.'+ffakt+' as dfakt, b.'+fplan+' as mplan, b.'+ffakt+' as mfakt '
  +'from podat '
  +'left join '+base+' a on (podat.p=a.p) and (a.vb=30) and (a.r='+inttostr(rajon)+' or a.r=0) '
  +'left join '+base+' b on (podat.p=b.p) and (b.vb=50) and (b.r='+inttostr(rajon)+' or a.r=0) '
  +'order by podat.ord';


А вот такой не хочет...

vb30:='select p,sum('+fplan+') as '+fplan+',sum('+ffakt+') as '+ffakt+' from '+base+' where vb=30 group by p ';
vb50:='select p,sum('+fplan+') as '+fplan+',sum('+ffakt+') as '+ffakt+' from '+base+' where vb=50 group by p ';

   zsql:='select podat.p, podat.name, nvl(a.'+fplan+',0)+nvl(b.'+fplan+',0) as zplan,nvl(a.'+ffakt+',0)+nvl(b.'+ffakt+',0) as zfakt, a.'+fplan+' as dplan, a.'+ffakt+' as dfakt, b.'+fplan+' as mplan, b.'+ffakt+' as mfakt '
  +'from podat '
  +'left join ('+vb30+') a on (podat.p=a.p) '
  +'left join ('+vb50+') b on (podat.p=b.p) '
  +'order by podat.ord';


т.е. в переменной zsql мы имеем следующее...


select podat.p, podat.name, nvl(a.Plm,0)+nvl(b.Plm,0) as zplan,nvl(a.Mon,0)+nvl(b.Mon,0) as zfakt, a.Plm as dplan, a.Mon as dfakt, b.Plm as mplan, b.Mon as mfakt from podat left join (select p,sum(Plm) as Plm,sum(Mon) as Mon from Z5110103 where vb=30 group by p ) a on (podat.p=a.p) left join (select p,sum(Plm) as Plm,sum(Mon) as Mon from Z5110103 where vb=50 group by p ) b on (podat.p=b.p) order by podat.ord


Причем не работает даже в VFP. Почему?
Вроде бы все правильно...
Пытался вывести результаты вложеных запросов в отдельную таблицу, (типа разбить запрос на 3)
В VFP такое уже работает, а вот в проге использующей Provider=VFPOLEDB.1 запросы отрабатывают без ошибок, но таблиц не создают...


sniknik   (2005-11-03 14:19:00) [1]

> начинает требовать чтобы на винду сервиспак поставили
со ссылки

System Requirements
   *   Supported Operating Systems:Windows 2000 Service Pack 3; Windows 98; Windows ME; Windows Server 2003; Windows XP

Processor: Pentium class
RAM: 64 MB (recommended: 128 MB or higher)
Available Hard Disk Space: 2 MB for minimum install, 4 MB for full install
Software Microsoft Data Access Components (MDAC) version 2.6 or higher
Note: Installation on Windows NT 4.0 is not supported.


SergP.   (2005-11-03 13:24:00) [2]


> в общем ставь из ссылки новый провайдер и не парься.


Если бы кто-нить подсказал как его поставить под 98 и МЕ...
А то под XP и WIN2K ставится, а под 98 и МЕ не хочет...(начинает требовать чтобы на винду сервиспак поставили)


SergP   (2005-11-02 22:55:00) [3]

Скачал. Поставил. Работает...
Правда обнаружился еще один запрос, который со старым провайдером работал, а с новым не хотел. Но удалось подправить его...


sniknik   (2005-11-02 21:10:00) [4]

абсолютно ничего не делал, у меня запрос работает "as is" присланный... в общем ставь из ссылки новый провайдер и не парься.


SergP.   (2005-11-02 18:42:00) [5]

Отправил...


sniknik   (2005-11-02 18:22:00) [6]

> 2 sniknik Можно прислать тебе сам запрос, и используемые таблицы, чтобы ты глянул? Естественно если будет
> возможность...
присылай, но посмотрю только поздно вечером.


sniknik   (2005-11-02 18:21:00) [7]

> Но у меня VFP7.0 SP1
http://www.microsoft.com/downloads/details.aspx?FamilyId=E1A87D8F-2D58-491F-A0FA-95A3289C5FD4&displaylang=en


SergP.   (2005-11-02 18:12:00) [8]

Выдает: Syntax error и ничего сделать не могу...

2 sniknik Можно прислать тебе сам запрос, и используемые таблицы, чтобы ты глянул? Естественно если будет возможность...
Файлики небольшие....


SergP.   (2005-11-02 18:06:00) [9]

Странно...
Не могу понять... Если выполнять отдельно подзапросы и потом основной запрос d VFP то все работает....

select p,sum(Plm) as Plm,sum(Mon) as Mon from Z5110103 where vb=30 group by p into dbf vb30

select p,sum(Plm) as Plm,sum(Mon) as Mon from Z5110103 where vb=50 group by p into dbf vb50

select podat.p, podat.name, nvl(a.Plm,0)+nvl(b.Plm,0) as zplan,nvl(a.Mon,0)+nvl(b.Mon,0) as zfakt, a.Plm as dplan, a.Mon as dfakt, b.Plm as mplan, b.Mon as mfakt from podat left join vb30 a on (podat.p=a.p) left join vb50 b on (podat.p=b.p) order by podat.ord


Но

select podat.p, podat.name, nvl(a.Plm,0)+nvl(b.Plm,0) as zplan,nvl(a.Mon,0)+nvl(b.Mon,0) as zfakt, a.Plm as dplan, a.Mon as dfakt, b.Plm as mplan, b.Mon as mfakt from podat left join (select p,sum(Plm) as Plm,sum(Mon) as Mon from Z5110103 where vb=30 group by p ) a on (podat.p=a.p) left join (select p,sum(Plm) as Plm,sum(Mon) as Mon from Z5110103 where vb=50 group by p ) b on (podat.p=b.p) order by podat.ord

не хочет работать, хоть убей...

Может в VFP проблема? Но у меня VFP7.0 SP1


sniknik   (2005-11-02 16:22:00) [10]

> Запрос типа
> select * from table1 .... into dbf table2
> в VFP работает нормально, а Provider=VFPOLEDB.1  отрабатывает без ошибок, но таблица table2 не создается...
дело видимо в точках (...) в том что за ними скрыто
попробовал простой, и с обьеденением и обьеденение с подзапросом ... создается.
SELECT * FROM test1 into dbf test2
SELECT * FROM test1 t LEFT JOIN test2 s ON t.id = s.id into dbf test3
SELECT * FROM test1 t LEFT JOIN (SELECT * FROM test2) s ON t.id = s.id into dbf test3
все работают.
конект туда же
Provider=VFPOLEDB.1;Data Source=D:\;Password="";Collating Sequence=MACHINE


Desdechado   (2005-11-02 15:34:00) [11]

> ПРосто странно
В жизни много странностей. В документации что сказано по поводу подзапросов в LEFT JOIN?


SergP.   (2005-11-02 13:55:00) [12]


> Значит, VFP не поддерживает подзапросы такого вида


ПРосто странно то что JOIN он поддерживает, вложенные запросы поддерживает, а JOIN с вложенным запросом не хочет...

Да и еще...
Запрос типа
select * from table1 .... into dbf table2
в VFP работает нормально, а Provider=VFPOLEDB.1  отрабатывает без ошибок, но таблица table2 не создается...

Просто я думал сделать подобным образом, т.е. вложенные подзапросы выполнить отдельно с сохранением результатов в таблицы? А потом выполнить основной запрос уже используя эти таблицы...


Desdechado   (2005-11-02 13:38:00) [13]

> Год назад спрашивал
Целый год ждал ответа? Или безуспешно искал решение?

> Причем не работает даже в VFP
Значит, VFP не поддерживает подзапросы такого вида


Наверх

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