Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2009, 17:33   #1
reBOOK
Пользователь
 
Аватар для reBOOK
 
Регистрация: 27.10.2009
Сообщений: 24
По умолчанию select в Delphi

помогите с запросом:

Query3.Sql:
Код:
select code_c, sum ( :param1)
from  cinema, god2000
where cinema.code_c = god2000.code_c
group by code_c;
код:
Код:
procedure TForm3.Button8Click(Sender: TObject);
 var
  Year:string;
begin
 DBGrid1.DataSource:=DataSource2;
 Query3.close;
 Year:=Form3.ComboBox3.Text;
 Query3.Params[0].Value:='god'+year+'.days';
 Query3.Open;
 DataSource2.Enabled:= true;
end;
вылезает ошибка "data type unknow"...
reBOOK вне форума Ответить с цитированием
Старый 01.11.2009, 17:45   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Что-то я сильно сомневаюсь, что имя поля можно передавать в качестве параметра...
mihali4 вне форума Ответить с цитированием
Старый 01.11.2009, 18:07   #3
reBOOK
Пользователь
 
Аватар для reBOOK
 
Регистрация: 27.10.2009
Сообщений: 24
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Что-то я сильно сомневаюсь, что имя поля можно передавать в качестве параметра...
Код:
select code_c, sum (god:param1 .days)
from  cinema, god2000
where cinema.code_c = god2000.code_c
group by code_c;
Код:
...
Query3.Params[0].AsString:=Year;
...
token unknow line 1 char 23 ?

как то мне очень нравиться такой способ, до другого не могу додуматься =(
может с UPPER попробовать? или я опять что то в синтаксисе напутал?...
reBOOK вне форума Ответить с цитированием
Старый 01.11.2009, 18:47   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Попробуйте простейший запрос типа:
'select (: param1) from mytable'
Увы, ничего не получится...
Да, и чтобы поменьше гимора и побольше убежденности, при необходимости используйте лучше ParamByName().

Но тут придется без него.
Я обходил такие вещи примерно так:
Код:
Query1.SQL.Text:='select ';
Query1.SQL.Text:=Query1.SQL.Text+Edit1.Text;// а не PARAM !!!
Query1.SQL.Text:=Query1.SQL.Text+' from country';
Query1.Open;

Последний раз редактировалось mihali4; 01.11.2009 в 18:56.
mihali4 вне форума Ответить с цитированием
Старый 01.11.2009, 18:55   #5
ProScor
 
Регистрация: 06.10.2009
Сообщений: 5
По умолчанию

Нельзя имя поля передать в качестве параметра, но зато можно программно сформировать текст запроса. Например вот так:
query3.sql.text:='select code_c, sum ('god+Form3.ComboBox3.Text+'.days'+
') from cinema, god2000 where cinema.code_c = god2000.code_c group by code_c';
ProScor вне форума Ответить с цитированием
Старый 01.11.2009, 18:55   #6
Usov
Форумчанин
 
Аватар для Usov
 
Регистрация: 29.09.2009
Сообщений: 228
По умолчанию

А не проще ли формировать SQL динамически без параметров?
Usov вне форума Ответить с цитированием
Старый 01.11.2009, 19:52   #7
reBOOK
Пользователь
 
Аватар для reBOOK
 
Регистрация: 27.10.2009
Сообщений: 24
По умолчанию

ProScor
нельзя мне так, у меня задание такое))

Цитата:
Сообщение от Usov Посмотреть сообщение
А не проще ли формировать SQL динамически без параметров?
к сожалению нет, год выбирается пользователем

Проблему решил, для этого пришлось избавиться от параметров после select и from, оставил только после where, пришлось переделывать базу...
получил опыт: нужно стремиться упростить select, путем усложнения создания таблиц))))

спасибо всем кто подсказал что у меня не так ))
reBOOK вне форума Ответить с цитированием
Старый 02.11.2009, 07:29   #8
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

по моему легче было логику переделать чем в базе извращаться.
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 02.11.2009, 07:47   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я вообще не люблю этот механизм Борландовский, но раз ты с ним работать решил то по хоророшему нужно так:
Код:
var p:TParameter;
....
begin
....
p:=Query1.Parameters.AddParameter;
p.Value:='Дас ист поле';
p.DataType:=ftString; //И его тип нуна указать

end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.11.2009, 14:05   #10
reBOOK
Пользователь
 
Аватар для reBOOK
 
Регистрация: 27.10.2009
Сообщений: 24
По умолчанию

query.sql:
Код:
select cinema.name, sum(prokat_sbor.days)
from cinema, prokat_sbor
where cinema.code_c = prokat_sbor.code_c and
      prokat_sbor.years = :param1
group by cinema.name;
Код:
procedure TForm3.Button8Click(Sender: TObject);
 var
  Year:string;
begin
 DBGrid1.DataSource:=DataSource2;
 Query3.close;
 Year:=Form3.ComboBox3.Text;
 Query3.Params[0].Value:=Year;
 Query3.Open;
 DataSource2.Enabled:= true;
end;
просто добавил VIEW в базу, никаких больше извращении в базе))
зато теперь работает как часы))

Последний раз редактировалось reBOOK; 03.11.2009 в 14:07.
reBOOK вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В зависимости от выбора в Select изменить значения другого Select Tayfun HTML и CSS 3 18.08.2011 00:05
Select t1.N,t1.FIO,(select t2.acc from t2 where t2.type=1) from t1,t2 mavlon_m SQL, базы данных 2 17.09.2009 15:28
Select LENA_M SQL, базы данных 7 27.05.2009 14:03
Передача значения в <select></select> kkkggg Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 06.09.2007 00:26