Вниз
Скачать: CL | DM;

Показ Memo-поля в DBGrid   Найти похожие ветки 

← →
Брат   (2004-09-30 15:03) [0]

Есть у меня кусок кода, который показывает в 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).

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


← →
Ozone ©   (2004-09-30 15:16) [1]

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


← →
Брат   (2004-09-30 15:20) [2]

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


← →
Vlad ©   (2004-09-30 15:25) [3]

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


← →
roottim ©   (2004-09-30 15:27) [4]

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


← →
sniknik ©   (2004-09-30 15:27) [5]

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


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

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


← →
Брат   (2004-09-30 15:30) [7]


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

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


← →
roottim ©   (2004-09-30 15:31) [8]

TBlobField(Tables.FieldByName("TableName"))


← →
Vlad ©   (2004-09-30 15:31) [9]


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


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

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


← →
Ozone ©   (2004-09-30 15:32) [10]

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

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


← →
Брат   (2004-09-30 15:34) [11]


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

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



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.037 c
1-1097609980
Saintdmitry
2004-10-12 23:39
2004.10.31
Delphi bugs


14-1097236306
Alone
2004-10-08 15:51
2004.10.31
Компьютер-розетка :)


1-1098084343
NewDelpher
2004-10-18 11:25
2004.10.31
Точки останова


3-1096551759
intaari
2004-09-30 17:42
2004.10.31
Установка BDE вместе с прогой


1-1097745023
jenbond
2004-10-14 13:10
2004.10.31
Получения hwnd




   Наверх