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

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

Apllication not applicable [D7, Paradox]


ViktorZ ©   (2006-02-28 20:13:00) 

Вот код. Он прекрасно работает в Скуль эксплорере. А вделфях пишет сабж. Что делать?
T41.SQL.Text:='SELECT C.Card,SUM(AR.Qnt*AR.RealPrice) AS CAT FROM ":T4:Cards" C, ":T4:Menu" M'+
' LEFT OUTER JOIN  ":T4:ARCheck" AR on AR.Sifr=M.Sifr '+
' LEFT OUTER JOIN  ":T4:ADCheck" AD on AD.Sys_Num=AR.Sys_Num '+
' LEFT OUTER JOIN ":T4:ACheck" A on A.Sys_Num=AD.Sys_Num'+
' WHERE'+
' M.Categ=:P1 AND AD.Sifr=:P2 AND '+
' (A.LogicDate BETWEEN :P3 AND :P4) AND '+
'  (AD.CArdCod=C.Card) GROUP By C.CArd';
T41.Params[0].AsInteger :=strToInt(Edit3.text);
T41.Params[1].AsInteger :=strToInt(Edit4.text);
T41.Params[2].AsDate:= strtodate(Edit1.text);
T41.Params[3] .AsDAte :=strtodate(Edit2.text);

T41.Open;
T41.Close;
T41.SQL.Text:='INSERT INTO Total(Card,SUMMA) SELECT C.Card,SUM(AR.Qnt*AR.RealPrice) AS CAT FROM ":T4:Cards" C, ":T4:Menu" M '+
' LEFT OUTER JOIN  ":T4:ARCheck" AR on AR.Sifr=M.Sifr '+
' LEFT OUTER JOIN  ":T4:ADCheck" AD on AD.Sys_Num=AR.Sys_Num '+
' LEFT OUTER JOIN ":T4:ACheck" A on A.Sys_Num=AD.Sys_Num '+
' WHERE '+
' M.Categ=:P1 AND AD.Sifr=:P2 AND '+
' (A.LogicDate BETWEEN :P3 AND :P4) AND '+
' (AD.CArdCod=C.Card) GROUP By C.CArd';
T41.ExecSQL;


ViktorZ   (2006-03-01 13:09:00) [1]

А может лучше всего ТАк?
SELECT C.Card,SUM(AR.QNt*AR.RealPrice)
FROM Menu M, ACheck A, ADCheck AD, ARcheck AR,
CARDS C
WHERE
(A.Sys_Num = AD.Sys_Num) AND M.Categ=:P1 AND AD.SIFR=:P2
AND (AD.Sys_Num = AR.Sys_Num)
AND (AR.Sifr = M.Sifr)
AND (C.CARD = AD.CardCod)
AND A.LogicDAte Between :P3 AND :P4
GROUP BY C.Card

Тут уж точно все указано.


ViktorZ   (2006-03-01 12:45:00) [2]

>Так и пишет: "Нехочу понимать параметры"?
>Твой вольный перевод никому не нужен
Нет просто когда задаешь в явном виде все нормально отрабатывает.

>FROM Cards C, Menu M
>При этом в WHERE нес связи С и M. Соиденяй тоже через JOIN, незачем мешать >явное и неявное соединение

А они у меня действительно связаны неявно. ТО есть через посредников.

>На кой А еще здесь? Sys_Num поди даце не первичный?
Как на кой? Сравниваю по полю. У меня вообще нет никаких первичных, по крайней мере я не нашел их просматриваю информацию о таблице.

Может кто нить правильно напишет запрос? а то мне уже тут столько насоветовали, одни говорят нельзя сложные селекты использовать, другие говорят можно, но у меня запрос фиговый. ОДнако ни то, ни то не работает.  Могу показать таблички правда они большие, из за этого и не выкладывал сразу.


ЮЮ   (2006-03-01 04:57:00) [3]


> Конечно! НЕЛЬЗЯ в INSERT INTO указывать сложный селект!!
> !


Нельзя Union использовать. Других ограничений нет

.
> Сделал так. Все равно пишет тоже самое.


> Нашел в чем ошибка оказывается не хочет понимать Параметры.


Так и пишет: "Нехочу понимать параметры"?
Твой вольный перевод никому не нужен

FROM Cards C, Menu M
При этом в WHERE нес связи С и M. Соиденяй тоже через JOIN, незачем мешать явное и неявное соединение

AND  (AD.CArdCod=C.Card)
Это тоже лучше перенести в LEFT OUTER JOIN  ADCheck AD

LEFT OUTER JOIN  ADCheck AD on AD.Sys_Num=AR.Sys_Num '+
' LEFT OUTER JOIN ACheck A on A.Sys_Num=AD.Sys_Num '+

На кой А еще здесь? Sys_Num поди даце не первичный?


ViktorZ   (2006-02-28 23:32:00) [4]

ТАм написано Использовать Qbe или .SQl file. Просто в него то всунуть Параметры тоже нельзя там использовать.


ViktorZ   (2006-02-28 23:17:00) [5]

Сорри погарячился. нашел ее в БДЕ.


ViktorZ   (2006-02-28 23:14:00) [6]


> Конечно! НЕЛЬЗЯ в INSERT INTO указывать сложный селект!!
> !
> Когда же ты начнёшь читать документацию, LocalSQL.hlp ??
> ?

Блин да нету  уменя документации. У меня книжки есть скачанные так там про это ни слова. Как быть то. Неужели нерешаемо?


Johnmen   (2006-02-28 23:11:00) [7]

>ViktorZ ©
> Apllication not applicable

Конечно! НЕЛЬЗЯв INSERT INTO указывать сложный селект!!!
Когда же ты начнёшь читать документацию, LocalSQL.hlp ???


ViktorZ   (2006-02-28 22:35:00) [8]

{T41.SQL.Text:='SELECT C.Card,SUM(AR.Qnt*AR.RealPrice) AS CAT FROM Cards C, Menu M '+
' LEFT OUTER JOIN  ARCheck AR on AR.Sifr=M.Sifr '+
' LEFT OUTER JOIN  ADCheck AD on AD.Sys_Num=AR.Sys_Num '+
' LEFT OUTER JOIN ACheck A on A.Sys_Num=AD.Sys_Num '+
' WHERE '+
' M.Categ=:P1 AND AD.Sifr=:P2 AND '+
' (A.LogicDate BETWEEN :P3 AND :P4) AND '+
' (AD.CArdCod=C.Card) GROUP By C.CArd';}
T41.SQL.Clear;
T41.SQL.Text:='INSERT INTO Total(CARD,SUMMA) SELECT C.Card,SUM(AR.Qnt*AR.RealPrice) AS CAT FROM Cards C, Menu M '+
' LEFT OUTER JOIN  ARCheck AR on AR.Sifr=M.Sifr '+
' LEFT OUTER JOIN  ADCheck AD on AD.Sys_Num=AR.Sys_Num '+
' LEFT OUTER JOIN ACheck A on A.Sys_Num=AD.Sys_Num '+
' WHERE '+
' M.Categ=:P1 AND AD.Sifr=:P2 AND '+
' (A.LogicDate BETWEEN :P3 AND :P4) AND '+
' (AD.CArdCod=C.Card) GROUP By C.CArd';
T41.Params[0].AsInteger :=strToInt(Edit3.text);
T41.Params[1].AsInteger :=strToInt(Edit4.text);
T41.Params[2].AsDate:= strtodate(Edit1.text);
T41.Params[3] .AsDAte :=strtodate(Edit2.text);
T41.ExecSQl ;

Сделал так. Все равно пишет тоже самое.


ViktorZ   (2006-02-28 22:30:00) [9]


> я так понял, что в верхней части этой каши ты выбираешь
> то, что потом вставляешь в таблицу ?

Именно так и есть.:-)))


> T41.SQL.Clear;

Раньше мне ее наоборот советовали убрать.


Виталий Панасенко   (2006-02-28 22:25:00) [10]

Удалено модератором


Виталий Панасенко   (2006-02-28 22:23:00) [11]

$%# -слов нету. других.
у тебя в тексте SQL накалякано такого !!!!!
типа selelet * from table insert into select * from table. Белиберда короче.
На кой тебе первый Select ? Ну да ладно.
ПОСЛЕ T41.Open вставь строчку
T41.SQL.Clear;
я вообще не пойму, что ты хочешь сделать ? я так понял, что в верхней части этой каши ты выбираешь то, что потом вставляешь в таблицу ?
НО ТЫ ВЕДЬ ЭТО ДЕЛАЕШЬ ВО ВТОРОЙ ПОЛОВИНЕ !!!! Заремируй все от верхней части до T41.SQL.Text:='INSERT -ЭТО УЖЕ РЕМИРОВАТЬ НЕ НУЖНО !!! И какую же ты программу прям пишешь, что "писал, писал, а теперьпрям не могу" ? Да, "ремировать" - заключить в (**) или {}


