Поддержка новых типов данных

Обсуждение MAV Direct ODBC

Модератор: Andrew™

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Поддержка новых типов данных

Сообщение Andrew™ »

применительно к MSSQL серверу 2005 реализована поддержка VARCHAR(MAX) и VARBINARY(MAX)
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Re: Поддержка новых типов данных

Сообщение Andrew™ »

юникодовские типы данных сейчас автоматически преобразуются на клиенте в обычные строки, но бывают случаи когда кодовая страница клиента и сервера не совпадает и необходимо самому делать преобразования юникода в строку и обратно, для этих целей были придуманы типа программных триггеров для полей, в словаре в Field user option две новых опции:

FGET ИмяПроцедурыВПрограмме (после чтения)

прототип процедуры:

MAVGETFUNCTION(LONG pField,LONG pValue,MAVString rezult),TYPE

pField - адрес поля образца (из DCT)
pValue - полученное значение поля при чтении
rezult - если не хотим менять полученное значение - ничего не делаем, иначе инициализируем нужным значением

FPUT ИмяПроцедурыВПрограмме (перед записью)

прототип процедуры:

MAVPUTFUNCTION(LONG pField,LONG pValue,MAVString rezult),TYPE

pField - адрес поля образца (из DCT)
pValue - значение поля перед записью
rezult - если не хотим менять значение - ничего не делаем, иначе инициализируем нужным значением

если в БД есть NCHAR и NVARCHAR поля и требуется ручная перекрутка, или хотца юзать чистый юникод, то необходимо для таких полей регистрить в DCT соответсвующие процедуры

так же эти процедуры можно использовать как программные триггера на поля которые будут автоматом вызываться после чтения и перед записью в БД

одну и туже функцию можно регестрить для нескольких полей, потому и имеет место первый параметр

делаем
CASE pField
OF MAVADDRESS(File:DateTimeField)
...
END
Ответить