Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.09.2012, 11:57
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию Поле (MEMO) в AdoTable

В таблице есть поле, которое связано с другой таблицей (один ко многим). Так в этом поле отображается (MEMO), вместо идентификаторов полей в другой таблице. Так и должно быть? )

http://s54.radikal.ru/i145/1209/6b/bd624af32b7f.jpg
Ответить с цитированием
  #2  
Старый 16.09.2012, 12:14
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от ART
В таблице есть поле, которое связано с другой таблицей (один ко многим). Так в этом поле отображается (MEMO), вместо идентификаторов полей в другой таблице. Так и должно быть? )

http://s54.radikal.ru/i145/1209/6b/bd624af32b7f.jpg
Да, так и должно быть, так как стандартный DBGrid не умеет отображать многострочный текст в ячейке.
Подключи к этому полю компонент TDBMemo - он умеет работать с многострочным текстом.
Если необходимо, чтобы именно в ячейке DBGrid отображался текст, то можно на обработчик события OnGetText этого поля прицепить такой обработчик:
Код:
procedure TForm1.ADOQuery1_OnGetText(Sender: TField; var Text: String;
  DisplayText: Boolean);
begin
  Text := Sender.AsString;
end;
Ну или в крайнем случае можешь воспользоваться сторонним DBGrid, который умеет работать с многострочным текстом.
Ответить с цитированием
  #3  
Старый 16.09.2012, 12:31
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Спасибо. Еще вопрос: как в dbgrid сделать авторазмер на колонки?
Ответить с цитированием
  #4  
Старый 16.09.2012, 12:36
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от ART
Спасибо. Еще вопрос: как в dbgrid сделать авторазмер на колонки?
Что такое "авторазмер на колонки"?
Ответить с цитированием
  #5  
Старый 16.09.2012, 12:39
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Ширина в зависимости от ширины содержимого
Ответить с цитированием
  #6  
Старый 16.09.2012, 12:49
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от ART
Ширина в зависимости от ширины содержимого
К сожалению у стандартного DBGrid'а нет такого свойства.
Так как DBGrid автоматически очень неудачно делает ширину, то я когда-то написал процедурку выравнивающую колонки по содержимому и в нужных местах её использую (обычно сразу после открытия таблицы):
Код:
procedure CalcDBGridColumnWidths(DBGrid: TDBGrid);
var
  DataSet: TDataSet;
  OldRecNo: Integer;
  MaxWidths: array of Integer;
  i, Width: Integer;
begin
  if (DBGrid = nil) or (DBGrid.DataSource = nil) or (DBGrid.DataSource.DataSet = nil) then Exit;
  DataSet := DBGrid.DataSource.DataSet;

  OldRecNo := DataSet.RecNo;
  DataSet.DisableControls;
  try
    SetLength(MaxWidths, DBGrid.Columns.Count);
    for i := 0 to DBGrid.Columns.Count - 1 do
    begin
      MaxWidths[i] := DBGrid.Canvas.TextWidth(DBGrid.Columns[i].Title.Caption) + 4;
    end;

    DataSet.First;
    while not DataSet.Eof do
    begin
      for i := 0 to DBGrid.Columns.Count - 1 do
      begin
        Width := DBGrid.Canvas.TextWidth(DBGrid.Columns[i].Field.DisplayText) + 4;
        if Width > MaxWidths[i] then MaxWidths[i] := Width;
      end;

      DataSet.Next;
    end;

    for i := 0 to DBGrid.Columns.Count - 1 do
    begin
      DBGrid.Columns[i].Width := MaxWidths[i];
    end;

  finally
    DataSet.RecNo := OldRecNo;
    DataSet.EnableControls;
  end;
end;
Только учти, что она при вычислении ширины колонок проходится по всей таблице, что может занять значительное время если таблица очень большая.
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
ART (16.09.2012)
  #7  
Старый 16.09.2012, 13:25
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Спасибо! А как сделать, чтобы вместо идентификаторов отображались другие поля? Например, в таблице "кассеты" в колонке "фильмы" отображались не их айдишники, а их названия? Можно сделать прямо в аксесс?
Ответить с цитированием
  #8  
Старый 16.09.2012, 13:32
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от ART
Спасибо! А как сделать, чтобы вместо идентификаторов отображались другие поля? Например, в таблице "кассеты" в колонке "фильмы" отображались не их айдишники, а их названия? Можно сделать прямо в аксесс?
Создай Lookup-поле или измени соответствующим образом SQL-запрос.
Ответить с цитированием
  #9  
Старый 16.09.2012, 13:58
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Посмотри в персональные сообщения
Ответить с цитированием
  #10  
Старый 17.09.2012, 11:31
Аватар для Lost_Fish
Lost_Fish Lost_Fish вне форума
Начинающий
 
Регистрация: 21.07.2011
Адрес: Новосибирск
Сообщения: 103
Версия Delphi: Delphi 7,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от ART
Спасибо. Еще вопрос: как в dbgrid сделать авторазмер на колонки?

есть EhLib очень рекомендую http://www.ehlib.com/RUS/default.htm

EhLib 3.6 бесплатен
__________________
Код сырец
Ответить с цитированием
  #11  
Старый 30.09.2012, 20:10
Аватар для Evgen_Balbes
Evgen_Balbes Evgen_Balbes вне форума
Прохожий
 
Регистрация: 27.09.2012
Сообщения: 17
Версия Delphi: Borland Delphi7
Репутация: 11
По умолчанию

Добрый вечер. В вашей теме зашла речь о компоненте "DBMemo" , что он может отображать "поля memo"(с большим объемом текста) или "Поле объекта OLE".Подскажите как можно подключить DBMemo к нужному столбцу таблицы access?
Ответить с цитированием
  #12  
Старый 30.09.2012, 21:00
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Evgen_Balbes
Подскажите как можно подключить DBMemo к нужному столбцу таблицы access?
Как обычно - к свойству "DataSource" подключаешь источник данных, а к свойству "DataField" имя отображаемого поля.
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
Evgen_Balbes (30.09.2012)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:03.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter