Форум программистов  
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 14.02.2016, 15:49   #1
abtat
Пользователь
 
Регистрация: 23.12.2011
Сообщений: 14
Репутация: 10
Плохо Аномалии при переходе с 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 в 16:22.
abtat вне форума   Ответить с цитированием
Старый 14.02.2016, 16:10   #2
come-on
Профессионал
 
Регистрация: 21.10.2015
Сообщений: 1,444
Репутация: 414
По умолчанию

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

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



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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




18:03.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru