Форум: "Начинающим";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
ВнизApllication not applicable Найти похожие ветки
← →
ViktorZ © (2006-02-28 20:13) [0]Вот код. Он прекрасно работает в Скуль эксплорере. А вделфях пишет сабж. Что делать?
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-02-28 20:42) [1]Нашел в чем ошибка оказывается не хочет понимать Параметры. Как заставить Инсерт их понимать?
← →
ViktorZ © (2006-02-28 21:35) [2]Пожлуйста помогите. ОЧень надо, а то выходит писал писал прогу а потом на те и никак не могу. Мож кто знает как выкрутиться.
← →
Виталий Панасенко (2006-02-28 21:51) [3]А где ты в INSERTе параметрам значения присваиваешь ? я в коде такого не вижу
← →
Виталий Панасенко (2006-02-28 21:55) [4]Да, еще. Я так понял, ты ИМЕНА таблиц в параметы пытаешься передать ? Это стандартный TQuery не умеет делать. В RxLib макросы можно подставлять. А в эксплорере небось вместо параметров в именах таблиц указывал реальные имена, так ?
← →
ViktorZ © (2006-02-28 22:00) [5]
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 22:06) [6]А после 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:06) [7]ДА
← →
Виталий Панасенко (2006-02-28 22:23) [8]$%# -слов нету. других.
у тебя в тексте SQL накалякано такого !!!!!
типа selelet * from table insert into select * from table. Белиберда короче.
На кой тебе первый Select ? Ну да ладно.
ПОСЛЕ T41.Open вставь строчку
T41.SQL.Clear;
я вообще не пойму, что ты хочешь сделать ? я так понял, что в верхней части этой каши ты выбираешь то, что потом вставляешь в таблицу ?
НО ТЫ ВЕДЬ ЭТО ДЕЛАЕШЬ ВО ВТОРОЙ ПОЛОВИНЕ !!!! Заремируй все от верхней части до T41.SQL.Text:="INSERT -ЭТО УЖЕ РЕМИРОВАТЬ НЕ НУЖНО !!! И какую же ты программу прям пишешь, что "писал, писал, а теперьпрям не могу" ? Да, "ремировать" - заключить в (**) или {}
← →
Виталий Панасенко (2006-02-28 22:25) [9]Удалено модератором
← →
ViktorZ © (2006-02-28 22:30) [10]
> я так понял, что в верхней части этой каши ты выбираешь
> то, что потом вставляешь в таблицу ?
Именно так и есть.:-)))
> T41.SQL.Clear;
Раньше мне ее наоборот советовали убрать.
← →
ViktorZ © (2006-02-28 22:35) [11]
{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 ;
Сделал так. Все равно пишет тоже самое.
← →
Johnmen © (2006-02-28 23:11) [12]>ViktorZ ©
> Apllication not applicable
Конечно! НЕЛЬЗЯ в INSERT INTO указывать сложный селект!!!
Когда же ты начнёшь читать документацию, LocalSQL.hlp ???
← →
ViktorZ © (2006-02-28 23:14) [13]
> Конечно! НЕЛЬЗЯ в INSERT INTO указывать сложный селект!!
> !
> Когда же ты начнёшь читать документацию, LocalSQL.hlp ??
> ?
Блин да нету уменя документации. У меня книжки есть скачанные так там про это ни слова. Как быть то. Неужели нерешаемо?
← →
ViktorZ © (2006-02-28 23:17) [14]Сорри погарячился. нашел ее в БДЕ.
← →
ViktorZ © (2006-02-28 23:32) [15]ТАм написано Использовать Qbe или .SQl file. Просто в него то всунуть Параметры тоже нельзя там использовать.
← →
ЮЮ © (2006-03-01 04:57) [16]
> Конечно! НЕЛЬЗЯ в 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-03-01 12:45) [17]>Так и пишет: "Нехочу понимать параметры"?
>Твой вольный перевод никому не нужен
Нет просто когда задаешь в явном виде все нормально отрабатывает.
>FROM Cards C, Menu M
>При этом в WHERE нес связи С и M. Соиденяй тоже через JOIN, незачем мешать >явное и неявное соединение
А они у меня действительно связаны неявно. ТО есть через посредников.
>На кой А еще здесь? Sys_Num поди даце не первичный?
Как на кой? Сравниваю по полю. У меня вообще нет никаких первичных, по крайней мере я не нашел их просматриваю информацию о таблице.
Может кто нить правильно напишет запрос? а то мне уже тут столько насоветовали, одни говорят нельзя сложные селекты использовать, другие говорят можно, но у меня запрос фиговый. ОДнако ни то, ни то не работает. Могу показать таблички правда они большие, из за этого и не выкладывал сразу.
← →
ViktorZ © (2006-03-01 13:09) [18]А может лучше всего ТАк?
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
Тут уж точно все указано.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.074 c