IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.
Модератор: kdv
-
zunder
- Сообщения: 5
- Зарегистрирован: 30 дек 2005, 09:43
Сообщение
zunder » 30 янв 2006, 10:52
столкнулся с такой проблемой: создаю вычисляемые поля в TpFIBDataSet только почему то при открытиии онного эксепшины лезут, ноги растут из модуля FIBDataSet
Код: Выделить всё
function TFIBCustomDataSet.GetXSQLVAR(Fld:TField):TXSQLVAR;
сначало при обработке последнего поля вылазит
далее появляются след ексепшны "DataSet.Field Размер поля слишком мал".
вот код который у меня выполняется перед открытием DataSet
Код: Выделить всё
//1) получаем описание полей запроса
dstMain.FieldDefs.Update;
//2) добавляем описание нового вычисляемого поля
with dstMain.FieldDefs.Insert(0) as TFieldDef do begin
Name := 'zzz';
DataType := ftFloat;
end;
//3) создаем все описанные поля
for i := 0 to dstMain.FieldDefs.Count-1 do begin
if dstMain.FindField(dstMain.FieldDefs[i].Name) = nil then
dstMain.FieldDefs[i].CreateField(dstMain);
end;
//4) настраиваем вычисляем поле
if dstMain.FindField('zzz') <> nil then begin
dstMain.FindField('zzz').FieldKind := fkCalculated;
dstMain.FindField('zzz').DisplayLabel := 'calc';
dstMain.FindField('zzz').Visible := True;
end;
//5) открываем DataSet
dstMain.Open;
подскажите что в коде не так или может какие настройки особые должны в TpFIBDataSet ставится чтобы таким образом поля можно было добавлять?

-
Merlin
- Динозавр IB/FB
- Сообщения: 1502
- Зарегистрирован: 27 окт 2004, 11:44
Сообщение
Merlin » 30 янв 2006, 12:23
TField.FieldKind
-
zunder
- Сообщения: 5
- Зарегистрирован: 30 дек 2005, 09:43
Сообщение
zunder » 30 янв 2006, 12:28
заменил
Код: Выделить всё
with dstMain.FieldDefs.Insert(0) as TFieldDef do begin
Name := 'zzz';
DataType := ftFloat;
end;
на
Код: Выделить всё
dstMain.FieldDefs.Add(FCalcFieldDefs[i].FieldName,FCalcFieldDefs[i].DataType);
и ошибки перестали вылазить и все заработало, только я не понял - почему

может кто объяснит
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 30 янв 2006, 16:23
разработчики FIBPlus объяснят, может быть.
-
Merlin
- Динозавр IB/FB
- Сообщения: 1502
- Зарегистрирован: 27 окт 2004, 11:44
Сообщение
Merlin » 30 янв 2006, 17:21
zunder писал(а):заменил
Код: Выделить всё
with dstMain.FieldDefs.Insert(0) as TFieldDef do begin
Name := 'zzz';
DataType := ftFloat;
end;
на
Код: Выделить всё
dstMain.FieldDefs.Add(FCalcFieldDefs[i].FieldName,FCalcFieldDefs[i].DataType);
и ошибки перестали вылазить и все заработало, только я не понял - почему

может кто объяснит
Повторяю - TField.FieldKind.
-
zunder
- Сообщения: 5
- Зарегистрирован: 30 дек 2005, 09:43
Сообщение
zunder » 01 фев 2006, 08:44
2 merlin
причем тут
чем тебя не устраивает в п.4 следующая строчка
Код: Выделить всё
dstMain.FindField('zzz').FieldKind := fkCalculated;
я не понимаю что ты хочешь мне объяснить написав

-
Merlin
- Динозавр IB/FB
- Сообщения: 1502
- Зарегистрирован: 27 окт 2004, 11:44
Сообщение
Merlin » 01 фев 2006, 12:47
Чё тут понимать, очки мне надо менять, проглядел эту строчку

Но, судя по эксепшену, датасет таки не воспринял что поле калькулируемое и лезет за ним в возвращаемый набор. Это надо действительно у них на саппорте выяснять.