Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi и базы данных
Войти
Регистрация
Восстановить пароль
 
Kykysik12
2 / 2 / 0
Регистрация: 19.11.2013
Сообщений: 56
#1

Удаление лишних пробелов в DBGrid - Delphi БД

27.12.2013, 08:46. Просмотров 849. Ответов 11
Метки нет (Все метки)

Добрый день! Столкнулась с такой проблемой: при выводе данных из MS SQL в таблицу DBGrid ширина столбцов зависит от того, сколько символов я выделяю под запись для определённого столбца. Если тип данных в столбце, например, nchar(10), то ещё нормально, но вот если тип данных для столбца - nchar(150), столбец получается очень широкий, из-за чего вся таблица не влезает на экран. Как сделать так, чтобы ширина столбца была равна количеству информации в нём, а не количеству максимально допустимого размера записи? Кто сталкивался с подобной проблемой, подскажите, пожалуйста!

Заранее спасибо!
http://www.cyberforum.ru/delphi-database/thread1942864.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2013, 08:46
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Удаление лишних пробелов в DBGrid (Delphi БД):

Удаление записи из БД DBGrid
ребята, нужно удалить запись из бд с помощью DBGrid. У меня постоянно...

Удаление записей в DBGrid
Необходимо удалить из двух разных таблиц информацию об одном читателе, Но...

Удаление строки из Dbgrid, SQL
Всем доброго времени суток! Помогите пожалуйста кто может. Создал базу данных в...

Удаление всех строк с dbGrid
Привет, ребята! Подскажите как удалить одним щелчком button все ранее...

Удаление пустой строки в DBGrid
Здравствуйте, эксперты! Подскажите, пожалуйста, как поступить в следующей...

11
Waddonator
962 / 638 / 96
Регистрация: 01.11.2012
Сообщений: 1,447
27.12.2013, 11:20 #2
Kykysik12, в свойстве Columns компонента DBGrid у каждого столбца можно выставить ширину. Если в списке нет ни одного столбца, то в контекстном меню выберите пункт "Add All Fields" и они появятся.
0
Kykysik12
2 / 2 / 0
Регистрация: 19.11.2013
Сообщений: 56
27.12.2013, 11:25  [ТС] #3
Цитата Сообщение от Waddonator Посмотреть сообщение
Kykysik12, Если в списке нет ни одного столбца, то в контекстном меню выберите пункт "Add All Fields" и они появятся.
Add All Fields неактивно, видимо потому, что столбцы я вывожу через SELECT, используя ADOQuery...
Я задала вручную ширину столбцов в formCreate, используя
Delphi
1
DBGrid1.DataSource.DataSet.Fields[i].DisplayWidth:=Length(dbgrid1.Fields[i].DisplayName+n);
но это немного не то... Лишние символы (пустота после значений) всё равно остаются, и из-за них выравнивание значений по центру происходит очень криво, часть текста уходит за левые пределы столбца
0
Waddonator
962 / 638 / 96
Регистрация: 01.11.2012
Сообщений: 1,447
27.12.2013, 11:28 #4
Kykysik12, в процессе работы программы Вы меняете поля внутри самого ADOQuery или на протяжении всей работы они постоянны?
0
Kykysik12
2 / 2 / 0
Регистрация: 19.11.2013
Сообщений: 56
27.12.2013, 11:30  [ТС] #5
Waddonator, на протяжении работы в программе они постоянны и не меняются, но значения могут меняться в базе, из которой выводятся
0
Waddonator
962 / 638 / 96
Регистрация: 01.11.2012
Сообщений: 1,447
27.12.2013, 11:33 #6
Kykysik12, я имел ввиду количество и названия. Тогда в самом ADOQuery в свойстве SQL пропишите текст запроса и Active поставьте в true: Add All Fields станет активной.

Либо потом в самом коде выставьте ширину каждого поля DBGrid'а. Например:
Delphi
1
DBGrid1.Columns[0].Width:=100;
0
MaximFegorsk
32 / 53 / 9
Регистрация: 05.12.2013
Сообщений: 254
27.12.2013, 11:35 #7
Дело в том, что тип nchar(10) хранит 10 символов в любом случае. Если запись будет короче 10 символов, она будет дополнена пробелами. Тут два варианта либо тип nchar(10) заменить на varchar(10). Или же в конструкции SELECT нужно применить RTrim.
0
Kykysik12
2 / 2 / 0
Регистрация: 19.11.2013
Сообщений: 56
27.12.2013, 11:36  [ТС] #8
Maxim*******, varchar(10) не добавляет значение пробелами?
0
MaximFegorsk
32 / 53 / 9
Регистрация: 05.12.2013
Сообщений: 254
27.12.2013, 11:43 #9
Нет. Но те записи, которые уже внесены в базу, останутся с пробелами. Их нужно будет подчистить(убрать пробелы). Если лень - используй Rtrim.
1
Kykysik12
2 / 2 / 0
Регистрация: 19.11.2013
Сообщений: 56
27.12.2013, 11:44  [ТС] #10
Maxim*******, Спасибо огромное, учту))
0
Аватар
298 / 219 / 8
Регистрация: 31.05.2012
Сообщений: 520
27.12.2013, 22:55 #11
На этот случай можно держать ini-файл с ширинами полей. Дать возможность пользователю менять ширину колонок, при выходе из проги сохранять их размеры, при входе восстанавливать. Есть и куча сторонних компонет-фотоаппаратов как раз для таких целей
0
Kykysik12
2 / 2 / 0
Регистрация: 19.11.2013
Сообщений: 56
27.12.2013, 23:04  [ТС] #12
Аватар, ширину я и так задавала вручную, проблема была в лишних пробелах, создаваемых базой, из-за которых, при выравнивании значений по центру, всё в таблице было криво, и часть данных уходило за пределы столбца влево. Эту проблему я уже решила, благодаря Maxim*******, но я всё равно благодарна Вам за беспокойство и желание помочь
0
27.12.2013, 23:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2013, 23:04
Привет! Вот еще темы с решениями:

Удаление записи по нажатию на строку DbGrid
Здравствуйте,нужна помощь с Delphi.Нужно сделать удаление записи по нажатию на...

Организовать поиск с последующим изменением и удаление в DBGrid
Имеется DBGrid к нему подключена AdoTable,DBNavigator, то есть с их помощью...

Как сделать добавление/редактирование/удаление записи в dbgrid?
подскажите, пожалуйста, как сделать добавление/редактирование/удаление записи в...

Работа с DBGrid и ADOQuery. Создать новую запись, сортировка и удаление
Доброго времени суток. Прошу сильно не ругаться, что есть еще похожие темы, но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru