Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Вставка пустых строк в DBGrid обрабатывая выборку


Автор: Darked 14.1.2009, 16:14
     Всем доброго времени суток.

  Суть в чём: я делаю запрос к базе, получаю список (лог) с фамилиями, которые могу повторяться, список сортирую по этим самым фамилиям. Список выводился в DBGrid автоматом. Всё бы хорошо, но начальство захотело, чтобы между фамилиями шла пустая строка... тут - то вот и не получается. Попытался забивать полученные записи вручную в DBGrid:
Код

while not(adoQry.Eof)do
  begin

    dbgStatSKD.Columns[0].Field.Text := adoQry.FieldByName('ID_TRAN').AsAnsiString;
    dbgStatSKD.Columns[1].Field.Text := adoQry.FieldByName('TranDateTime').AsAnsiString;
    dbgStatSKD.Columns[2].Field.Text := adoQry.FieldByName('TranDesc').AsAnsiString;
    dbgStatSKD.Columns[3].Field.Text := adoQry.FieldByName('TranArea').AsAnsiString;
    dbgStatSKD.Columns[4].Field.Text := adoQry.FieldByName('TranUser').AsAnsiString;
    dbgStatSKD.Columns[5].Field.Text := adoQry.FieldByName('Param2').AsAnsiString;

    adoQry.Next;
  end;

  вываливаюсь с exception - 
Цитата
Acces violation at address ...


  Как можно такое реализовать и можно ли? Интересует именно вывод в DBGrid, а не StringGrid и т.д....

Автор: Данкинг 14.1.2009, 18:03
Цитата(Darked @  14.1.2009,  16:14 Найти цитируемый пост)
dbgStatSKD

Это что - название DbGrid'а ? А зачем вообще его таким "странным" способом заполнять? 

Автор: Akella 14.1.2009, 18:31
выводи через хранимку, там можно с помощью suspend выводить пустые строки

Автор: Darked 14.1.2009, 20:29
Akella, можно поподробнее?

Автор: Akella 14.1.2009, 21:59
создаём хранимую процедуру
Код

CREATE OR ALTER PROCEDURE NEW_PROCEDURE 
RETURNS (
    ID INTEGER,
    NAME CHAR(100))
AS
begin
  for select id, name from razdel INTO :ID, :NAME DO BEGIN
    suspend;--выводим результат
    id = null;
    name = null;
    suspend;--выводим пустую строку
  end
end


Выбираем данные
Код

select * from NEW_PROCEDURE


Результат
user posted image

Автор: Deniz 15.1.2009, 06:34
Darked, СУБД-то какая?
Можно так же DBGrid прицепить к ClientDataSet а его заполнить руками из adoQry

Автор: Darked 15.1.2009, 07:03
Deniz, база MS SQL Server 2005.
  У меня в принципе так и скреплено, если я тебя правильно понял, DBGrid -> DataSource -> ADOQuery


Akella,  спасибо!!! Пока идёт как претендент номер один на риализацию.

Автор: Deniz 15.1.2009, 07:44
Цитата(Darked @  15.1.2009,  10:03 Найти цитируемый пост)
У меня в принципе так и скреплено, если я тебя правильно понял, DBGrid -> DataSource -> ADOQuery
нет, не правильно.
Связь должна быть DBGrid -> DataSource -> ClientDataSet и процедура (на клиенте) по заполнению ClientDataSet из ADOQuery.
Если будешь реализовывать через хранимую процедуру, то придется использовать курсоры + временную таблицу и ее заполнять примерно так, как показал Akella.

Автор: Akella 15.1.2009, 09:24
Цитата(Deniz @  15.1.2009,  07:44 Найти цитируемый пост)
Связь должна быть DBGrid -> DataSource -> ClientDataSet и процедура (на клиенте) по заполнению ClientDataSet из ADOQuery.

