Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Функция BookmarkValid


LDV ©   (2012-01-30 12:16:00) 

По коду: если таблица CF_Table не содержит записей Bookmark2 = nil. Далее, когда в блоке finally я проверяю на валидность Bookmark2 валится исключение Access Violation. Разве функция не должна в этом случае вернуть false без иключения?
 


Bookmark1 := G_Controller.G_Table.GetBookmark;
     try
       Bookmark2 := G_Controller.CF_Table.GetBookmark;
       try
         if ActionOn = ACTION_ON_CATEGORIES then
           {  }
           Assert(G_Controller.G_FindById1(CATEGORIES_GROUP))
           {  }
         else
           {  }
           Assert(G_Controller.G_FindById1(PRODUCTS_GROUP));
           {  }
         Query.First;
         while not Query.Eof do
         begin
           SortableFieldList := TObjectList.Create;
           try
             for I := 0 to FieldNameList.Count - 1 do
             begin
               Field := Query.FindField(FieldNameList[I]);
               if (Field = nil) or
                 (FCAP_HideFieldNameList.IndexOf(FieldNameList[I]) <> -1) then
               begin
                 if G_Controller.CF_FindByName1(FieldNameList[I]) then
                   Field := G_Controller.GX_GetField(FCAP_Id1Field.AsInteger)
                 else
                   raise Exception.CreateResFmt(@FIELD_NOT_FOUND,
                     [FieldNameList[I]]);
                 {  }
                 Assert(Field <> nil);
                 {  }
               end;
               SortableFieldList.Add(TSortableField.Create(
                 Boolean(FieldNameList.Objects[I]), FieldNameList[I],
                 Field.DataType, Field.Value));
             end;
             CAP_IdList.AddObject(Query.Fields[0].AsString,
               SortableFieldList);
           except
             SortableFieldList.Free;
             raise;
           end;
           Query.Next;
         end;
       finally
         if G_Controller.CF_Table.BookmarkValid(Bookmark2) then // <- Ошибка, если Bookmark2 = nil
           G_Controller.CF_Table.GoToBookmark(Bookmark2);
         G_Controller.CF_Table.FreeBookmark(Bookmark2);
       end;
     finally
       if G_Controller.G_Table.BookmarkValid(Bookmark1) then
         G_Controller.G_Table.GoToBookmark(Bookmark1);
       G_Controller.G_Table.FreeBookmark(Bookmark1);
     end;


Сергей М.   (2012-01-30 14:15:00) [1]


> Они разные


А, ну дв ..

G и CF


icWasya   (2012-01-30 14:13:00) [2]

Поведение BookmarkValid сильно зависит от используемой базы данных.
>А накой шиш делать две одинаковых закладки ?
Они разные.


Сергей М.   (2012-01-30 12:56:00) [3]


> Bookmark1 := G_Controller.G_Table.GetBookmark;
>       try
>         Bookmark2 := G_Controller.CF_Table.GetBookmark;


А накой шиш делать две одинаковых закладки ?


Ega23   (2012-01-30 12:40:00) [4]


> Разве функция не должна в этом случае вернуть false без
> иключения?


Разве у тебя нет исходника, чтобы посмотреть, что должна или не должна вернуть функция?


Наверх

Титульная страница Поиск, карта сайта Написать письмо