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

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

fkCalculated ??? [D6]


barkot ©   (2004-09-27 14:06:00) 

Есть некий DataModule. В нем есть Query у которого SQL = 'select * from table'. В таблице table есть мемо поле fMemo.
Нужно в данном query создать вычисляемое поле(или какое-либо другое) чтобы получить из fMemo 50 первых символов. Как?
В каких свойствах и методах TField что писать?

З.Ы. никогда не пользовался вычисляемыми полями, всегда все решал посредством sql-запросов, а тут пришлось залесть в чужие дебри.


Johnmen   (2004-09-29 12:11:00) [1]

>sniknik ©   (29.09.04 10:59) [13]
>но это догадки, игра в телепатов ;о)).

Ну да. Именно игра:)
Ещё сильная фишка с моей стороны: > В таблице table есть мемо поле


msguns   (2004-09-29 10:59:00) [2]

Насколько я понял, надо мемо как-то показать в визуальном контроле (к примеру, в гриде). Для этого никаких Calc-полей в датасет добавлять не надо и тем более тискать, как солдат толстую титьку, беззащитный SQL-запрос, попутно выясняя к чему (серверу или лок.БД) он сделан. "Собачка" зарыта в обработчике OnGetText соотв.полевого объекта (TField), который "прикручен" к TDataSet`у - папаньке большинства компонент доступа.

А вообще попутно (чтоб нне засорять форум хилыми отростками):
в каких случаях вообще-то надо пользоваться мемо ? Я, например, бегу от него как черт от ладана, заменяя везде где можно простым CHAR/VARCHAR. Хотя, конечно, если там надо романы Л.Н.Толстого запоминать.. А серьезно, практически любой список (мемо удобно именно для спископодобных данных в том числе) можно запихнуть в достаточно длинный стринг. А мемо - это куча доп. и не очень приятных приключений.
Во всяком случае у меня сложилось впечатление, что многие часто-густо юзают это самое мемо безо всякой на то нужды. Или я неправ ?

А как думают мастера ?


sniknik   (2004-09-29 10:59:00) [3]

> Johnmen ©   (29.09.04 09:18) [5]
несогласен.
скорее бы об этом говорило бы Query, table (без приставок ADO) и само то что неуказан используемая база (начинающие обычно полагают что то с чем они столкнулись единственно возможное, а сталкиваются естественно с BDE, парадокс, дбейс)
но это догадки, игра в телепатов ;о)).

а с полем ftMemo ...
вот например использую

procedure TMainForm.ShowMemo;
var TitName, RecNo, RecSize: string;
   i, Size: integer;
   Buf: array of byte;
   ChBuf: String;
   Stream1: TStream;
begin
 if not DBGrid.DataSource.DataSet.Active then Exit;
 case DBGrid.SelectedField.DataType of
    ftMemo, ftFmtMemo: begin

     if not Assigned(MemEdit) then begin
       Application.CreateForm(TMemEdit, MemEdit);
       MemEdit.Left:= MemEditPos.Left;
       MemEdit.Top:= MemEditPos.Top;
       MemEdit.Width:= MemEditPos.Width;
       MemEdit.Height:= MemEditPos.Height;
     end;

     MemEdit.DBMemo1.Font.Assign(DBGrid.Font);
     ....

работает это в ADO, процедура(начало) отображения различных типов полей.
прога для тестов практически всех провайдеров ADO (те которые к базам относятся), на всех это работает, тип распознается, независимо sql сервер это или движок локальной базы.

(если я правильно понял твою мысль)


serg128   (2004-09-29 10:58:00) [4]

OnGetText, извиняюсь

только не говори, что его тоже нет


Johnmen   (2004-09-29 10:54:00) [5]

>serg128   (29.09.04 10:45) [9]

Здесь дельферы живут, однако...:)

>OnDataRead там у поля (TField) обработчик есть.

Тебе показалось...


serg128   (2004-09-29 10:45:00) [6]

> Johnmen

Substr, Которая подстроку возвращает (сорри за неточность, я пишу C++)

OnDataRead там у поля (TField) обработчик есть.


Johnmen   (2004-09-29 10:34:00) [7]

>Substr

Чё за ф-ия ?

>serg128

Вдумчиво читаем пост [3].


Johnmen   (2004-09-29 10:32:00) [8]

>OnDataRead

Это откуда ?


serg128   (2004-09-29 10:16:00) [9]

Делаешь так:
1) Заводишь в своём Query поле типа fkCalculated
2) В его обработчике OnDataRead пишешь: Text := Substr(Query.FieldByName('fld').AsString, 1, 50);

Всё.


Johnmen   (2004-09-29 09:18:00) [10]

>sniknik ©   (28.09.04 20:16) [4]

Упоминание fMemo весьма недвусмысленно говорит о Парадоксе/Дибейсе. Так что сервера нету...:)


sniknik   (2004-09-28 20:16:00) [11]

Johnmen ©   (28.09.04 18:24) [3]
а почему бы не предположить что в какомто из sql серверов запрос рабочий?
раз в вопросе неуказана база/sql сервер, имеем же право. ;о)) вопрос в общем - ответ в частном случае, неуказано там зачем указывать здесь? пусть вычисляет.

p.s. как минимум один скуль сервер поддерживает данную форму запроса -> [2] (счас только проверил)


Johnmen   (2004-09-28 18:24:00) [12]

Иногда очень полезно перед ответом испробовать его на себе. Или, в кр. случае, на кошечках...:)


IZON   (2004-09-28 18:15:00) [13]

select cast(memo as varchar(50)) from table


Денис   (2004-09-28 11:08:00) [14]

А вроде можно в SQL запросе задать длину получаемых данных с Memo


Наверх

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