А что, в MS SQL нет подобия suspend`а?


Цитата(Darked @  15.1.2009,  07:03 Найти цитируемый пост)
база MS SQL Server 2005.

а сразу сообщать религия не позволяет?

Автор: Deniz 15.1.2009, 10:33
Цитата(Akella @  15.1.2009,  12:24 Найти цитируемый пост)
А что, в MS SQL нет подобия suspend`а?
нет  smile 

Автор: Darked 15.1.2009, 11:59
Цитата(Akella @  15.1.2009,  09:24 Найти цитируемый пост)
а сразу сообщать религия не позволяет? 

  Изаиняюсь, ка к- то не подумал, сосредоточился на DBGride? так ка кменя больше интересовал клиентский вариант решений через ручную правку грида, а не на сервере.
 
  А так, вообще, подумал, посмотрел... решил что проще мне на StringGrid перейти, чем заморачиваться с DBGrid, получается как - то кривовасто с дбгридом, поэтому чуть - чуть изменю архетектуру и перейду на StringGrid, скорее всего.
  
   Всем большое спасибо за помощь!!!!!

Автор: Deniz 15.1.2009, 13:10
Цитата(Darked @  15.1.2009,  14:59 Найти цитируемый пост)
поэтому чуть - чуть изменю архетектуру и перейду на StringGrid, скорее всего.
не советую.

Автор: Darked 15.1.2009, 14:49
Deniz, почему? Мне информация нужно чисто для вывода, менять данные я не буду.

Автор: Zloxa 15.1.2009, 14:57
Цитата(Darked @  14.1.2009,  16:14 Найти цитируемый пост)
начальство захотело, чтобы между фамилиями шла пустая строка

А что начальство хочет делать с этой пустой строкой? И зачем, собственно, она(пустая строка) ему нужна?

Может быть нужно просто увеличить вдвое высоту строки? 
Может ко всему еще и взять да отрисовать ячейку грида аля какбы две ячейки?

Автор: Darked 15.1.2009, 15:38
Zloxa, пустая строка для отделения фамилий в списке, типа:
  • Иванов
  • Иванов
  • Иванов
  • Сидоров
  • Петров
  • Петров

Автор: Deniz 15.1.2009, 15:49
Darked, возьми нормальный DBGrid (http://www.devexpress.com/Downloads/VCL/ExQuantumGrid/), который умеет группировать записи (так же фильтры, суммы, сортировка и т.д.) и научи начальника им(DBGrid'ом) пользоваться.

Автор: Akella 15.1.2009, 21:22
Цитата(Darked @  15.1.2009,  15:38 Найти цитируемый пост)
пустая строка для отделения фамилий в списке, типа:

это называется группировка

Deniz, согласен с тобой. Да что там учить... чему? Перетягивать мышкой поле?

Можно поставить на панели КНОПКУ и назвать Группирование по Фамилии.





Deniz, через пару десятков сообщений может ещё что интересное у него выпытаем  smile

Добавлено через 1 минуту и 54 секунды
Вот пример:
user posted image

Автор: Darked 16.1.2009, 06:30
   
Deniz, Akella, спасибо за советы, учту.  smile Только тут группировка не совсем подходит, в том виде, в котором вы предложили.
   Вот, очередная порция деталей  smile  - Я вывожу такой список (по столбцам): время, описание, место, сотрудник. Уодного сотрудника может быть несколько времён, поэтому для наглядности начальник и захотел чтобы при выводе между фамилиями была пустая строка.

   Сделал на StringGrid'е и вроде как работает )

Автор: Akella 16.1.2009, 13:21
Darked, ну покажи ж тогда снимки экранов. smile 

Автор: LSD 16.1.2009, 14:08
Модератор: надоели вы мне со своим DBGrid-ом. Идите вы в Delphi  smile 

Автор: Akella 17.1.2009, 01:00
грубо

Автор: Darked 20.1.2009, 12:18
Akella, вот пример:

 user posted image

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)