Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Показ Memo-поля в DBGrid [D6, Paradox]


Брат ©   (2004-09-30 15:03:00) 

Есть у меня кусок кода, который показывает в DBGrid содержимое мемо-поля:
procedure TfrmMain.DBGridTablesDrawDataCell(Sender: TObject;
 const Rect: TRect; Field: TField; State: TGridDrawState);
var
 P: array [0..1023] of Char; { MemoField buffer }
 BS: TBlobStream;
 S: string;
begin
 if Field is TMemoField then
   with (Sender as TDBGrid).Canvas do
     begin
       // TablesTableName - это TMemoField:
       BS:=TBlobStream.Create(TablesTableName,bmRead);
       FillChar(P,SizeOf(P),#0);
       BS.Read(P,SizeOf(P));
       BS.Free;
       S:=StrPas(P);
       // Заменяем возврат каретки на пробел :
       while Pos(#13,S)>0 do S[Pos(#13,S)]:=' ';
       while Pos(#10,S)>0 do S[Pos(#10,S)]:=' ';
       // Очищаем ячейку:
       FillRect(Rect);
       // Выводим текст в ячейку:
       TextOut(Rect.Left,Rect.Top,S);
     end;
end;

Есть таблица Tables, которая создается динамически с полями:
FieldDefs.Add('TableName',ftMemo,0,true);
FieldDefs.Add('FileName',ftString,30,true);
FieldDefs.Add('Date',ftDate,0,true);

На строке
BS:=TBlobStream.Create(TablesTableName,bmRead);
выдается ошибка, что он не знает что такое TablesTableName
(хотя это ведь я обращаюсь к полю TableName таблицы Tables).

Не пойму в чем дело. Помогите пожалуйста. Заранее благодарен.


Брат   (2004-09-30 15:34:00) [1]


> roottim ©   (30.09.04 15:31) [8]
> TBlobField(Tables.FieldByName('TableName'))

точно! :)
всем спасибо большое


Ozone   (2004-09-30 15:32:00) [2]

Брат   (30.09.04 15:28) [6]

см. roottim ©   (30.09.04 15:27) [4] он же все ясно написал.


roottim   (2004-09-30 15:31:00) [3]

TBlobField(Tables.FieldByName('TableName'))


Vlad   (2004-09-30 15:31:00) [4]


> Брат   (30.09.04 15:28) [6]
> Пробовал, пишет:
> Incompatible types: 'TBlobField' and 'TField'


> Брат   (30.09.04 15:28) [6]

Ну так преобразуй к TBlobField
TBlobField(Tables.FieldByName...)


Брат   (2004-09-30 15:30:00) [5]


> sniknik ©   (30.09.04 15:27) [5]
> это предопределенное поле (двойной клик на таблице мышкой
> и по правой кнопке добавить все поля, то что у тебя будет
> с memo смело вставляй вместо этого)
> или можеш заменить на это Tables.fieldbyname('TableName')

дело в том что "двойной клик" не помогает, т.к. таблица создается динамически...
может кто знает как это действие сделать программно


Брат   (2004-09-30 15:28:00) [6]

Пробовал, пишет:
Incompatible types: 'TBlobField' and 'TField'


roottim   (2004-09-30 15:27:00) [7]

> TablesTableNameя тоже незнаю что такое TablesTableName... нигде в коде его нет, кроме как в Create.. откуда ты вообще его взял ?


sniknik   (2004-09-30 15:27:00) [8]

это предопределенное поле (двойной клик на таблице мышкой и по правой кнопке добавить все поля, то что у тебя будет с memo смело вставляй вместо этого)
или можеш заменить на это Tables.fieldbyname('TableName')


Vlad   (2004-09-30 15:25:00) [9]

а если вместо TablesTableName
написать
Tables.FieldByName('TableName')
?
Если не поможет, то скорее всего Tables лежит в другом модуле, который не прописан в USES


Брат   (2004-09-30 15:20:00) [10]

При компиляции кода:
Undeclared identifier: "TablesTableName"


Ozone   (2004-09-30 15:16:00) [11]

Что за ошибка?


Наверх

Титульная страница Поиск, карта сайта Написать письмо