Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.17;
Скачать: CL | DM;

Вниз

поле 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 для явного преобразования в nvarchar
USE 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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.063 c
15-1156605051
yura32
2006-08-26 19:10
2006.09.17
DLL


11-1132642153
MTsv DN
2005-11-22 09:49
2006.09.17
Удержание кнопки мыши и кнопки...


2-1156508100
Arsenija
2006-08-25 16:15
2006.09.17
Выбор директории


1-1154447905
TStas
2006-08-01 19:58
2006.09.17
Можно ли как-то поубивать запущенные процессы Ворда и Экселя?


2-1156596558
angelika
2006-08-26 16:49
2006.09.17
горячие клавиши (ctrl+key)