Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создание TField run time, Как это делается??? 
:(
    Опции темы
Sharl
Дата 21.1.2005, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 16.8.2003

Репутация: нет
Всего: нет



Программное создание объектов класса TField в TTable или TQuery
Как это делается???

PM MAIL   Вверх
Дрюча
Дата 21.1.2005, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 20.1.2005
Где: Delphi & Pasc al

Репутация: нет
Всего: 1



Создать TField... может так...
Код

var
Fld: TField;
begin
Fld:=TField.Create(Query1);
<...>
end;

Может конкретнее задачу поставите... smile
PM   Вверх
Akella
Дата 21.1.2005, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Код

procedure...
var
tTable1:TTable;
qQuery1.TQuery;
begin
try
  tTable1:=TTable.Create(Form1);//или TForm1
//можно написать так
  tTable1:=TTable.Create(self);
//также и TQuery
//а сполем TField может быть так, а может и нет. Delphi нет под рукой
//у таблицы или запроса есть множество TFieldDefs типа TStrings, которое содержит список полей
  tTable1.FieldDefs.update;
finally//уничтожаем объекты даже если не было исключительной ситуации
FreeAndNil(tTable1);
FreeAndNil(qQuery1);
end;

end;

PM MAIL   Вверх
Bes
Дата 21.1.2005, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



Было бы интересно узнать, для чего это может понадобиться?
Не разу не задавался таким вопросом....
PM MAIL   Вверх
Sharl
Дата 21.1.2005, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 16.8.2003

Репутация: нет
Всего: нет



Конечная цель токова.

Отображать в DBGrid -е только те поля таблицы, которые заданы извне.
Т.е. поля должны быть выявлены только по ходу работы приложения.

Для этого, думаю, в таблице ( TTable ) эти поля добавлять динамичевки.

var
f:TIntegerField;
begin
ff := TIntegerField.Create(Table1);
ff.FieldKind := fkData;
ff.DisplayLabel := 'NewField';
ff.FieldName := 'aa';
Table1.Fields.Add(ff);

.................

Ну и что потом???

Как создать ссылку на это поле ( если конечно таким образом это поле в Table1 создано) в DBGrid -е???

Это сообщение отредактировал(а) Sharl - 21.1.2005, 14:30
PM MAIL   Вверх
Дрюча
Дата 21.1.2005, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 20.1.2005
Где: Delphi & Pasc al

Репутация: нет
Всего: 1



А не проще бы завести какой-нибудь другой идентификатор? Например:

Код

var
S: string;
begin
s:='';
If CheckBox1.Checked
 then
  s:=s + 'Field1, ';
if CheckBox2.Checked
 then
  s:=s + 'Field2, ';
<...>
if s <> ''
 then
  begin
   Delete(s, Length(s)-2, 2);
   with query1 do
    begin
     Close;
     SQL.Text:='SELECT ' + s + ' FROM TableName;';
     Open;
    end;

smile

PM   Вверх
Bes
Дата 21.1.2005, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



2Sharl:
Слушай, дак не проще ли выбирать только нужные поля select-ом если работаешь через Query (что на мой взгляд предпочтительнее) или добавить в dbGrid все поля сразу и потом делать их видимыми-невидимыми....
Или я чего-то не пойму...
PM MAIL   Вверх
Sharl
Дата 21.1.2005, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 16.8.2003

Репутация: нет
Всего: нет



Bes и Дрюча
Да, конечно, то что вы описываете, и проще и удобнее,
но нужно, чтобы некоторые поля в grid-е показывались как lookup combobox.
вот в этом и вся проблема,
т.е. нужно динамически менять свойства поля query типа LookupKeyFields и т.п., что и не удается.


PM MAIL   Вверх
Дрюча
Дата 21.1.2005, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 20.1.2005
Где: Delphi & Pasc al

Репутация: нет
Всего: 1



А что именно не удается? Создать или еще что-нить... привиди неработающий свой пример... smile
PM   Вверх
Sharl
Дата 21.1.2005, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 16.8.2003

Репутация: нет
Всего: нет



Нашел способ для удовлетворения моих нужд.
Это компонент TDBCtrlGrid.
На нем можно динамически создавать ту функциональность, что требовалась от меня.

Но все-таки , попробуем получить такое.

В DB1 базе есть таблица "TA"с полями "F1,F2,F3".

В форме есть компонент
Table1 : TTable.

Table1.DataBaseName := 'DB1';
Table.TableName := 'TA' ;
Table1.Fields.Remove(Table1.FieldByName('F1'));

Как потом снова запихнуть поле 'F1' обратно в Table1 ?






PM MAIL   Вверх
Дрюча
Дата 21.1.2005, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 20.1.2005
Где: Delphi & Pasc al

Репутация: нет
Всего: 1



Обновить таблицу и спихнуть ненужное... smile Вот в этом случае лучше все-таки юзать query
PM   Вверх
Akella
Дата 21.1.2005, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Table1.Fields.add

попробуй такое или

Table1.Fields.insert
PM MAIL   Вверх
Sharl
Дата 23.1.2005, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 16.8.2003

Репутация: нет
Всего: нет



Так вот, это все делается вот так.

Код

procedure TForm1.InsertNewField( Field : TField; FieldName, KeyFields, LookupKeyFields, LookupResultField  : string; FieldKind:TFieldKind; MainTable : TTable; LookupTable : TTable );
begin
 Field.FieldName := FieldName;
 Field.LookupDataSet := LookupTable;
 Field.LookupKeyFields := LookupKeyFields;
 Field.LookupResultField := LookupResultField;
 Field.KeyFields := KeyFields;
 Field.FieldKind := FieldKind;
 MainTable.Close;
 Field.DataSet := MainTable;
//  MainTable.FieldByName(FieldName).Index := 0; //если нужно его вставить на первую позицию
 MainTable.Open;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 fld : TField;
begin

 fld := TStringField.Create(Self);
 InsertNewField( fld, 'Lookup field','KeyFields', 'LookupKeyFields', 'LookupResultField', fkLookup,   Table1,Table2 );

end;



разумеется 'Lookup field','KeyFields', 'LookupKeyFields', 'LookupResultField' это имена полей таблиц.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0608 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.