[Moscow.pm] Глюки работы с MSSQL2005 + DBD

STork Loginoff Николай Александрович STork2000 на yandex.ru
Пн Дек 21 04:44:59 PST 2009


Привет... 

Я как бы полный нуб в перл и боюсь мой совет примут за "идиотизм", но я сталкивался почти с похожей проблемой в самих числах integer.
Проблема в том, что 2 - 1 != 1
Т.е. на самом деле при вычислительных операциях 2 - 1 = 0.999999999999999999999999999999999 но Перл все ровно показывает 1
Поэтому нужно было переводить его в текст, а потом делать int и после этого заносить в БД.

Вот пример, где мы используем такую конструкцию. Вряд ли поможет вам, но чем черт не шутит.
sub minus_money {
	my ($self, $money, $uis)=shift;
	$money = "$money";
	$money = int ($money * 100);
	DBLib::db_do("update users_stats set money=money-? where uid=?",$money,$uid);
}


21.12.09, 12:47, "Павел Купцов" <pavel на kuptsov.info>:

> Привет всем!
>  Бьюсь уже два дня над неожиданно всплывшей проблемой в одном из старых своих
>  скриптов.
>  Скрипт получает от пользователя номер вида: 911011, и затем:
>  1. Ищет этот номер в таблице
>  2. Вставляет в другую таблицу этот номер и еще кое-какие данные.
>  Все это работает на DBI + DBD::ODBC + MSSQL2005 + ActivePerl 5.10
>  На некоторых данных обнаружил что DBD выдает ошибку:
>  
>  [Mon Dec 21 12:19:10 2009] inv.pl: DBD::ODBC::st execute failed:
>  [Microsoft][ODBC SQL Server Driver]Недопустимое значение точности
>  (SQL-HY104) at WebDB.pm line 122,  line 10.
>  
>  В первом случае решением проблемы оказалось замена конструкции:
>  $sth->prepare('здесь код с знакоместами ? ? ?');
>  $sth->execute($var1,$var2,...);
>  на код без знакомест, т.е.:
>  $sth->prepare('здесь код $var1 $var2');
>  $sth->execute();
>  
>  А во втором случае имеем дело с SP, И такая замена не помогает...
>  Сделал trace - (в аттаче)...
>  
>  Что за ошибка - помогите идентифицировать?
>  Все типы входных параметров совпадают с типами БД, то есть везде вообще
>  только цифры, которые идут в int поля.
>  Удивляет еще и то что случается такое раз от разу на SQL2000, а на 2005 на
>  данный момент валится каждый раз.
>  Задача запустить все это именно на 2005.
>  Спасибо.
>  
>  
>  
>  

-- 
 С Уважением, Login|off Николай Александрович.


Подробная информация о списке рассылки Moscow-pm