Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.05.2012, 12:54
dimon4iknik dimon4iknik вне форума
Прохожий
 
Регистрация: 23.04.2012
Сообщения: 20
Репутация: 10
По умолчанию Ошибка в запросе...

Код:
procedure TForm5.btn1Click(Sender: TObject);
begin
 qry1.Active:=False;
 qry1.SQL.Text:='INSERT INTO [Решение для первой смены] ( количество_диванов, Название_дивана, Наименование_товара, расход_товара_на_каркас, расход_товара_на_сборку, расход_за_день, смена )' +
 'SELECT :param2 AS количество_диванов, [Название дивана].Название_дивана, [Наименование товара].Наименование_товара, БД.расход_товара_на_каркас, БД.расход_товара_на_сборку, ' +
 '(([расход_товара_на_каркас]+[расход_товара_на_сборку])* количество_диванов ) AS расход_за_день, :param3 AS Смена FROM Смена, [Наименование товара] INNER JOIN ([Название дивана]' +
 ' INNER JOIN БД ON [Название дивана].Название_дивана = БД.Название_дивана) ON [Наименование товара].Наименование_товара = БД.Наименование_товара GROUP BY :param2, [Название дивана].Название_дивана,' +
 '[Наименование товара].Наименование_товара, БД.расход_товара_на_каркас, БД.расход_товара_на_сборку, [Смена] HAVING ((([Название дивана].Название_дивана) Like :param1));';
 qry1.Parameters.ParamByName('param1').Value:=dblkcbb1.Text;
 qry1.Parameters.ParamByName('param2').Value.StrToInt:=Edt1.Text;
 qry1.Parameters.ParamByName('param3').Value:=dblkcbb2.Text;
  qry1.ExecSQL;
end;
И вот какая ошибка...

И выделяет вот эту строку...
Код:
 qry1.Parameters.ParamByName('param2').Value.strtoint:=Edt1.Text;
подскажите в чем ошибка?
Ответить с цитированием
  #2  
Старый 06.05.2012, 13:09
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Value это свойство типа Variant. если бы он содержал интерфейс, то можно было бы присвоить его свойству strtoint какое-то значение. но в данном случае это скорее всего тип Integer или String. а StrToInt и IntToStr это как раз функции, но не факт, что они тут пригодятся. сам запрос я не смотрел, но что-то подсказывает что там тоже не все гладко.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 06.05.2012, 13:20
dimon4iknik dimon4iknik вне форума
Прохожий
 
Регистрация: 23.04.2012
Сообщения: 20
Репутация: 10
По умолчанию

Код:
qry1.Parameters.ParamByName('param2').value.Integer:=Edt1.Text;
Та же ошибка.
Ответить с цитированием
  #4  
Старый 06.05.2012, 13:26
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от dimon4iknik
Код:
qry1.Parameters.ParamByName('param2').value.Integer:=Edt1.Text;
Та же ошибка.
естественно, потому что свойства Integer тоже нет. может так:
Код:
.Parameters.ParamByName('param2').Value:=Edit1.Text;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 06.05.2012, 13:36
dimon4iknik dimon4iknik вне форума
Прохожий
 
Регистрация: 23.04.2012
Сообщения: 20
Репутация: 10
По умолчанию

а так пишет "неверно определен обьект Parametr"
Ответить с цитированием
  #6  
Старый 06.05.2012, 14:20
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Цитата:
Сообщение от dimon4iknik
а так пишет "неверно определен обьект Parametr"
Код:
qry1.Parameters.ParamByName('param2').DataType:= ftString;
qry1.Parameters.ParamByName('param2').Value:=Edt1.Text;
__________________
Google в помощь
Ответить с цитированием
  #7  
Старый 06.05.2012, 22:30
dimon4iknik dimon4iknik вне форума
Прохожий
 
Регистрация: 23.04.2012
Сообщения: 20
Репутация: 10
По умолчанию

Таже ошибка. Только строку не выделяет... Может это пишет про другой параметр?
Ответить с цитированием
  #8  
Старый 06.05.2012, 22:31
dimon4iknik dimon4iknik вне форума
Прохожий
 
