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

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

Вернуться   Форум программистов > C/C++ программирование > C/C++ Базы данных
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2016, 14:49   #1
abtat
Пользователь
 
Регистрация: 23.12.2011
Сообщений: 17
Плохо Аномалии при переходе с Windows XP на Win7

У мена Windows XP успешно работала программа, написанная на RADStudio C++ 2010 с использованием локального сервера СУБД MySQL. в одном из фрагментов которой были 2 запроса на получение выборки и на корректировку 2 параметров одной записи. Тестовый вариант этих запросов приведен ниже:

Код:
//---------------------------------------------------------------------------
void __fastcall TForm1::BookByAuthorBtnClick(TObject *Sender)
	{
	TADOQuery* ADOQuery1;
	ADOQuery1 = new TADOQuery(this);
	String SQL1 =
		"SELECT * FROM Book WHERE AuthorNbr = :ANbr";
	ADOQuery1->Connection = ADOConn;
	ADOQuery1->SQL->Clear();
	ADOQuery1->SQL->Add(SQL1);
	Param1 = ADOQuery1->Parameters->ParamByName("ANbr");
	Param1->DataType = ftSmallint;
	Param1->Value = StrToInt(AuthorKeyEdit->Text);
	ADOQuery1->Active = true;
	DataSrce2->DataSet = ADOQuery1;
	}

//---------------------------------------------------------------------------
void __fastcall TForm1::UpdBookBtnClick(TObject *Sender)
	{
	TADOQuery* ADOQuery2;
	ADOQuery2 = new TADOQuery(this);
	ADOQuery2->Connection = ADOConn;
	String SQL2 =
		"UPDATE Book \
		 SET NbrOfEditions = :ENbr, Volume = :Vol \
		 WHERE BookNbr = :BNbr2";
	ADOQuery2->SQL->Clear();
	ADOQuery2->SQL->Add(SQL2);
	Param3 = ADOQuery2->Parameters->ParamByName("ENbr");
	Param3->DataType = ftSmallint;
	Param3->Value = StrToInt(NbrOfEditionsEdit->Text);
	Param4 = ADOQuery2->Parameters->ParamByName("Vol");
	Param4->DataType = ftFloat;
	Param4->Value = StrToFloat(BookVolumeEdit->Text);
	Param5 = ADOQuery2->Parameters->ParamByName("BNbr2");
	Param5->DataType = ftSmallint;
	Param5->Value = StrToInt(BookKeyEdit->Text);
	ADOQuery2->Prepared = true;
	ADOQuery2->ExecSQL();
	}
Таблица Books была создана следующим SQL скриптом:

Код:
CREATE TABLE `book` (
  `BookNbr` SMALLINT(6) NOT NULL AUTO_INCREMENT,
  `BookName` VARCHAR(50) COLLATE utf8_general_ci DEFAULT NULL,
  `AuthorNbr` SMALLINT(6) DEFAULT NULL,
  `Volume` DECIMAL(5,2) DEFAULT NULL,
  `FirstPub` SMALLINT(6) UNSIGNED DEFAULT NULL,
  `NbrOfEditions` SMALLINT(6) DEFAULT NULL,
  `Comment` VARCHAR(60) COLLATE utf8_general_ci DEFAULT NULL,
  PRIMARY KEY (`BookNbr`) COMMENT ''
)ENGINE=InnoDB
Запросы были написаны в соответствие с рекомендациями из статьи
ms-help://embatcadero.rs2010/codesamples/ADOQuery_(C++).html и при работе в Windows XP все работало без аномалий.
После переноса задачи на машину с Windows 7, оба запроса выполняются правильно, но, по крайней мере, в половине случаев при исполнении каждого запроса происходит остановка и выдается сообщение класса EOleException: «Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом». Если в окне сообщения нажать кнопку “Continue”, то запрос выполняется и его результат правильный. Это означает, что аргументы имели правильное значение, а сообщение об ошибке было ложным Даже при повторении запроса без изменения аргументов остановки то происходят, то нет. В этой же среде Windows XP компиляция очень большой С++ Builder программы и ее исполнение при работе с той же базой при работе с данными через компоненту TADOTable происходят без аномалий. Что бы это могло означать и как от такой остановки избавиться?
У меня Windows 7 (32 bit), MySQL 5.5.25 и MySQL ODBC Connector 5.3.4-Win32

Последний раз редактировалось Аватар; 14.02.2016 в 15:22.
abtat вне форума Ответить с цитированием
Старый 14.02.2016, 15:10   #2
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

С чего решили что в запросе дело? на какой строке ошибка?
come-on вне форума Ответить с цитированием
Старый 15.02.2016, 19:42   #3
abtat
Пользователь
 
Регистрация: 23.12.2011
Сообщений: 17
По умолчанию

В первом запросе при значении единственного аргумента =8 за 7 исполнений функции 3 раза возникал сбой на строке
Param1 = ADOQuery1->Parameters->ParamByName("ANbr");
Во всех 7 исполнениях результат был правильный, в том числе и в 3 сбойных после нажатия Continue в окне сообщения об ошибке.
abtat вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Предупреждение при переходе на сайт. countess Общие вопросы .NET 1 18.10.2011 13:54
Ошибка при переходе по ссылке Anubys PHP 2 05.07.2011 06:55
Выбор в листе при переходе Ghennadiy PHP 25 25.12.2010 13:30
Refresh при переходе на страницу nikleb JavaScript, Ajax 8 20.12.2007 18:24