Страница 1 из 1

Firebird Embedded не срабатывает условие WHERE a = 7.89

Добавлено: 30 ноя 2010, 11:04
pawigor
На компьютере Windows XP SP 3 (x86) установлен Firebird-2.5.0.26074. Разрабатывается приложение на Delphi 2010 (IBX), в котором выполняется примерно такого вида запрос:

Код: Выделить всё

UPDATE ttt SET b = 1 WHERE  a = 7.89 
.Если приложение работает через сервер, т.е. использует клиентскую библиотеку GDS32.dll 6.3.0.26074 из system32, то запрос отрабатывает как надо. А если рядом с приложением расположить embedded-версию GDS32.dll 2.5.0.26074 (переименованный fbembed.dll и прочие dll из архива), то запрос не отрабатывает на той же самой базе данных. Тип поля "a" DOUBLE PRECISION. IBExpert в значении поля показывает 7,89. Самое интересное, что если значение поля "а" равно 7.0 или 7.5, то запрос отрабатывает и в том и в другом случае.
Это бага или я что-то делаю не так?

Re: Firebird Embedded не срабатывает условие WHERE a = 7.8

Добавлено: 30 ноя 2010, 21:58
kdv
воспроизводимый пример дайте. табличку с парой записей, и т.п. Клиентская библиотека, вообще-то, на текст запроса не влияет. Так что скорее всего Вы две разные базы попутали.

Re: Firebird Embedded не срабатывает условие WHERE a = 7.8

Добавлено: 30 ноя 2010, 22:24
hvlad
Никогда
Нельзя
Сравнивать
double precision
Тем более на равенство

Re: Firebird Embedded не срабатывает условие WHERE a = 7.8

Добавлено: 01 дек 2010, 02:37
pawigor
Спасибо за отклики. Кажется использование DECIMAL(15,4) вместо DOUBLE PRECISION должно исправить ситуацию.

Re: Firebird Embedded не срабатывает условие WHERE a = 7.8

Добавлено: 01 дек 2010, 02:50
hvlad
pawigor писал(а):Кажется использование DECIMAL(15,4) вместо DOUBLE PRECISION должно исправить ситуацию.
Только в 3-ем диалекте