Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.24;
Скачать: CL | DM;

Вниз

Работа с филдами в ибКвнри   Найти похожие ветки 

 
Itoixxx   (2006-09-03 10:56) [0]

Есть несколько вопрос по созданию полей для ибКвери в ран-тайм (как при дабл клике п онему в дизайн-тайм).
я их так создаю:
F:Tfield; (используется по ходу прогроаммы много раз для создани разных полей в одном и томже квери)
proc Button1.click
begin
fld:=TIntegerField.Create(ibNumDistr);
    fld.FieldName:="nom_isled";
    fld.FieldKind:=fkData;
    fld.DataSet:=ibNumDistr;
    ibNumDistr.fields.add(fld);
//....
fld:=TStringField.Create(ibNumDistr);
    fld.FieldName:="name_city";
    fld.FieldKind:=fkData;
    fld.DataSet:=ibNumDistr;
    ibNumDistr.fields.add(fld);
//....
end;

1)как правильно их создавать и удалять?
2)как определить создано ли уже такое поле раньше и не создавать его второй раз (вылазит ошибка, что нельзя создаьб дубликат поля).
3)если я добалю так поле,а потом закрою форму, то вылазить АкцессВиолэйшн.как от этого избавить?
Спасибо


 
vlad-mal ©   (2006-09-03 21:33) [1]

1. Хорошо бы сперва поля определять


var
 fField: TField;
 fFieldDef: TFieldDef;
...
begin
...
 ibNumDistr.FieldDefs.Add("field_name", ftInteger);
 fFieldDef := ibNumDistr.FieldDefs.Find("field_name");



а уже потом создавать

 fField := fFieldDef.CreateField(ibNumDistr);
 fField.FieldName := "field_name";
 fField.Name := "field_name";
 fField.DisplayWidth := ...;
...


Удалять -

 ibNumDistr.Fields.Remove(field);
 ibNumDistr.FieldDefs.Delete(index);


2.
 FindField.
 Не забывайте указывать Name.
3. Все будет хорошо (см. выше).


 
Itoixxx   (2006-09-04 12:09) [2]

Создал массив филдов:
fField:array [0..10] of  TField;
fFieldDef:array [0..10] of TFieldDef;

....
проверяю наличие такого филда, если его нет, то создаю:
...
 if ibNumDistr.Fields.FindField("nom_isled") = nil then
  begin
   ibNumDistr.FieldDefs.Add("nom_isled", ftInteger);
   fFieldDef[0] := ibNumDistr.FieldDefs.Find("nom_isled");
   fField[0] := fFieldDef[0].CreateField(ibNumDistr);
   fField[0].FieldName := "nom_isled";
   fField[0].Name := "nom_isled";
  end;
...
далее по ходу программы если этот филд существует, то его надо прибить. делаю так:
   if (ibNumDistr.Fields.FindField("nom_isled")<>nil) then
   begin
    ibNumDistr.FieldDefs.Delete(ibNumDistr.FieldDefs.IndexOf("nom_isled"));
    ibNumDistr.Fields.Remove(fField[0]);
   end;

и вылазит ошибка что такое поле не найдено :(


 
Itonixxx   (2006-09-05 00:36) [3]

никто не знает?



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

Текущий архив: 2006.09.24;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.028 c
3-1153728761
Opilki_Inside
2006-07-24 12:12
2006.09.24
Вопрос о использовании TZUpdateSQL из пакета ZeosDBO


1-1154439659
Евгений Владимирович
2006-08-01 17:40
2006.09.24
Как перевести DateTime в минуты?


1-1155199143
Kolan
2006-08-10 12:39
2006.09.24
Использование паттерна Comand.


2-1157412618
Fly`
2006-09-05 03:30
2006.09.24
запустить приложение сразу в tray


1-1155502154
FireMan_Alexey
2006-08-14 00:49
2006.09.24
Вопрос по поводу Hook-a