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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2011, 14:57   #1
ара
Форумчанин
 
Регистрация: 11.04.2007
Сообщений: 106
По умолчанию Про запрос с параметром Delphi

Доброго времени суток! Пытаюсь разобраться с запросом с параметром в Делфи. Возник такой вопрос. Искал похожие примеры и везде параметру значение передается из Edit, т.е. примерно так:
Код:
Form2.qry1.Parameters.ParamByName('ЗНАЧЕНИЕ ПАРАМЕТРА').Value:=Form1.Edit1.Text;
Но у меня данные отражает Грид, и я хочу передать значение, которое находится в одном из полей. Как это сделать?
ара вне форума Ответить с цитированием
Старый 14.05.2011, 21:18   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Грид связан с датасетом (через DataSource)
например, пусть это будет AdoTable1 (или ADOQuery1 - не суть важно).

тогда так:
Код:
Form2.qry1.Parameters.ParamByName('ЗНАЧЕНИЕ ПАРАМЕТРА').Value:=AdoTable1.FieldByName('ИмяПоляКакоеНадоВзять').AsString; // если поле не текстовое, то можно, например, .AsInteger
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.05.2011, 11:06   #3
ара
Форумчанин
 
Регистрация: 11.04.2007
Сообщений: 106
По умолчанию

Написал вот так:
Код:
DataModule1.PrichodQuery.SQL.Add('UPDATE Prichod INNER JOIN Tovarn_pozicia ON Prichod.id_tovarn_pozicia=Tovarn_pozicia.id_tovarn_pozicia SET Tovarn_pozicia.Ostatok=Tovarn_pozicia.Ostatok + Prichod.[Kol-vo] ');
DataModule1.PrichodQuery.SQL.Add('WHERE Prichod.id_tovarn_pozicia=Tovarn_pozicia.id_tovarn_pozicia AND Tovarn_pozicia.Name=:Name');

 DataModule1.PrichodQuery.Parameters.ParamByName('Name').Value:=DataModule1.Tovarn_pozTable.FildByName('Name').asstring;
Ругается на FildByName, говорит что не удалось идентифицировать. Почему, не подскажете?

И еще вопрос: записи добавляются в таблицу Tovarn_pozicia, которая связана с таблицей Prichod полем id_tovarn_pozicia. Но для удобства в Гриде я заменил его, теперь отражается поле Name. В параметре мне надо указывать id или Name?
ара вне форума Ответить с цитированием
Старый 15.05.2011, 11:49   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

потому что Вы невнимательны!
посмотрите, в моём примере как написано?!
FieldByName


Цитата:
В параметре мне надо указывать id или Name?
Это Вам решать!
я бы однозначно сказал, что нужно передавать ID (name может быть неуникальным)

Последний раз редактировалось Serge_Bliznykov; 15.05.2011 в 11:51.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.05.2011, 11:57   #5
ара
Форумчанин
 
Регистрация: 11.04.2007
Сообщений: 106
По умолчанию

Виноват, действительно невнимателен.
Подскажите, пожалуйста, со второй часть вопроса:
записи добавляются в таблицу Tovarn_pozicia, которая связана с таблицей Prichod полем id_tovarn_pozicia. Но для удобства в Гриде я заменил его, теперь в таблице Pricod, вместо id_tovarn_pozicia отражается поле Name, по значению этого поля я и добавляю запись. В условие выбора мне указывать id или Name???

Последний раз редактировалось ара; 15.05.2011 в 12:08.
ара вне форума Ответить с цитированием
Старый 15.05.2011, 13:12   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я уже ответил. в условие отбора нужно (по моему мнению) указывать именно ID

p.s. А вот в гриде его отображать действительно не надо. ключи (как первичные, так и внешние) служать исключительно для обеспечения целостности БД, пользователю их видеть не нужно.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.05.2011, 14:05   #7
ара
Форумчанин
 
Регистрация: 11.04.2007
Сообщений: 106
По умолчанию

Спасибо! Запрос вроде бы работает. Но возник опять такой вопрос:
созданный запрос:
Код:
 DataModule1.PrichodQuery.SQL.Add('UPDATE Prichod INNER JOIN Tovarn_pozicia ON Prichod.id_tovarn_pozicia=Tovarn_pozicia.id_tovarn_pozicia SET Tovarn_pozicia.Ostatok=Tovarn_pozicia.Ostatok + Prichod.[Kol-vo] ');
  DataModule1.PrichodQuery.SQL.Add('WHERE Prichod.id_tovarn_pozicia=Tovarn_pozicia.id_tovarn_pozicia AND Tovarn_pozicia.id_tovarn_pozicia=:id'); 

 DataModule1.PrichodQuery.Parameters.ParamByName('id').Value:=DataModule1.Tovarn_pozTable.fieldbyname('id_tovarn_pozicia').asinteger;
изменяет только Одну запись в таблице Tovarn_pozicia в соответствии с параметром, указанным в одном поле Грида. Но по одной накладной можно приходовать ведь несколько позиций? И в гриде может быть несколько записей. Подскажите, пожалуйста, как можно изменить запрос?
ара вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Delphi] Запуск процедуры с параметром ZePr Помощь студентам 10 02.02.2011 16:32
запрос с параметром Proffi2010 БД в Delphi 4 15.01.2011 18:55
Помогите сделать запрос с параметром-датой Herly Помощь студентам 9 22.12.2009 18:42
Запрос с параметром odi_noki Microsoft Office Access 2 17.12.2008 20:07
sql запрос с не статическим параметром? Geddar Помощь студентам 8 25.05.2008 10:13