Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/63: Рейтинг темы: голосов - 63, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 10.07.2007
Сообщений: 3
1

Отобразить содержимое поля типа MEMO в DBGrid'е

10.07.2007, 15:57. Показов 12484. Ответов 10
Метки нет (Все метки)

Доброго времени суток.
Появилась у меня такая проблемка.
С помощью builder стучусь на сервер mysql. В базе есть таблица в которой куча полей типа TEXT, который в DBGrid отображаются как MEMO. Хотелось бы узнать как вместо надписи MEMO увидеть там то, что находиться в таблице. Заранее спасибо.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.07.2007, 15:57
Ответы с готовыми решениями:

Отобразить содержимое файла в Memo
Я хочу сделать так, чтобы программа открывала файлы и выводила их содержимое в компонент Memo1. ...

Экспорт поля типа memo в Excel
Доброй ночи. В базе есть поле memo в формате RTF. Стоит задача сделать экспорт в Excel с целью...

Заполнение поля типа Memo данными
Я создал BDE БД, но нигде не могу найти, как заполнить поля с типом Memo данными. При компиляции...

Запрограммировать появление на форме кнопки и поля типа Memo
Запрограммировать появление на форме кнопки и поля типа Memo по выполнению команд меню, считывания...

10
Супер-модератор
8767 / 2502 / 142
Регистрация: 07.03.2007
Сообщений: 11,856
11.07.2007, 10:27 2
не пробывал, но вот умные люди пишут, что так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
   Field: TField; State: TGridDrawState);
 var
   Grid         : TStringGrid;
   Texto   : String;
   Rectangulo   : TRect;
 begin
   Rectangulo:=Rect;
   Grid := TStringGrid(Sender);
   if Field.IsBlob then
   begin
     Grid.Canvas.FillRect(Rect);
     Texto := Field.AsString;
     DrawText( Grid.Canvas.Handle,
               PChar(Texto),
               StrLen(PChar(Texto)),
               Rectangulo,
               DT_WORDBREAK);
   end;
 end;
2
0 / 0 / 0
Регистрация: 10.07.2007
Сообщений: 3
11.07.2007, 10:42  [ТС] 3
я чего-то не понимаю или это не с++? мне именно на С нужно.
0
Супер-модератор
8767 / 2502 / 142
Регистрация: 07.03.2007
Сообщений: 11,856
11.07.2007, 11:46 4
ты синтаксиса не знаешь, что тут сложного...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void __fastcall TForm1::DBGrid1DrawDataCell(TObject* Sender, TRect Rect,
TField* Field, TGridDrawState State){
TStringGrid* Grid;
AnsiString Texto;
TRect Rectangulo;
Rectangulo = Rect;
Grid = new TStringGrid(Sender);
if (Field->IsBlob){
Grid->Canvas->FillRect(Rect);
Texto = Field->AsString;
DrawText( Grid->LCanvas->Handle,
Texto.c_str(),
Texto.Length(),
Rectangulo,
DT_WORDBREAK);
}
}
где-то так.... но советую просто в гриде использовать само событие... а отсюда взять саму обработку... и вообще открою тайну при большом кол-ве символов эта перерисовка будет тормозить....
0
0 / 0 / 0
Регистрация: 10.07.2007
Сообщений: 3
11.07.2007, 16:28  [ТС] 5
я так понимаю if(Field->IsBlob) проверяет ячейку с которой надо работать, но в С нет такого метода. Есть ->IsBlob(), но он от чего-то там зависит. Кажется от TMetaClass. И что с этим делать я лично ума не приложу (((((
0
Супер-модератор
8767 / 2502 / 142
Регистрация: 07.03.2007
Сообщений: 11,856
12.07.2007, 09:26 6
Цитата Сообщение от delta_fenix Посмотреть сообщение
я так понимаю if(Field->IsBlob) проверяет ячейку с которой надо работать, но в С нет такого метода. Есть ->IsBlob(), но он от чего-то там зависит. Кажется от TMetaClass. И что с этим делать я лично ума не приложу (((((
я с таким не сталкивался просто, да и я все-таки почитал, isblob для tfield = false...
есть еще вариант, чтобы isblob заменить на classnameis("TMemoField")..., а в текстах поубирать символы 10 и 13... и потом отображать как обычный текст
1
0 / 0 / 0
Регистрация: 11.08.2009
Сообщений: 4
29.01.2010, 16:45 7
delta_fenix, я прошу прощения за поднятие старой темы, но тоже столкнулся с сией проблемой, хотелось бы уточнить - решение было найдено или нет?? если да, то как??
0
8 / 7 / 2
Регистрация: 22.02.2010
Сообщений: 117
11.03.2010, 16:23 8
Вопрос очень актуален!
0
Супер-модератор
8767 / 2502 / 142
Регистрация: 07.03.2007
Сообщений: 11,856
12.03.2010, 11:47 9
Toga, NewbieС, используйте библиотеку EhLib - в ней есть поддержка отображения блобов в гриде...
0
0 / 0 / 0
Регистрация: 23.10.2014
Сообщений: 1
23.10.2014, 04:01 10
Просто создайте в датасете новое калькулируемое поле field1_text,
и в обработчике OnCalcFields присвойте ему текст из вашего поля типа TMemoField (которое в моём примере я назвала field1_memo).
И в гриде отображайте новое калькулируемое поле field1_text:

Delphi
1
2
3
4
procedure query1CalcFields(DataSet: TDataSet);
begin
  query1_field1_text.AsString := query1_field1_memo.AsString;
end;
0
0 / 0 / 2
Регистрация: 22.06.2015
Сообщений: 22
29.05.2017, 19:51 11
Lord_Voodoo, thx
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2017, 19:51

Как связать поля типа record с компонентом memo
Cуть такова что мне нужно вводить данные в Memo: имя, фамилию, дату рождения в файл, причём они...

Грид, умеющий показывать поля типа Memo как текст? Свободный?
Здравствуйте. У меня есть mysql таблица с полями размером 70 тысяч символов. Хочется уметь...

Ошибка при добавлении текстового поля в БД Access в поле типа MEMO
Приветствую всех! Помогите решить следующую проблему. Из формы добавляется запись из 2 полей...

Разбить поровну содержимое Memo между четырьмя другими Memo
Здравствуйте, уважаемые форумчане! Я в delphi новичок совсем, только основы осваиваю, так...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru