[Решено] Непонятный Post Zeos'а

Модератор: Модераторы

[Решено] Непонятный Post Zeos'а

Сообщение ronin » 30.10.2012 18:07:25

Всем привет! Возник вопрос с которым не могу разобраться. Сразу опишу ситуацию: работа с MariaDB через Zeos, который пробовал брать из testing, testing-egonhugeist, trunk
Есть два датасета (точнее их море), один родительский второй дочерний связь как обычно по полю (master-detail), последнее время получается при выполнении DetailDataset.Append происходит непонятный Post, начал рыть в чём проблема упёрся вот в это место

Код: Выделить всё
procedure TZAbstractDataset.InternalAddRecord(Buffer: Pointer; Append: Boolean);
var
  RowNo: Integer;
  RowBuffer: PZRowBuffer;
begin
  if not GetActiveBuffer(RowBuffer) or (RowBuffer <> Buffer) then
    raise EZDatabaseError.Create(SInternalError);

  if Append then
    FetchRows(0);

  if CachedResultSet <> nil then
  begin
    CachedResultSet.MoveToInsertRow;
    RowAccessor.RowBuffer := RowBuffer;
    PostToResultSet(CachedResultSet, FieldsLookupTable, Fields, RowAccessor);
    try
      CachedResultSet.InsertRow;//место генерирования исключения
    except on E: EZSQLThrowable do
      raise EZDatabaseError.CreateFromException(E);
    end;
    RowNo := CachedResultSet.GetRow;
    FetchCount := FetchCount + 1;

    { Filters the row }
    if FilterRow(RowNo) then
    begin
      if Append then
      begin
        CurrentRows.Add(Pointer(RowNo));
        CurrentRow := CurrentRows.Count;
      end
      else
      begin
        CurrentRow := Max(CurrentRow, 1);
        CurrentRows.Insert(CurrentRow - 1, Pointer(RowNo));
      end;
    end;
  end;
end;


место генерирования исключения отмечено комментарием, генерируется исключение на required поля, потому что при вставке строки в датасет он пытается выполнить Post, не пойму почему так, причём данная особенность проявляется именно у этого датасета и ни у какого более, помогите понять в чём может быть проблема...

p.s. CachedUpdates не используется, все остальные свойства датасета по дефолту
Последний раз редактировалось ronin 02.11.2012 11:18:39, всего редактировалось 1 раз.
ronin
постоялец
 
Сообщения: 174
Зарегистрирован: 27.01.2010 00:14:46

Re: Непонятный Post Zeos'а

Сообщение Ism » 31.10.2012 01:48:21

Возьмите последюю svn версию
Если баг есть сделайте тестовый проект

Закиньте на форум с описанием http://zeos.firmos.at/

Там же ссылка на svn
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Непонятный Post Zeos'а

Сообщение ronin » 31.10.2012 09:11:05

как писал выше я пробовал все версии из svn, сегодня попробовал 7.0.1 beta та же ерунда

вот описание процедуры где Post выполняется

Код: Выделить всё
{**
  Inserts the contents of the insert row into this
  <code>ResultSet</code> object and into the database.
  The cursor must be on the insert row when this method is called.
}
procedure TZAbstractCachedResultSet.InsertRow;
var
  TempRow: PZRowBuffer;
begin
  CheckClosed;

  { Creates a new row. }
  TempRow := FRowAccessor.RowBuffer;
  FRowAccessor.Alloc;
  FRowAccessor.MoveFrom(FInsertedRow);
  FRowAccessor.RowBuffer^.UpdateType := utInserted;
  FRowAccessor.RowBuffer^.Index := GetNextRowIndex;

  AppendRow(FRowAccessor.RowBuffer);

  { Posts non-cached updates. }
  if not FCachedUpdates then
  begin
    try
      PostUpdates;
    except
      on E: Exception do
      begin
        { Restore the previous state. }
        FRowAccessor.DisposeBuffer(FInitialRowsList[FInitialRowsList.Count - 1]);
        FInitialRowsList.Delete(FInitialRowsList.Count - 1);
        FRowAccessor.DisposeBuffer(FCurrentRowsList[FCurrentRowsList.Count - 1]);
        FCurrentRowsList.Delete(FCurrentRowsList.Count - 1);
        FRowAccessor.RowBuffer := TempRow;

        { Reraises the exception. }
        RaiseSQLException(E);
      end;
    end;
  end;

  FRowsList.Add(FRowAccessor.RowBuffer);
  LastRowNo := FRowsList.Count;
  MoveAbsolute(LastRowNo);
end;


вот PostUpdates и выполняется, я не понимаю это фича такая?
ronin
постоялец
 
Сообщения: 174
Зарегистрирован: 27.01.2010 00:14:46

Re: Непонятный Post Zeos'а

Сообщение ronin » 01.11.2012 21:30:23

чё то я не понял, а куда делось published свойство MasterFields? MasterSource есть, а по каким полям связывать нужно программно? или в sql прописывать параметрами?

Добавлено спустя 13 часов 47 минут 52 секунды:
вопрос решён, ошибка оказалась в установке свойств визуальных компонентов (грид, навигатор), бред конечно, не понимаю как блокировка грида может быть связана с постом датасета, но... опенсорс такой опенсорс
ronin
постоялец
 
Сообщения: 174
Зарегистрирован: 27.01.2010 00:14:46


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru