![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]Нашел в чем ошибка оказывается не хочет понимать Параметры. Как заставить Инсерт их понимать?