Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.19;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.039 c
1-1139864107
The X
2006-02-13 23:55
2006.03.19
Мультистроковый TButton


15-1140674894
7BB
2006-02-23 09:08
2006.03.19
Оберон, Модула


3-1138186334
alenamc
2006-01-25 13:52
2006.03.19
Проблема c BookMark


15-1141022634
Fenerik76
2006-02-27 09:43
2006.03.19
MP3 плеер Sony MPEG4 DivX + FM + диктофон купить


2-1141654657
SMAC
2006-03-06 17:17
2006.03.19
IntTo...