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

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

Сообщений: 12


« : 16 февраля 2016, 21:36:23 »

   Аномалия при переходе с WinXP на Win7

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


Код
//---------------------------------------------------------------------------
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();
}

Таблица Book, к которой обращается запрос, была создана следующим 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 7 компиляция очень большой С++ Builder программы и ее исполнение при работе с той же базой при работе с данными через компоненту TADOTable происходят без аномалий. Что бы это могло означать и как от такой остановки избавиться?  
У меня Windows 7 (32 bit), MySQL 5.5.25 и MySQL ODBC Connector 5.3.4-Win32
« Последнее редактирование: 02 июня 2017, 10:25:51 от volvo877 » Записан
Admin
Администратор
***

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

Сообщений: 286


« Ответ #1 : 20 февраля 2016, 16:54:35 »

А если временно убрать строчки со значениями типа float то ошибки останутся или исчезнут?
Param4->DataType = ftFloat;
   Param4->Value = StrToFloat(BookVolumeEdit->Text);
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в: