C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Не удается понять как корректировать таблицу в СУБД MySQL 5/5 из программы на С+  (Прочитано 784 раз)
abtat
Участник
**

Сказали спасибо: +0/-0
Offline Offline

Сообщений: 10


« : 09 Январь 2017, 12:24:56 »

Соединение TADOConnection выполнено, компонент  доступа TADOTable активен. и таблица Contract базы данных доступна и просматривается через компоненты TDataSource и TDBGrid.
Таблица Contract имеет в начальной части следующую структуру:

            ContractKey         Smallint      6  0
            ContractNbr         Varchar     10
            ContractDate        Date
            ContractName      Varchar     60
            ContractVolume  Decimal      5  2
            ContractItems      Smallint      6  0
 
Она содержит несколько сотен записей. С каждой записью связаны одна или несколько строк таблицы Content, содержащих состав контракта в полях Item и Volume. Проблемная процедура накапливает суммы полей Items и Volume по каждому контракту и должна в цикле внести полученные данные в соответствующие записи таблицы Contract. Для выполнения этого я пытаюсь использовать запрос, составленный по рекомендациям на форуме:

   TParameter* Param1;
   TParameter* Param2;
   TADOQuery* ADOQuery1;

   String SQLTextUV = String (
      "UPDATE   Contract   \
       SET                 \
         ContractVolume = :ContrVolume   \
       WHERE                              \
         ContractKey = :ContrKey");

   ADOQuery1 = new TADOQuery(this);
   ADOQuery1->Connection = BooksModule->ADOConnection1;
   ADOQuery1->SQL->Clear();
   ADOQuery1->SQL->Add(SQLTextUV);
   Param2 = ADOQuery1->Parameters->ParamByName("ContrKey");
   Param2->DataType = ftInteger;
   Param1 = ADOQuery1->Parameters->ParamByName("ContrVolume");
   Param1->DataType = ftCurrency;

Если проходить эту часть программы по шагам, то при выполнении строки ADOQuery1->SQL->Add(SQLTextUV) возникает ошибка:
«Exception class EOLEException with message: ‘Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом’»
Сообщение непонятно, так на этой строке ни тип аргументов, ни их значение еще не определены и известны только их имена.
Если перенести отмеченную строку в конец этого фрагмента, то при исполнении строки:
Param2 = ADOQuery1->Parameters->ParamByName("ContrKey");
возникает естественное сообщение, что параметр ContrKey не найден.
Если кто встречался с подобной ситуацией и смог ее преодолеть, помогите!
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг
**

Сказали спасибо: +350/-28
Offline Offline

Сообщений: 2181


« Ответ #1 : 15 Январь 2017, 15:52:35 »

Сваял на коленке:
Код
TADOQuery* ADOQuery1;
ADOQuery1 = new TADOQuery(this);
ADOQuery1->Owner = BooksModule;
ADOQuery1->Parent = BooksModule;
ADOQuery1->SQL->Text = "UPDATE contract SET ContractVolume=:ContrVolume WHERE ContractKey = :ContrKey";
 
ADOQuery1->Connection = BooksModule->ADOConnection1;
ADOQuery1->Parameters->ParamByName("ContrKey")->Value = val1;
ADOQuery1->Parameters->ParamByName("ContrVolume ")->Value = val2;
ADOQuery1->ExecSQL();
 

Проверять вам. val1 и val2 - значения полей.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines
Страница сгенерирована за 0.298 секунд. Запросов: 22.