Три причины, по которым Вам стоит перейти на новый IBProvider
Очень часто в своих программах мы забываем или ленимся контролировать данные, которые передаем в базу данных.
Мы верим, что умный сервер Firebird или InterBase сам решит возможные проблемы. Хотя конечно, это не его задача.
В особо запущенных случаях, данные, полученные после ввода пользователя,
сразу приводятся к нужному типу через CAST, без какой-либо проверки.
В результате: пользователь вводит «охинею», драйвер СУБД передает «охинею» на сервер, а сервер возвращает ошибку,
которую уже видит пользователь. Пользователи начинают Вас недолюбливать: «Его программы глючат, у него кривые руки»,
а вы ненавидите юзеров, которые не могут нормально ввести текст.
Угадайте Что подумает пользователь о Вас,
когда увидит такую ошибку на экране?
Что Сделать Чтобы Мои Программы Не «глючили»?
Используйте компоненты доступа к Firebird и InterBase, в которых реализован
контроль входящих данных и их «умное преобразование», в тот формат, который поддерживает сервер.
Это значительно сократит ваш объем работы по контролю вводимых данных и их приведению к типам БД.
К примеру, новая версия IBProvider самостоятельно производит «умное преобразование» текста в DBTYPE_R8 (DOUBLE). В частности:
Осуществляет контроль переполнения.
Гибкий алгоритм масштабирования, предотвращает проблемы, подобные CORE-2857.
Например:
dim cn
set cn = CreateObject("ADODB.Connection")
cn.Provider = "LCPI.IBProvider.3"
cn.Properties("Location") ="localhost:d:\database\employee.fdb"
cn.Properties("User ID") ="SYSDBA"
cn.Properties("Password") ="masterkey"
cn.Properties("auto_commit_ddl") = 1 'run DDL in separate trans
cn.Open
cn.BeginTrans
cn.Execute("RECREATE TABLE TBL_R8 (R8 DOUBLE PRECISION)")
dim cmd
set cmd=createobject("ADODB.Command")
cmd.ActiveConnection=cn
cmd.CommandText="insert into TBL_R8 VALUES (?)"
cmd.Parameters.Append cmd.CreateParameter(,8) 'adBSTR
wscript.echo "------------------------------------------"
cmd(0).value="1."&string(1024,"0")
wscript.echo "insert value to TBL_R8: "&cstr(cmd(0).value)
cmd.execute
' or very huge double
'cmd(0).value="1"&string(1000*1000,"0")&"E-1000000"
'wscript.echo "------------------------------------------"
'wscript.echo "value2: "&cstr(cmd(0).value)
'cmd.execute
cn.CommitTrans
call cn.close()
После выполнения скрипта на экране будет отображено значение входящего параметра, которое будет преобразовано в DOUBLE PRECISION и добавлено в БД:
------------------------------------------
insert value to TBL_R8: 1.0000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
Если вы работаете через новый IBProvider, запросы, подобные этому, НЕ выдадут ошибку: arithmetic exception, numeric overflow, or string truncation.
За 10 лет работы над проектом IBProvider мы НЕОДНОКРАТНО
сталкивались с подобными ПРОБЛЕМАМИ
Недавний случай с преобразованием текста в тип DOUBLE далеко не единственный. За 10 лет разработки IBProvider мы НЕОДНОКРАТНО сталкивались с подобными ПРОБЛЕМАМИ:
Проблемами с точностью при конвертировании DOUBLE;
Проблемами в работе с NUMERIC типами;
Неподдерживаемые типы (GUID, BOOL, MS SQL TIME и т.д.);
И еще множество других проблем, благодаря которым появился «умный конвертор типов»;
Как Решаются Проблемы с Преобразованием Типов?
В IBProvider реализован собственный «умный конвертор типов», который:
Совместим со всеми версиями Windows, т.к. использует собственные функции преобразования типов, минуя WinAPI.
В большинстве случаев не требует явного приведения типов к типу БД, т.к.
поддерживает преобразование на лету простых типов, типа VARIANT, массивов и бинарных данных.
Эмулирует отсутствующие в Firebird типы BOOL и GUID.
Вам больше не нужно писать свои перекодировщики текста.
Конвертор типов обладает уникальным в своем роде механизмом, поддерживающим текстовые преобразования
49 кодовых страниц на лету, включая UNICODE, UTF-8, OCTETS, NONE.
Как убедиться что Ваш компонент доступа работает ПРАВИЛЬНО?
Не достаточно реализовать отличную возможность в коде программы, необходимо убедиться в том, что написанное,
будет работать БЕЗ ОШИБОК в самых непредсказуемых ситуациях. Особенно это актуально для сложных программ, таких как компоненты доступа к базам данных.
Единственный способ проверить правильность работы — это использовать автоматические системы тестирования. В противном случае вам гарантированы:
Утечки памяти;
Критические завершения работы приложений;
Непостоянные сообщения об ошибках, которые невозможно отладить;
На сегодняшний день каждый(!) новый релиз IBProvider прогоняется примерно через полмиллиона автоматических тестов!
За 2009 год Команда IBProvider выпустила 12 новых версий и уже 3 версии в 2010 году
Во всех релизах О-П-Е-Р-А-Т-И-В-Н-О (оперативно) внедрялся новый функционал, и решались известные проблемы.
Мы не берем деньги, за то, что новые версии не выходят!
Приобретая IBProvider прямо сейчас, вы гарантировано получаете бесплатные обновления в течение 1 года.
Хотите убедиться в том, что вы получаете не сырые сборки, а полноценные релизы?