Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TFIBFloatField странно себя ведет, при задании значения Null 
:(
    Опции темы
Delphist
  Дата 7.8.2009, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

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



Есть датасет, в нем есть поле TFIBFloatField, у которого FieldKind = fkCalculated. Т.е. вычисляемое поле, значения которого вычилсяются в событии OnCalcFields. Возникла проблема, а именно если я делаю так:
FIBFloatField.Value := Null;
или
FIBFloatField.Clear;

То значение не превращается в Null, а храниться старое. В чем может проблема?


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Alexeis
Дата 7.8.2009, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Delphist @  7.8.2009,  12:33 Найти цитируемый пост)
То значение не превращается в Null, а храниться старое. В чем может проблема? 

  Commit делал?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Akella
Дата 7.8.2009, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Ну Commit - это непосредственно запись в базу. А здесь всё на уровне набора данных.

Добавлено через 36 секунд
Delphist, создай и приложи тестовый пример, показывающий ошибку.
PM MAIL   Вверх
Alexeis
Дата 7.8.2009, 20:17 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Akella @  7.8.2009,  15:56 Найти цитируемый пост)
Ну Commit - это непосредственно запись в базу. А здесь всё на уровне набора данных.

  Я так понял, что Delphist записал в одном месте, а проверил в другом, например программой IBExpert, иначе бы значение применилось в момент записи в поле, а вот в базе до Commit изменений не видно, как и было указано 
Цитата(Delphist @  7.8.2009,  12:33 Найти цитируемый пост)
То значение не превращается в Null, а храниться старое.




--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Akella
Дата 7.8.2009, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Цитата(Alexeis @  7.8.2009,  20:17 Найти цитируемый пост)
 Я так понял, что Delphist записал в одном месте, а проверил в другом, например программой IBExpert, 

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

Добавлено через 5 минут и 53 секунды
Цитата(Delphist @  7.8.2009,  13:33 Найти цитируемый пост)
FIBFloatField.Value := Null;


странно ты как-то присваиваешь

разве не так правильно?
Код

procedure TfmAddressBook.tAddressBookCalcFields(DataSet: TDataSet);
begin
  TpFibDataSet(DataSet).FBN('field_name').AsVariant := null;
end;


или

Код

procedure TfmAddressBook.tAddressBookCalcFields(DataSet: TDataSet);
begin
  DataSet.FieldByName('field_name').AsVariant := null;
end;

PM MAIL   Вверх
Alexeis
Дата 7.8.2009, 23:03 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Akella @  7.8.2009,  21:47 Найти цитируемый пост)
Ну а я надеюсь, что он знает, что вычисляемые поля, созданные в наборе данных, никак не влияют на саму базу, а значит экспертом их увидеть нельзя.

  А ну да, это я протупил. 
Вот такой вот формат получается, когда добавляешь поля в датасет, и в форму автоматом добавляются объекты-ссылки на текущие поля
Код

FIBFloatField.Value := Null;

Это гораздо удобнее и быстрее, правда фик его знает как оно там обновляется, эти ссылки...


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Akella
Дата 8.8.2009, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Цитата(Alexeis @  7.8.2009,  23:03 Найти цитируемый пост)
FIBFloatField.Value

разве так можно в событии OnCalcFields?
PM MAIL   Вверх
Alexeis
Дата 8.8.2009, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Akella @  8.8.2009,  11:00 Найти цитируемый пост)
разве так можно в событии OnCalcFields?

  Нигде не встречал, чтобы запрещали такое. Более того у меня такой синтаксис работает smile .


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Akella
Дата 8.8.2009, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Покажи более полный код
PM MAIL   Вверх
Alexeis
Дата 8.8.2009, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Akella @  8.8.2009,  19:57 Найти цитируемый пост)
Покажи более полный код

  Ты у меня спрашиваешь или у Delphist?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Akella
Дата 8.8.2009, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Цитата(Alexeis @  8.8.2009,  20:53 Найти цитируемый пост)
Более того у меня такой синтаксис работает

у тебя конечно smile
PM MAIL   Вверх
Alexeis
Дата 8.8.2009, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Точный код привести не могу сейчас. Проект на работе, но если воспользоваться БД из примера то получается примерно так
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBTables, Grids, DBGrids;

type
  TForm1 = class(TForm)
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    Table1: TTable;
    Table1NAME: TStringField;
    Table1SIZE: TSmallintField;
    Table1WEIGHT: TSmallintField;
    Table1AREA: TStringField;
    Table1BMP: TBlobField;
    Table1Size_2: TIntegerField;
    ADOConnection1: TADOConnection;
    procedure Table1CalcFields(DataSet: TDataSet);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
  Table1Size_2.Value := Table1SIZE.Value * 2;
end;


На всякий случай приведу скрин как оно работает.
user posted image

Это сообщение отредактировал(а) Alexeis - 8.8.2009, 22:44


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Akella
Дата 8.8.2009, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Цитата(Alexeis @  8.8.2009,  22:34 Найти цитируемый пост)
Table1Size_2.Value := Table1SIZE.Value * 2;

Дык здесь же ты указываешь явное имя поля.
Просто ввели меня в заблуждение. Но всё равно я бы так не стал делать. Не зря же вам дают Dataset: TDataset в качестве входного параметра события.
PM MAIL   Вверх
Alexeis
Дата 9.8.2009, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Akella @  8.8.2009,  22:21 Найти цитируемый пост)
Но всё равно я бы так не стал делать. Не зря же вам дают Dataset: TDataset в качестве входного параметра события. 

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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Akella
Дата 9.8.2009, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Ясно
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

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

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


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


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

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

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


 




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


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

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