Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
3 / 2 / 3
Регистрация: 11.08.2016
Сообщений: 90

Не обновляется колонка в DBGrid

08.08.2018, 18:06. Показов 1627. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, народ.
Подскажите пожалуйста.
Есть у меня dbgrid, вывожу туда из бд таблицу. И надо мне автоматом подгонять ширину столбцов по длине текста.
Вот есть такой код (находится в обработчике нажатия treeview) :

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    case 0:
    {
            zapros = "Select *from NB_for_light_tasks";
            ADOQuery1->Active=true;
            //Подсчет длинны
            int max,inp;
            ADOQuery1->First();
            for(int i=0; i<ADOQuery1->RecordCount; i++)
            {
                inp=ADOQuery1->FieldByName("Производитель")->AsString.Length();
                if(inp>max) max=inp;
                ADOQuery1->Next();
            }
            DBGrid1->Columns->Items[1]->Width=max;
            max=0; inp=0;
            break;
    }
Вообщем таким образом ширина колонки не меняется.
Но, заметил такую вещь:
Если после задания ширины колонки, вывести ShowMessage с любым содержимым, то ширина нормально задается, все работает.
Refresh() AdoQuery и DBGrid не помогает.
В чем может быть загвоздка?

Добавлено через 18 минут
Заметил сейчас, что если вместо max подставить просто число, то работает..
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.08.2018, 18:06
Ответы с готовыми решениями:

В БД обновляется вся колонка вместо одной записи
Пишу изменение в БД, потом обновляю саму БД: DataGridView1.Rows(mesh).Cells(0).Value = &quot;Удалить&quot; COMMAND.CommandText...

Не обновляется DBGrid
Почему то не обновляется DBGrid после добавления новых записей из отдельной формы Вот код var t:boolean; begin ...

DBGrid не обновляется
Ребят, чего-то не могу разобраться в чем может быть проблема. На второй форме создан DBGrid, в свойствах которого прописан DataSource (в...

5
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 3
08.08.2018, 18:30
Лучший ответ Сообщение было отмечено DriFT как решение

Решение

Доброго.
Не увидел где у вас идет сам запрос к БД.
Для того что бы нормально вычислялся max, необходимо задать ему начальное значение.
Не выводите в цикле по лимиту RecordCount. Драйвера по умолчанию принимают по 50 значений, просто очень часто запрос возращается очень быстро значения и если БД локально, то ошибок может и не быть. Но как только Вы начнете использовать удаленную БД, и запрос должен быть вернуть свыше 1000 строк, появятся проблемы.
1
3 / 2 / 3
Регистрация: 11.08.2016
Сообщений: 90
08.08.2018, 18:34  [ТС]
Запрос вынес через дефайн:
C++
1
#define zapros ADOQuery1->SQL->Text
Задал 0, все работает, спасибо огромное. Если не сложно, объясни пожалуйста, почему так.

А что тогда лучше использовать вместо RecordCount?
Спасибо.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 3
08.08.2018, 18:49
Цитата Сообщение от DriFT Посмотреть сообщение
#define zapros ADOQuery1->SQL->Text
Очень странный маневр, определять запрос через #define . Подозреваю, что это будет влиять на производительность в худшую сторону.


Цитата Сообщение от DriFT Посмотреть сообщение
Задал 0, все работает, спасибо огромное. Если не сложно, объясни пожалуйста, почему так.
Если Вы обявляете переменную типа int, и не задаете ей начальное значение. То программа ей обявит или максимальное значение, или подставит какое либо из памяти (при определеных условиях).

Цитата Сообщение от DriFT Посмотреть сообщение
А что тогда лучше использовать вместо RecordCount?
Просто это значение вычисляемое, в зависемости сколько строк пришло, представте, что Вам надо выбрать миллион строк, а БД находится на удаленом сервер....вот тут и начнутся проблемы.

Самое правильно поступить так
C++
1
2
3
4
5
6
7
        ADOQuery1->First();
        while (!ADOQuery1->Eof)
        {
                   inp=ADOQuery1->FieldByName("Производитель")->AsString.Length();
                    if(inp>max) max=inp;
                  ADOQuery1->Next();
        }

Но можно, к примеру получить сразу конечное значение через команду

C++
1
ADOQuery1->Last();
, тогда RecordCount, будет соответсвовать действительности. но это лишние "телодвижения" для выборки.
1
3 / 2 / 3
Регистрация: 11.08.2016
Сообщений: 90
08.08.2018, 19:46  [ТС]
Спасибо, за обьяснение. Думал что переменной автоматом выдается 0.
А если например таких запросов 30штук, все равно лучше их прописать, чем через define?
Цитата Сообщение от Dinkin Посмотреть сообщение
Очень странный маневр, определять запрос через #define . Подозреваю, что это будет влиять на производительность в худшую сторону.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 3
08.08.2018, 20:22
Да, луче каждый разделать запрос или отдельно функцию для этого написать.

Добавлено через 8 минут
Да и потом, пока у вас запрос на выборку, а если вставка или обновление, ....а что если захотите параметры передавать...у Вас будут сложности после.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.08.2018, 20:22
Помогаю со студенческими работами здесь

Не обновляется dbgrid после добавления или удаления записи
procedure TAddDealer.OKBtnClick(Sender: TObject); begin DataModule2.ADOdealers.Append; ...

Не обновляется DBGrid при внесении изменений в Adotable содержащий MasterSourse для таблиы, отображающейся на данной ВИGrid
Здравствуйте. Вопрос следующий: Есть СУБД недоделанная. Организация: TADOConnection --&gt;TADOTable--&gt;TDataSourse&lt;-&gt;DBGrid 2...

2 колонки, где 1 колонка 2 строки, и 2-я колонка 1 строка высотой первой колонки
вот есть такая табличка &lt;table border=&quot;1&quot;&gt; &lt;tr&gt; &lt;td rowspan=&quot;2&quot;&gt;big column&lt;/td&gt; ...

Часто на 8-ке не обновляется (или криво обновляется) индекс вида после
Часто на 8-ке не обновляется (или криво обновляется) индекс вида после рефреша дизайна. Такого в 6-ке не было точно. Сервак 8-ой криво...

Каждые 2 секунды формируется ответ с сервера и div обновляется. Как подвесить к нему событие, если он обновляется?
Посоветуйте, как поступить? Есть небольшой div, в котором выводится список файлов на сервере (ajax'ом каждые 2 секунды). Мне нужно...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru