Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2010, 01:24   #1
belartvlad29
 
Регистрация: 12.07.2010
Сообщений: 4
Смех В ячейках DBGrid изображается поле типа text как (Memo)

Уважаемые эксперты, помогите пожайлуста. Ситуация такова, написал программу на Delphi 2010 которая связывается MySQL Server 5.1 и отображает таблицу через компонент DBGrid, но в DBGrid поля типа text вместо любого теста отображаются как (Memo).
Что мне сделать, чтобы текстовые поля отображались корректно.
Заранее спасибо.
belartvlad29 вне форума Ответить с цитированием
Старый 18.07.2010, 04:35   #2
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Если у вас в БД поле имеет тип Мемо, то вы и не увидите текст в ячейке. Мемо - это тип, который позволяет хранить в БД текст большого объему. Поэтому если в БД выбран этот тип, то в ячейке и будет написно (Мемо). Настройте DBMemo на поле в БД, имеющее тип Мемо и тогда Вы увидите текст в ячейке, он отобразится в DBMemo.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 18.07.2010, 14:36   #3
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Но обойти данную проблему можно, и это уже не раз обсуждалось и на форуме и в DelphiWorld это есть.
Привожу отрывок кода, чтобы было понятнее о чем речь:

Код:
procedure TForm1.cyDBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
var
   P, P1: array [0..1023] of Char; { MemoField buffer }
   BS, BS1:TADOBlobStream;
   S, S1: string;
begin
   if (Field is TMemoField) then
   begin

   if Field.Name='ADOQuery1Realname' then
   with (Sender as TcyDBGrid).Canvas do
   begin
 { Table1Notes is the TMemoField }
     BS1 := TAdoBlobStream.Create(AdoQuery1Realname, bmRead);
     FillChar(P1, SizeOf(P1), #0);
     BS1.Read(P1, SizeOf(P1));
     BS1.Free;
     S1 := StrPas(P1);
 { remove carriage returns &  line feeds }
     while Pos(#13, S1) >  0 do S1[Pos(#13, S1)] := ' ';
     while Pos(#10, S1) >  0 do S1[Pos(#10, S1)] := ' ';
 { clear the cell }
     FillRect(Rect);
 { fill cell with memo data }
     TextOut(Rect.Left, Rect.Top, S1);
   end;

end;
P.S. Вроде бы в библиотеке EhLib (DBGridEh) можно настроить показ содержимого мемо полей.
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.

Последний раз редактировалось ArtInt; 18.07.2010 в 14:38.
ArtInt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Memo + text toxich Общие вопросы Delphi 2 13.12.2009 16:16
Как задать на изменение новое поле в DBGrid? SERGOFF БД в Delphi 5 30.09.2009 18:31
Как заполнить поле типа Edit в чужом приложении зная его Handle SeRhy Win Api 5 04.02.2009 21:11
FoxPro. Как записать в поле Memo большой текст? zag БД в Delphi 5 30.05.2008 06:10