Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрос на вставку с параметрами… ошибка 
:(
    Опции темы
Martin_8
  Дата 19.11.2006, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 16.10.2006
Где: Минск

Репутация: нет
Всего: нет



Здравствуйте.
Помогите, пожалуйста, разобраться, с ошибкой “Lvalue required”. Я пытаюсь выполнить запрос с параметрами на вставку в таблицу Access. Но компилятор не хочет принимать строки, где описана подстановка значений вместо параметров. 
Подскажите, что не так?

Код

...
//===Преоразование даты в формат даты Access===
str_dat = DateToStr(Date());
for(i=0; i<2; i++)
{
 int index = str_dat.Pos(".");
 str_dat.Delete(index,1);
 if( index != 0 )
  {
   str_dat.Insert("/",index);
  }
}
ss.Insert("#",1);
ss.Insert(str_dat,2);
ss.Insert("#",ss.Length()+1);
// Результирующая строка с датой в формате Access в строке ss
//==========================================


for(i=0; i<ListBox2->Count; i++ )
{
 ADOQuery5->Close();
 ADOQuery5->SQL->Clear();

  ADOQuery5->SQL->Add("INSERT INTO Zakazannye ( Kod_komplekt, Kol_vo, Cena, Data )VALUES (:param_kod_kompl, :param_kol_vo, :param_cena, :param_data)");

 ADOQuery5->Parameters->ParamByName("param_kod_kompl")=StrToInt(ListBox5->Items->Strings[i]);
 ADOQuery5->Parameters->ParamByName("param_kol_vo")=StrToInt(ListBox3->Items->Strings[i]);
 ADOQuery5->Parameters->ParamByName("param_cena")=StrToFloat(ListBox4->Items->Strings[i]);
 ADOQuery5->Parameters->ParamByName("param_data")=ss;
 ADOQuery5->Open();

}


PM   Вверх
Vyacheslav
Дата 20.11.2006, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Код

ADOQuery5->Parameters->ParamByName("param_kod_kompl")->Value =StrToInt(ListBox5->Items->Strings[i]);
 ADOQuery5->Parameters->ParamByName("param_kol_vo")->Value = StrToInt(ListBox3->Items->Strings[i]);
 ADOQuery5->Parameters->ParamByName("param_cena")->Value = StrToFloat(ListBox4->Items->Strings[i]);
 ADOQuery5->Parameters->ParamByName("param_data")->Value = ss;




--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Martin_8
Дата 21.11.2006, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 16.10.2006
Где: Минск

Репутация: нет
Всего: нет



Vyacheslav, Спасибо, как я сам не понял…
PM   Вверх
Martin_8
Дата 21.11.2006, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 16.10.2006
Где: Минск

Репутация: нет
Всего: нет



С этим запросом ещё одна проблема. 
При его выполнении на строке 
Код

ADOQuery5->Open();
 вываливается ошибка “Несоответствие типов данных в выражении и условии отбора”. 

Типы в таблице Zakazannye такие:
Kod_zakaza – Счетчик (Длинное целое)
Kod_komplekt – Числовой (Длинное целое)
Kol_vo – Числовой (Длинное целое)
Cena – Числовой (Одинарное с плавающей точкой)
Data – Дата/время (Краткий формат даты)
Diler_zak – Числовой (Байт) 

Kod_zakaza – т.к. счётчик, то его соответственно в запрос не включаю, генерируется автоматически.
Diler_zak – в запросе пока не используется, предполагается использовать как логическое.

Подскажите, пожалуйста, что не так с типами в запросе и таблице?





Это сообщение отредактировал(а) Martin_8 - 21.11.2006, 20:05
PM   Вверх
Rodman
Дата 21.11.2006, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



Martin_8, пиши 
Код

 ADOQuery5->ExecSQL();


Open используй только для выборки

Добавлено @ 20:18 
в идеале так
Код

 ADOQuery5->Parameters->ParamByName("param_kod_kompl")->Value =StrToInt(ListBox5->Items->Strings[i]);
 ADOQuery5->Parameters->ParamByName("param_kol_vo")->Value = StrToInt(ListBox3->Items->Strings[i]);
 ADOQuery5->Parameters->ParamByName("param_cena")->Value = StrToFloat(ListBox4->Items->Strings[i]);
 ADOQuery5->Parameters->ParamByName("param_data")->Value = ss;
 ADOQuery5->ExecSQL();


но можешь и так попробовать
Код

 ADOQuery5->Parameters->ParamByName("param_kod_kompl")->Value =ListBox5->Items->Strings[i];
 ADOQuery5->Parameters->ParamByName("param_kol_vo")->Value = ListBox3->Items->Strings[i];
 ADOQuery5->Parameters->ParamByName("param_cena")->Value = ListBox4->Items->Strings[i];
 ADOQuery5->Parameters->ParamByName("param_data")->Value = ss;
 ADOQuery5->ExecSQL();


и проверь правильно ли данные из
Код

ListBox5->Items->Strings[i];

выбираются
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Martin_8
Дата 21.11.2006, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 16.10.2006
Где: Минск

Репутация: нет
Всего: нет



Написал
Код

ADOQuery5->ExecSQL() ;

Осталась та же ошибка. Дело видимо всё же в типах данных, но не могу понять, что не нравится компилятору? 
Разве типы, которые в таблице и запросе не должны подходить друг к другу?

Добавлено @ 20:38 
Перепроверил из
Код

ListBox5->Items->Strings[i]
ListBox3->Items->Strings[i]
ListBox4->Items->Strings[i]

выбираются правильные цифровые значения.

Подскажите, где подводный камень.  smile 
PM   Вверх
Vyacheslav
Дата 22.11.2006, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Код

ADOQuery5->Parameters->ParamByName("param_data")->Value = Date();




--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Martin_8
Дата 22.11.2006, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 16.10.2006
Где: Минск

Репутация: нет
Всего: нет



Вы правы с 
Код

ADOQuery5->Parameters->ParamByName("param_data")->Value = Date();

заработало. Спасибо.
Но не могли бы Вы, если есть минутка, пояснить почему?  smile  Разве дату в Access не должна быть заключена в #, а разделитель /. Ведь для этих целей я писал конвертацию. Но в любом случаи спасибо за помощь.  smile 

PM   Вверх
Rodman
Дата 22.11.2006, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



Цитата(Martin_8 @  22.11.2006,  19:26 Найти цитируемый пост)
Разве дату в Access не должна быть заключена в #

где ты такое нашел???

Но иногда еще от винды зависит...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Vyacheslav
Дата 23.11.2006, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Цитата(Martin_8 @  22.11.2006,  20:26 Найти цитируемый пост)
Но не могли бы Вы, если есть минутка, пояснить почему

Вы используете параметрический запрос. Query знает, какой тип должен у параметра и требует, что Вы передали этот тип. А уже его задача состряпать конечный запрос таким образом, чтобы  используемая БД его поняла. При это уже не очень важно к какой именно БД Вы обращаетесь Access или MS SQL. Все должно быть индифирентно



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0555 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.