Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с DBGrid

68K
27 февраля 2011 года
Lifeplayer
3 / / 27.02.2011
Здравствуйте, у меня сложилась такая проблема.
Загружаю в DBGrid таблицу excel, нужно провести с этой таблицей некоторую обработку, а именно:
таблица слишком большая, в ней заполнены некоторые строки и столбцы, но не все. Каждый месяц содержание таблицы меняется, то есть одна и та же строка может быть в данном месяце пустой, в след - заполненной.
Не могу сделать универсальный обработчик таблицы, по скрытию незаполненных колонок и строк. Не могли бы вы помочь мне с этим?
6
27 февраля 2011 года
George
4.1K / / 05.01.2007
Каким образом загружаете Вы экселевский файл в ДБГрид? Используйте подключение к файлу как к БД, и делайте выборку с помощью SQL запроса, отсеивая в нем ненужные строки (в частности пустые).
68K
27 февраля 2011 года
Lifeplayer
3 / / 27.02.2011
AdoConnection, AdoQuery, DataSource
загрузка таблицы стоит на кнопку, и после появления таблицы хотелось бы сразу получить ее отфильтрованный вариант. Дело в том, что насколько я помню, в sql запросе идет привязка к названиям колонок, а таблица с колонками может меняться каждый месяц, то есть нужен какой-то универсальный оработчик. Пыталась сделать по колонкам, но не сработало, видимо перемудрила.)) Могу показать код)
var i,k:integer;
begin
i:=1;
while i<dbgrid1.Columns.Count do begin
adoquery1.First;
k:=1;
while not adoquery1.Eof do begin
if dbgrid1.Fields.Value='' then begin
k:=k+1;
adoquery1.Next;
end else adoquery1.Next;
end;
if k=adoquery1.RecordCount then
dbgrid1.Columns.Visible:=false;
i:=i+1;
end;
8
01 марта 2011 года
mfender
3.5K / / 15.06.2005
У ADODataSet есть ещё Filter и Sort.
Впрочем, это не важно. Имена полей всё равно знать придётся.
10
01 марта 2011 года
Freeman
3.2K / / 06.03.2004
Сокрытие пустых колонок, вешаем на обработчик AfterOpen:
Код:
procedure TForm1.ADODataSet1AfterOpen(DataSet: TDataSet);
var
  L: TList;
  I: Integer;
begin
  DataSet.DisableControls;
  try
    L := TList.Create;
    try
      DataSet.GetFieldList(L);
      while not DataSet.EOF do
      begin
        for I := L.Count - 1 downto 0 do
          if not TField(L).IsNull then
            L.Delete(I);
        if L.Count = 0 then
          Break;
        DataSet.Next;
      end;
      for I := 0 to L.Count - 1 do
        TField(L).Visible := False;
    finally
      L.Free;
    end;
  finally
    DataSet.First;
    DataSet.EnableControls;
  end;
end;

Не тестировал.
68K
04 марта 2011 года
Lifeplayer
3 / / 27.02.2011
Спасибо! Но хотелось бы уточнить, у GetFieldList какие должны быть параметры?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог