Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
1-1140028531
Volf_555
2006-02-15 21:35
2006.03.19
Как вызвать стандартное контекстное меню для определ. типа файла?


4-1134652740
серега78
2005-12-15 16:19
2006.03.19
Framework


8-1128592626
Dereks
2005-10-06 13:57
2006.03.19
Как получать данные с аудиокарты?


9-1126532168
Signate
2005-09-12 17:36
2006.03.19
Игровой цикл


2-1141021615
Wel
2006-02-27 09:26
2006.03.19
игра Сапер





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский