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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2013, 10:48   #1
kent0026
Пользователь
 
Регистрация: 22.05.2013
Сообщений: 15
По умолчанию отсутствует значение для одного или нескольких требуемых параметров

Есть база данных Access 2003 с 4-мя связанными таблицами проблема в изменении данных одной из таблиц
надо что бы при нажатии на поле в DBGrid появлялась форма в которой можно было изменять данные, но при нажатии на кнопку "ок" выскакивает ошибка: "отсутствует значение для одного или нескольких требуемых параметров"
Таблица Клиенты связана с таблицей заказы полем id_клиента с поддержкой целостности данных, и в таблице заказы есть поле номер_заказа формат поля счетчик, это поле добавляется в параметр и используется для определения редактируемой строки, как исправить или дополнить программу, проверил все что мог, аналогичный код использую для изменения данных в остальных таблицах все работает, здесь ошибка понять где не могу

код обработчика события в докумете текст
Вложения
Тип файла: txt текст.txt (842 байт, 146 просмотров)
kent0026 вне форума Ответить с цитированием
Старый 22.05.2013, 11:38   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

АDO любит все что непонятно (в т.ч. неправильно записанные имена полей) обзывать параметрами, а потом ругаться что для него нет значения.
Код:
form1.ADOQuery2.SQL.Text:='update Заказы set Наименование_товара=:nm, Цена_товара=:ct, колличество=:q, стоимость=:s, способ_оплаты=:t, дата_оформления=:dt, статус=:sts, продавец=:pr where id=:pid and n=:opn';
form1.ADOQuery2.Parameters.ParamByName('pr').Value:=form7.ComboBox4.Text;
form1.ADOQuery2.Parameters.ParamByName('sts').Value:=form7.ComboBox3.Text;
form1.ADOQuery2.Parameters.ParamByName('dt').Value:=form7.Edit7.Text;
form1.ADOQuery2.Parameters.ParamByName('s').Value:=form7.Edit5.Text;
form1.ADOQuery2.Parameters.ParamByName('nm').Value:=form7.ComboBox1.Text;
form1.ADOQuery2.Parameters.ParamByName('ct').Value:=form7.Edit3.Text;
form1.ADOQuery2.Parameters.ParamByName('q').Value:=form7.Edit4.Text;
form1.ADOQuery2.Parameters.ParamByName('t').Value:=form7.ComboBox2.Text;
form1.ADOQuery2.Parameters.ParamByName('pid').Value:=id;
form1.ADOQuery2.Parameters.ParamByName('opn').Value:=n;
простой способ нахождения неверного.
открываем БД в Access.
Выполняем Создание запроса
переключаем вид отображения в SQL
Берем (копируем) текст проблемного запроса
Пытаемся выполнить и смотрим какие "параметры" он(Access) нас спрашивает
правильные(ожидаемые) задаем, а неправильные(неожиданные) исправляем.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 22.05.2013 в 11:47.
evg_m на форуме Ответить с цитированием
Старый 22.05.2013, 11:41   #3
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
АDO любит все что непонятно
адо тут не при чем
eval вне форума Ответить с цитированием
Старый 22.05.2013, 16:54   #4
kent0026
Пользователь
 
Регистрация: 22.05.2013
Сообщений: 15
По умолчанию

проблема не решена, по прежнему выдает эту же ошибку((((
kent0026 вне форума Ответить с цитированием
Старый 22.05.2013, 17:08   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если, например, Цена_товара цифровой тип поля или дата_оформления поле даты-времени, то не будет работать ни исходный вариант, ни вариант, который предложил evg_m. Аналогично и по другим полям не символьного типа
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.05.2013, 17:21   #6
kent0026
Пользователь
 
Регистрация: 22.05.2013
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Если, например, Цена_товара цифровой тип поля или дата_оформления поле даты-времени, то не будет работать ни исходный вариант, ни вариант, который предложил evg_m. Аналогично и по другим полям не символьного типа
а почему? просто в таблице клиенты этот запрос работает идеально, там так же присутствуют дата/время, числовые, символьные, поле счетчик
kent0026 вне форума Ответить с цитированием
Старый 22.05.2013, 18:38   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Целые числовые
Код:
  form1.ADOQuery2.Parameters.ParamByName('s').Value:=StrToInt(form7.Edit5.Text);
Числовые с точкой
Код:
  form1.ADOQuery2.Parameters.ParamByName('s').Value:=StrToFloat(form7.Edit5.Text);
типа даты-времени лучше с TDateTimePicker
Код:
var t: TDateTime;
  t:=Trunc(DateTimePicker.Date);
  form1.ADOQuery2.Parameters.ParamByName('s').Value:=t;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.05.2013, 07:57   #8
kent0026
Пользователь
 
Регистрация: 22.05.2013
Сообщений: 15
По умолчанию

и снова нет, ошибка не исправлена
kent0026 вне форума Ответить с цитированием
Старый 23.05.2013, 08:11   #9
kent0026
Пользователь
 
Регистрация: 22.05.2013
Сообщений: 15
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
адо тут не при чем
а что причем?
kent0026 вне форума Ответить с цитированием
Старый 23.05.2013, 09:30   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
и снова нет, ошибка не исправлена
БД в студию. + исходный текст программы (весь, чтобы было можно скомпилировать и запустить).

Цитата:
адо тут не при чем
Цитата:
а что причем?
причем здесь то, что занимается выполнением запросов и запрашивает у программы(не у пользователя) все что непонятно, не пытаясь понять(проанализировать) что ошибка в написании или же действительно место для ввода данных и говоря что вот это есть такой-то параметр и мне нужно его значение.
то есть "причем здесь" СУБД (как раз тот самый Access, точнее его движок).

Цитата:
простой способ нахождения неверного.
ПРОВЕРИТЬ выполнение данного запроса НЕПОСРЕДСТВЕННО в Access.
Причем именно данного, полученного через Сopy Paste, чтобы СКОПИРОВАТЬ и ошибку которой как бы и нет.

Использует эту особенность, но при этом "имя" непонятно откуда взявшегося параметра будет показано пользователю(программисту).
Цитата:
правильные(ожидаемые) задаем, а неправильные(неожиданные) исправляем.
Этого же эффекта (узнать имя "незаданного параметра") я думаю можно достичь если в программе более подробно обработать возникающее Exception. Но Сopy + Paste + Run будет быстрее.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 23.05.2013 в 09:33.
evg_m на форуме Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление значений функции для нескольких значений аргументов и параметров kolychii Помощь студентам 0 08.10.2012 15:49
Создание одного меню для заполнения нескольких листов mned Microsoft Office Excel 15 21.06.2012 14:20
index для каждого поля или нескольких iankov SQL, базы данных 3 11.07.2010 19:54
Отсутствует значение одного или нескольких требуемых параметров (Access) Grandistok БД в Delphi 1 17.01.2010 12:30
Возможно ли использование нескольких столбцов подстановки для одного поля? jonni Microsoft Office Access 10 20.05.2009 22:25