Trim записей в БД
Trim записей в БД
Добрый день!
Подскажите пожалуйста,
Существует ХП которая вызывает хранимую udf и передает ей данные для обработки, после чего записывает результат в одно из полей БД полученные данные (тип поля - varchar), соответственно пробелы отбрасываются. Но при чтении из этого поля и вывода в DbGridEh результат запроса возвращает строку дополненную пробелами до длины поля в таблице, как с этим бороться?
Подскажите пожалуйста,
Существует ХП которая вызывает хранимую udf и передает ей данные для обработки, после чего записывает результат в одно из полей БД полученные данные (тип поля - varchar), соответственно пробелы отбрасываются. Но при чтении из этого поля и вывода в DbGridEh результат запроса возвращает строку дополненную пробелами до длины поля в таблице, как с этим бороться?
Re: Trim записей в БД
в IB Expert результат этого запроса тоже с пробелами?qvd писал(а):Добрый день!
Но при чтении из этого поля и вывода в DbGridEh результат запроса возвращает строку дополненную пробелами до длины поля в таблице, как с этим бороться?
в используемых в программе компонентах никая опция по добавлению пробелов не выставлена?
У меня на FB 1.5 запрос вида
возвращал 'DATA[шесть пробелов]1'. Приходилось RTRIM юзать. Возвращать 'DATA1' стал только на FB 2.0...
Код: Выделить всё
SELECT
VARCHAR_10_FIELD || '1"
FROM
SOMETABLE
Udf возвращает CString, все промежуточные значения - varchar.
Немного уточню вопрос:
записи в таблице - зашифрованы
для доступа к данным использую TIbDataSet
в нем запросы вида:
DeCrypt это:
Все поля не проходящие функцию DeCrypt не имеют лишних пробелов, а прошедшие - дополнены пробелами до 50 знаков.
В самой БД - лишних пробелов нет, их добавление происходит во время запроса. Как этого избежать? Или прийдется обрабатывать момент вставки данных в грид и делать trim?
Немного уточню вопрос:
записи в таблице - зашифрованы
для доступа к данным использую TIbDataSet
в нем запросы вида:
Код: Выделить всё
Select
ID,
DeCrypt(CD) as CD,
PRIMECHANIYE,
WORKDATE,
.......
from MAIN
Код: Выделить всё
DECLARE EXTERNAL FUNCTION DECRYPT
CSTRING(250)
RETURNS CSTRING(50) FREE_IT
ENTRY_POINT 'DeCrypt_' MODULE_NAME 'crypt.dll'
В самой БД - лишних пробелов нет, их добавление происходит во время запроса. Как этого избежать? Или прийдется обрабатывать момент вставки данных в грид и делать trim?
не надо. никогда такого не было. Любая версия IB/FB вернетCyberMax писал(а):возвращал 'DATA[шесть пробелов]1'. Приходилось RTRIM юзать. Возвращать 'DATA1' стал только на FB 2.0...
varchar||'1' как 'значениестолбца1'.
если varchar когда то был char, или там действительно при записи значения были помещены пробелы - тогда да. В общем, если у варчара нет в конце пробелов, то при конкатенации их и не будет. и не должно быть на клиентской стороне. Если только в клиенте у столбца не установлено добивать строку пробелами.
это ты сам и делаешь. или где-то преобразуешь в char.qvd писал(а):Все поля не проходящие функцию DeCrypt не имеют лишних пробелов, а прошедшие - дополнены пробелами до 50 знаков.
Нет, оказалось что функции тут ни при чем, переделал запрос с
на
заработало ...
Код: Выделить всё
Select
ID,
DeCrypt(CD) as CD,
PRIMECHANIYE,
WORKDATE,
.......
from MAIN
Код: Выделить всё
Select
ID,
cast(DeCrypt(CD) as varchar(50)) as CD,
PRIMECHANIYE,
WORKDATE,
.......
from MAIN