ViktorZ   (2006-02-28 22:06:00) [12]

ДА


Виталий Панасенко   (2006-02-28 22:06:00) [13]

А после T41.Open СРАЗУ идет
> T41.SQL.Text:='INSERT INTO Total(CARD,SUMMA) SELECT C.Card,
> SUM(AR.Qnt*AR.RealPrice) AS CAT FROM Cards C, Menu M '+
> ' LEFT OUTER JOIN  ARCheck AR on AR.Sifr=M.Sifr '+
> ' LEFT OUTER JOIN  ADCheck AD on AD.Sys_Num=AR.Sys_Num '+
> ' LEFT OUTER JOIN ACheck A on A.Sys_Num=AD.Sys_Num '+
> ' WHERE '+
> ' M.Categ=:P1 AND AD.Sifr=:P2 AND '+
> ' (A.LogicDate BETWEEN :P3 AND :P4) AND '+
> ' (AD.CArdCod=C.Card) GROUP By C.CArd';
> T41.Params[0].AsInteger :=strToInt(Edit3.text);
> T41.Params[1].AsInteger :=strToInt(Edit4.text);
> T41.Params[2].AsDate:= strtodate(Edit1.text);
> T41.Params[3] .AsDAte :=strtodate(Edit2.text);
> T41.ExecSQL ;

?


ViktorZ   (2006-02-28 22:00:00) [14]

T41.SQL.Text:='SELECT C.Card,SUM(AR.Qnt*AR.RealPrice) AS CAT FROM Cards C, Menu M '+
' LEFT OUTER JOIN  ARCheck AR on AR.Sifr=M.Sifr '+
' LEFT OUTER JOIN  ADCheck AD on AD.Sys_Num=AR.Sys_Num '+
' LEFT OUTER JOIN ACheck A on A.Sys_Num=AD.Sys_Num '+
' WHERE '+
' M.Categ=:P1 AND AD.Sifr=:P2 AND '+
' (A.LogicDate BETWEEN :P3 AND :P4) AND '+
' (AD.CArdCod=C.Card) GROUP By C.CArd';
T41.Params[0].AsInteger :=strToInt(Edit3.text);
T41.Params[1].AsInteger :=strToInt(Edit4.text);
T41.Params[2].AsDate:= strtodate(Edit1.text);
T41.Params[3] .AsDAte :=strtodate(Edit2.text);
T41.Open;

T41.SQL.Text:='INSERT INTO Total(CARD,SUMMA) SELECT C.Card,SUM(AR.Qnt*AR.RealPrice) AS CAT FROM Cards C, Menu M '+
' LEFT OUTER JOIN  ARCheck AR on AR.Sifr=M.Sifr '+
' LEFT OUTER JOIN  ADCheck AD on AD.Sys_Num=AR.Sys_Num '+
' LEFT OUTER JOIN ACheck A on A.Sys_Num=AD.Sys_Num '+
' WHERE '+
' M.Categ=:P1 AND AD.Sifr=:P2 AND '+
' (A.LogicDate BETWEEN :P3 AND :P4) AND '+
' (AD.CArdCod=C.Card) GROUP By C.CArd';
T41.Params[0].AsInteger :=strToInt(Edit3.text);
T41.Params[1].AsInteger :=strToInt(Edit4.text);
T41.Params[2].AsDate:= strtodate(Edit1.text);
T41.Params[3] .AsDAte :=strtodate(Edit2.text);
T41.ExecSQL ;

Вот так я делаю. Вес равно таже ошибка. Мне в параметрах не имна таблиц нужны и значения из текстовых полей. Которые я могу менять.


Виталий Панасенко   (2006-02-28 21:55:00) [15]

Да, еще. Я так понял, ты ИМЕНА таблиц в параметы пытаешься передать ? Это стандартный TQuery не умеет делать. В RxLib макросы можно подставлять. А в эксплорере небось вместо параметров в именах таблиц указывал реальные имена, так ?


Виталий Панасенко   (2006-02-28 21:51:00) [16]

А где ты в INSERTе параметрам значения присваиваешь ? я в коде такого не вижу


ViktorZ   (2006-02-28 21:35:00) [17]

Пожлуйста помогите. ОЧень надо, а то выходит писал писал прогу а потом на те и никак не могу. Мож кто знает как выкрутиться.


ViktorZ   (2006-02-28 20:42:00) [18]

Нашел в чем ошибка оказывается не хочет понимать Параметры. Как заставить Инсерт их понимать?


Наверх

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