Регистрация: 23.04.2012
Сообщения: 20
Репутация: 10
По умолчанию

Попробовал так же сделать для всех параметров... И ничего.. Ошибка таже...
Ответить с цитированием
  #9  
Старый 07.05.2012, 13:01
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Насколько я помню, параметры можно передавать для формирования ограничения, но не для имен полей запроса. В этом случае вам лучше формировать текст запроса иначе:
Код:
qry1.SQL.Text:=Format('INSERT INTO [Решение для первой смены] ( количество_диванов, Название_дивана, Наименование_товара, расход_товара_на_каркас, расход_товара_на_сборку, расход_за_день, смена )' +
 'SELECT %s AS количество_диванов, [Название дивана].Название_дивана, [Наименование товара].Наименование_товара, БД.расход_товара_на_каркас, БД.расход_товара_на_сборку, ' +
 '(([расход_товара_на_каркас]+[расход_товара_на_сборку])* количество_диванов ) AS расход_за_день, %s AS Смена FROM Смена, [Наименование товара] INNER JOIN ([Название дивана]' +
 ' INNER JOIN БД ON [Название дивана].Название_дивана = БД.Название_дивана) ON [Наименование товара].Наименование_товара = БД.Наименование_товара GROUP BY %s, [Название дивана].Название_дивана,' +
 '[Наименование товара].Наименование_товара, БД.расход_товара_на_каркас, БД.расход_товара_на_сборку, [Смена] HAVING ((([Название дивана].Название_дивана) Like ''%s''));',[Edt1.Text,dblkcbb2.Text,Edt1.Text,dblkcbb1.Text]);
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
dimon4iknik (07.05.2012)
  #10  
Старый 07.05.2012, 13:16
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Радость

Цитата:
Сообщение от dimon4iknik
Попробовал так же сделать для всех параметров... И ничего.. Ошибка таже...
а я предупреждал:
Цитата:
Сообщение от NumLock
сам запрос я не смотрел, но что-то подсказывает что там тоже не все гладко.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
dimon4iknik (07.05.2012)
  #11  
Старый 07.05.2012, 19:43
dimon4iknik dimon4iknik вне форума
Прохожий
 
Регистрация: 23.04.2012
Сообщения: 20
Репутация: 10
По умолчанию

Ошибка такова

(([расход_товара_на_каркас]+[расход_товара_на_сборку])* количество_диванов )
http://imagepost.ru/?v=456_13.png

Если я убераю эту строку то запрос срабатывает. Но от этого подсчета зависит другой запрос..

Последний раз редактировалось dimon4iknik, 07.05.2012 в 19:45.
Ответить с цитированием
  #12  
Старый 07.05.2012, 20:18
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Есть очень простое правило формирования БД. Если значение можно расчитать, то хранить результат расчета не надо. Поэтому расчет чего-либо в контексте вставки в БД - это грубая ошибка проектирования.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
dimon4iknik (07.05.2012)
  #13  
Старый 07.05.2012, 20:20
dimon4iknik dimon4iknik вне форума
Прохожий
 
Регистрация: 23.04.2012
Сообщения: 20
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Есть очень простое правило формирования БД. Если значение можно расчитать, то хранить результат расчета не надо. Поэтому расчет чего-либо в контексте вставки в БД - это грубая ошибка проектирования.
Ну мне нужно что б этот результат был.. Что мне тогда делать?
Ответить с цитированием
  #14  
Старый 07.05.2012, 20:46
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Цитата:
Сообщение от dimon4iknik
...Что мне тогда делать?
А попробуй-ка ты количество_диванов вставить в [] - [количество_диванов]
__________________
Google в помощь
Ответить с цитированием
Этот пользователь сказал Спасибо Ildar-tsr за это полезное сообщение:
dimon4iknik (07.05.2012)
  #15  
Старый 07.05.2012, 20:51
dimon4iknik dimon4iknik вне форума
Прохожий
 
Регистрация: 23.04.2012
Сообщения: 20
Репутация: 10
По умолчанию

Спасибо всем огромное) всё получилось. Я просто эту часть запроса перенёс в другой запрос... Так даже логичнее получилось)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:49.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter