![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отображение длинных текстов в DBGrid [D7, MSSQL]
s_t_d © (2006-06-15 10:37:00)Уважаемые мастера, пожалуйста посоветуйте, как быть.
База MS SQL (получена из вне). Одно поле в некоторой таблице объявлено varchar 600. При отображении в DBGrid значения не показываются, а в ячейках стоит "MEMO". С полями меньшей длины, например varchar 50, такого не происходит и в DBGrid все отображается нормально. Что почитать, куду "бежать"?
MsGuns (2006-06-15 17:27:00) [1]Я делаю так:
Для "длинных" колонок есть фича "Открыть окно просмотра" (через экшн, повешенный на пункт пупапменю грида или кнопку панели управления - экшн подымается или опускается в зависимости от тэга TField.Tag, выставленный в 1 в дизайне для "широких" полей). Если юзер ее кликает, то создается форма окно с единственным объектом в нем - TMemo Align := alClient. Форма создается как fsStayOnTop, т.е. она все время наверху и можно ее как переместить в удобное место экрана (например, чтобы открыть интересующую часть грида), так и изменить размеры до удобных. В тэг соответствующей колонки грида записываю указатель на форму. Если юзер форму-мемо прикрывает, то тэг обнуляется.
По событиям датасета AfterScroll/Open делается в цикле просмотр тэгов всех колонок грида и если тэг содержит указатель на форму, в находящейся на ней единственный TControl (то самое мемо) записываю содержимое поля, на которое ссылается колонка грида.
Результат таков: грид "листается" и синхронно с ним меняются данные в формах-полях, кол-во которых зависит от числа "широких" полей и желания пользователя.
Desdechado (2006-06-15 11:02:00) [2]> я исп. Query и следовательно результирующий набор данных там.
> Как же в этой связке исп. предложенный Вами Мемо-контрол?
DBMemo знаешь?
Sergey13 (2006-06-15 10:57:00) [3]2[5] s_t_d (15.06.06 10:56)
Если так, то делай вариант "по быстрому". 8-)
s_t_d (2006-06-15 10:56:00) [4][3] Менять размерность затруднительно - база не наша, а поступает из вне.
Что характерно, ни одной записи более 100 символов там нет.
Sergey13 (2006-06-15 10:55:00) [5]2[2] s_t_d (15.06.06 10:46)
Если делать по умному, то в запросе надо запрашивать (помимо остальных нужных) только урезанное поле (как - не знаю для МССКЛ), а все поле вытаскивать по отдельному запросу юзера (типа трафик экономим).
Если делать по быстрому, то можно запросить сразу все поля. Добавить вычисляемое поле на подстроку длинного. Его в грид, само поле в Мемо-контрол.
Ega23 (2006-06-15 10:52:00) [6]
> Уважаемые мастера, пожалуйста посоветуйте, как быть.
> База MS SQL (получена из вне). Одно поле в некоторой таблице
> объявлено varchar 600. При отображении в DBGrid значения
> не показываются, а в ячейках стоит "MEMO". С полями меньшей
> длины, например varchar 50, такого не происходит и в DBGrid
> все отображается нормально. Что почитать, куду "бежать"?
>
Всё, что больше varchar(255) воспринимается как BLOB. Поэтому или меняй размерность поля, или - Sergey13 © (15.06.06 10:39) [1]
s_t_d (2006-06-15 10:46:00) [7][1] Спасибо, но ведь для формирования запроса я исп. Query и следовательно результирующий набор данных там. Как же в этой связке исп. предложенный Вами Мемо-контрол? Или я чего-то не понимаю?
Пожалуйста проясните, если не трудно.
Sergey13 (2006-06-15 10:39:00) [8]Поставь рядом с гридом Мемо-контрол и читай там. В гридину можно впихнуть урезанное до разумных пределов поле.