Форум: "Прочее";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
Внизполе char c пробелами.... Найти похожие ветки
← →
memo (2006-08-29 12:08) [0]Привет всем.
У меня проблема!!!
Есть база данных на MsSql.
Подключаюсь через ADO(если подключаться через BDE такой проблемы нет).
В таблице есть поле типа char. если выводить его в Dbgrid, то строка после данных заполняется пробелами и для того чтоб добавить данные необходимо сначала удалить эти пробелы в конце строки. ltrim, rtrim в запросе не помогают...
Если поле типа nvarchar, то такого не наблюдается...
← →
Карелин Артем © (2006-08-29 12:11) [1]кастуй в nvarchar
← →
memo (2006-08-29 12:12) [2]переделывать очень много!!!
Много таблиц, и в каждой много вот таких полей...
← →
Карелин Артем © (2006-08-29 12:14) [3]Да в запросе кастуй
← →
memo (2006-08-29 12:17) [4]В запросе ...
пожалуйста пример:
select LTRIM(RTRIM(поле)) from tables
тот же результат...
← →
Карелин Артем © (2006-08-29 12:23) [5]
> memo (29.08.06 12:17) [4]
Ты не понимаешь, что я написал. Пользуй Cast и Convert для явного преобразования в nvarcharUSE AdventureWorks;
GO
SELECT "The list price is " + CAST(ListPrice AS varchar(12)) AS ListPrice
FROM Production.Product
WHERE ListPrice BETWEEN 350.00 AND 400.00;
GO
← →
wicked © (2006-08-29 12:24) [6]поля типа char всегда добиваются пробелами до полной длины.
лечить - либо кастовать в запросе до varchar/nvarchar, либо alter table - на varchar/nvarchar же...
пример:
select cast(поле as varchar(255)) from tables
← →
memo (2006-08-29 12:54) [7]я понял...
Нопочемуто select cast(поле as varchar(255)) from tables не получается, всё остаётся также:(
← →
Карелин Артем © (2006-08-29 12:57) [8]
> memo (29.08.06 12:54) [7]
А ты про *TRIM забыл ;)
После каста
← →
memo (2006-08-29 12:58) [9]пробовал:
select CAST(ltrim(rtrim(field)) AS varchar(250)) AS name from tables
пробелы обрезаются, но тогда поле не редактируется
← →
Карелин Артем © (2006-08-29 13:01) [10]В программе сделай обработчик для события OnGetText у поля и там делай TRIM
← →
Sergey13 © (2006-08-29 13:03) [11]2 memo
Старика Хоттабыча ищешь? Он тут не тусуется.
← →
Плохиш © (2006-08-29 13:17) [12]
> Sergey13 © (29.08.06 13:03) [11]
> 2 memo
> Старика Хоттабыча ищешь? Он тут не тусуется.
Да нет, скорее всего, это крютые начинающие проектировали базу, а документацию читают одни ламеры, поэтому напихали полей с типом char, а теперь удивлются, что они работают так как описано в документации к используемой базе данных и пытаются вырвать гланды через ж...
← →
Sergey13 © (2006-08-29 13:21) [13]> [12] Плохиш © (29.08.06 13:17)
Да кто базу рисовал понятно, и что делать надо вроде то-же. Но
> [2] memo (29.08.06 12:12)
> переделывать очень много!!!
> Много таблиц, и в каждой много вот таких полей...
Я и подумал - Хоттабыча исчють.
← →
memo (2006-08-29 13:26) [14]Базу делали ещё до меня, а мне вот теперь приходится работать...
Там до хр...на таких полей, переделывать не охота...
← →
Карелин Артем © (2006-08-29 13:28) [15]
> memo (29.08.06 13:26) [14]
Делаешь 1 универсальный обработчик. Как грузится форма, берешь все наборы данных. У каждого текстового поля назначаешь этот обработчик в run time
← →
ANB © (2006-08-29 13:50) [16]
> memo (29.08.06 13:26) [14]
Вариант номер 2 :
Пишешь скрипт, который сканирует список таблиц и меняет тип все полей CHAR на VARCHAR. После этого все должно работать :)
← →
Sergey13 © (2006-08-29 13:53) [17]> [16] ANB © (29.08.06 13:50)
Да не охота ему. Может ты Хоттабычем будешь? 8-)
← →
memo (2006-08-29 13:55) [18]я менять уже пробовал, не в этом проблема...
если я меняю везде на varchar, у меня прога перестаёт правильно работать, надо ещё разбираться почему...
← →
ANB © (2006-08-29 13:56) [19]
> если я меняю везде на varchar, у меня прога перестаёт правильно
> работать,
А чего вываливать начинает ?
Чудес не бывает.
← →
memo (2006-08-29 13:58) [20]нет, не вываливает, всё молча делает, но не правильно...
← →
ANB © (2006-08-29 14:03) [21]А что неправильно делает ? Кстати, после замены типа поля на varchar его еще и затримить по идее надо.
← →
memo (2006-08-29 14:11) [22]я лучше в базе update table set field=(ltrim(rtrim(field))
мне кажется так попроще будет...
← →
memo (2006-08-29 14:13) [23]программа печатает счета-фактуры, так вот они печатаются без данных...
← →
ANB © (2006-08-29 14:14) [24]
> memo (29.08.06 14:13) [23]
Значит какой то придурок сделал связку по char полю. Проверь мое предположение.
← →
memo (2006-08-29 14:16) [25]это запросто...
← →
ANB © (2006-08-29 14:20) [26]
> я лучше в базе update table set field=(ltrim(rtrim(field))
>
> мне кажется так попроще будет...
Не, не будет. char поле обратно пробелы допишет при покладке в базу.
← →
memo (2006-08-29 14:24) [27]я имел ввиду, что если я поменяю char на varchar в таблице , то пробелы останутся и их уже придётся убирать update...
← →
ANB © (2006-08-29 14:35) [28]А сколько таблиц программой задействовано и есть ли исходники ?
← →
memo (2006-08-29 14:48) [29]использовано 5 таблиц.
Исходники есть
← →
ANB © (2006-08-29 15:01) [30]
>
> memo (29.08.06 14:48) [29]
Ну так переделай все по-человечески. Там не сильно много - только связки поменять.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.036 c