powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пробелы в DBGrid
9 сообщений из 9, страница 1 из 1
Пробелы в DBGrid
    #32976167
StasX4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Когда то листал форум и находил ответы на этот вопрос, но т.к. это мне не нужно было, то и игнорировал это. А теперь найти не могу правильное решение данного вопроса.

При отображении через DBGrid(связь с MS SQL Server) данных с строковым типом, то отображаются нужные данные, но в конце добавляются пробелы... :( Как с этим можно бороться???

Заранее спасибо за ответ.
...
Рейтинг: 0 / 0
Пробелы в DBGrid
    #32976520
StasX4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел в чем грабли...

Заменил char на varchar, а в обработчике поставил:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
void __fastcall TForm1::DBGridEh1Columns0UpdateData(TObject *Sender,
      AnsiString &Text, Variant &Value, bool &UseText, bool &Handled)
{
if(UseText)
        {
        Text=Text.Trim();
        }
}

Скажимте, правильное ли решение???
...
Рейтинг: 0 / 0
Пробелы в DBGrid
    #32976750
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так, всё-таки, какой у Вас тип поля какой на серевре? Как получаете данные с сервера?
...
Рейтинг: 0 / 0
Пробелы в DBGrid
    #32976788
StasX4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отображаются данные в связки ADOConnection1, ADOTable1, DataSource1, DBGridEh1.

Тип поля на сервере был char(10), заменил его на varchar(10)...

А потом на поле первой колонки в DBGridEh1 повесил событие для того чтобы если пользователь сам вручную добавит пробелы в начале или конце строки, то их убираем программным путем через Trim.
...
Рейтинг: 0 / 0
Пробелы в DBGrid
    #32976815
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТип поля на сервере был char(10), заменил его на varchar(10)...
Поле char отличается от varchar тем, что всегда имеет фиксированную длину, а недостающие символы дополняются пробелами. После замены все значения, что были до этого в таблице, останутся такими же - с пробелами на конце. Варианты:
а) убрать ненужные пробелы, одноразовая операция:
Код: plaintext
1.
2.
update [table]
set field = rtrim(field)
from [table]
б) выбирать данные как
Код: plaintext
1.
select rtrim(field) as field
from [table]
в) обрезать пробелы на клиенте, что-то типа такого у Вас сейчас сделано.
Я бы рекомендовал первый варинт, т.к. он одноразовый, к тому же сокращает место под данными и убирает совершенно ненужный overhead для сервера во втором случае и клиента - в третьем.
...
Рейтинг: 0 / 0
Пробелы в DBGrid
    #32977133
StasX4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
@Гавриленко Сергей Алексеевич

У меня к вам вопрос.

1) При ваших вариантах тип поля какой установлен у вас? char или varchar?
2) Ваш вариант (а) где использовать?

Просто я предлагал заменить char на varchar и на клиенте или на серваке в тригере убирать пробелы. Думаю, что в идеале убирать пробелы на серваке в тригере. Но как в тригере это сделать, не подскажите?

Спасибо за ответ.
...
Рейтинг: 0 / 0
Пробелы в DBGrid
    #32979588
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не нужно никаких триггеров.

Вы определитесь, что Вам нужно, char'ы или varchar'ы. В основном, конечно, юзаются varchar'ы, но, если интересно, поищите поиском, особенно по форуму MSSQL, там поднималась несколько раз тема char vs varchar.

После этого отконвертите данные в выбранный Вами тип, и если Вы сменили тип с char'а на varchar(но никак не наоборот), то Вам придется одноразво (пункт а) обрезать незначащие пробелы, которые остались после char'а. И все, проблема исчерпана. Остальные два варианта я привел для полноты картины.
...
Рейтинг: 0 / 0
Пробелы в DBGrid
    #32979601
StasX4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понятно.

А что делать если после перевода char в varchar и через update все обрезал, то что делать если уже после этого всего пользователь в окне редактирования ввел сам пробелы? Они сами убираются серваком??? Я думаю, что нет. Вот поэтому я и предлагал их удалять(уже после конвертации и массовом удалении пробелов) на клиенте или на серваке...
...
Рейтинг: 0 / 0
Пробелы в DBGrid
    #32979638
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StasX4Понятно.

А что делать если после перевода char в varchar и через update все обрезал, то что делать если уже после этого всего пользователь в окне редактирования ввел сам пробелы? Они сами убираются серваком??? Я думаю, что нет. Вот поэтому я и предлагал их удалять(уже после конвертации и массовом удалении пробелов) на клиенте или на серваке...
Удалять можно на этапе вставки. Если, например, юзаете хп, это довольно просто. Можно удалять на этапе выборки - примеры я тоже приводил.
З.Ы. Почитайте BOL на предмет SET ANSI_PADDINGS
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пробелы в DBGrid
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]