Страница 1 из 1

Добавлено: 25 Май 2004, 10:19
Гость
Hallo All!

Как сделать сортировку в BrowseBox'e по полю из связанной таблицы ?
Пробовал перед открытием VIEW делать PrimTable{PROP:Order}'+JoinedTable:Field'
- выводит пустой BrowseBox. BIND поля сделал.
Пользую C55EE c ШВС.

--
Mfg,
Anton mailto:ustim@web.de

(Добавление)

А сама таблица JoinedTable описана во VIEW?
И потом - непонятно что такое PrimeTable?
Если это FILE, то - читай доку - свойство {PROP:Order} применимо только к структуре VIEW.
Т.е. у тебя должна быть VIEW-структура типа:

Код: Выделить всё

MyView  VIEW(PrimTable)
          PROJECT(PrimTable fields)
          JOIN(JoinedTable:JoinKey,PrimTable:JoinFields)
            PROJECT(как минимум JoinedTable:Field)
          END
        END

  ...
  MyView{PROP:Order} = '+JoinnedTable:Field'
  Open(MyView)
  Set(MyView)
  ! Вот теперь оператор NEXT будет считывать записи
  ! из выборки MyView, отсортированные по вышеназванному полю.

=============================
С уважением, Олег А. Руденко.
Oleg_Rudenko@mail.ru
Oleg_Rudenko@mail333.com
Библиотека DynaLib
http://dynalib.narod.ru

(Добавление)

Все так и сделано :( Но не работает.
Правда, сделано в контексте шаблонов для BrowseBox от ШВС. Может там какая-то нестыковка ?

--
Mfg,
Anton
Написал: ClaList(2)

Добавлено: 26 Май 2004, 10:23
Гость
Да нет, там все должно быть нормально!
А вообще-то, раз такое дело, было-бы неплохо бросить сюда две вырезки из сгенеренного кода:
- из секции данных - обьявление рабочей VIEW
- непосредственно код вокруг OPEN(VIEW).

Ну, или бросить исходник этой проблемной процедурки.

А, кстати, файл JoinedTable открыт?

=============================
С уважением, Олег А. Руденко
Написал: ClaList(2)

Добавлено: 27 Май 2004, 10:40
Гость
В секции "Перед открытием VIEW" cтавлю
BRW1::View:Browse{PROP:Order}='+ENT:Title'.
Больше вставок нет. Все остальное - стандартный BrowseBox.
После запуска получаю пустой список :(
Мистика какая-то.

--
Mfg,
Anton mailto:ustim@web.de

А если убрать определение ORDER-а? Нормально будет работать?
Все таки, хотелось-бы увидеть и сам BRW1::View:Browse!
Все необходимые для VIEW файлы, надеюсь, включены в список рабочих файлов процедуры?

=============================
С уважением, Олег А. Руденко

да не мистика, раз перед открытием View устанавливаешь PROP:Order, то не забудь после открытия View сделать SET(View) и будет тебе счастье.

Andrew Myalin
andrew@arsis.ru
http://mavcla.arsis.ru (MAV Direct ODBC)
ICQ: 10659412
Yahoo group: clarion@yahoogroups.com
Написал: ClaList(2)

Добавлено: 27 Май 2004, 19:39
Гость
Спасибо, и правда все заработало. Ура!
Но... умер локатор, рутина LocateRecord для BrowseBox не работает :(
Проблема уже поднималась - но каково ж решение ?

Всем спасибо, проблема решена!!!
Нужно было использовать не SET(View), а SET(View,1) - тогда включается поиск по полю из ORDER.

--
Mfg,
Anton
Написал: ClaList(2)

Добавлено: 28 Май 2004, 10:05
Гость
Блин! Ты внимательно читал мое первое письмо?!
Если нет - сам виноват - потерял несколько дней!
Я же там написал работающий код ВСЕГО из трех строчек, и третьей как раз и был SET!

Вот и думай после этого - а стоит-ли отвечать на письма?! Если ответы не читают - зачем тогда задавать вопрос?

=============================
С уважением, Олег А. Руденко

Просвети пожалуйста, как это у тебя локатор заработал, если как ты писал
поле для Prop:order связанное, т.е. ключа для нормальной сортировки по
нему не построишь (только, если по коду(ID) сортировать):-), а чтобы локатор
без ключа работал это для меня что-то новое.

P.S. Как пишут парни из BoxSoft, в help'e к своему SUPERBROWSE(темплэйт ActionHeaders), они отчаянно бьются над решением этой проблемы, но до сих пор как видно ничего не добились. А тут оказывается и решать то ничего не надо 'SET(View,1)' и все дела. Лично у меня, что так, что этак, но без ключевого поля локатор пахать отчаянно отказывается???

"Дмитрий Гудков" <gudkov_net@mail.ru>
Написал: ClaList(2)

Добавлено: 29 Май 2004, 0:21
Гость
Не знаю, локатор у меня заработал или не локатор ;) Я в эти термины не вникал Факт в том, что по значению поля для ORDER переданному в рутину LocateRecord - в Browse селектирутся соответствующая запись, что и нужно было сделать.

--
Mfg,
Anton

Добавлено: 31 Май 2004, 10:03
Гость
Нужно было использовать не SET(View), а SET(View,1) - тогда включается поиск по полю из ORDER.
TO Rudenko: хто ж думал, что это так критично :(
Просвети пожалуйста, как это у тебя локатор заработал, если как ты писал поле для Prop:order связанное, т.е. ключа для нормальной сортировки по нему не построишь (только, если по коду(ID) сортировать) :), а чтобы локатор без ключа работал это для меня что-то новое.
Не знаю, локатор у меня заработал или не локатор ;) Я в эти термины не вникал Факт в том, что по значению поля для ORDER переданному в рутину LocateRecord - в Browse селектирутся соответствующая запись, что и нужно было сделать.

--
Mfg,
Anton mailto:ustim@web.de

Вот так, на! А основы работы с наборами данных типа файл (FILE) и выборка (VIEW), надеюсь, знаешь?
Какое основное условие последовательного чтения записей?
Правильно, - выставится на начальную запись и задать порядок движения. Т.е. выполнить SET()!
Ты попробуй написать:

Код: Выделить всё

  OPEN(File)
  Loop
    Next(File); if ErrorCode() then Break.
    Message(...)
  .
Практически в подавляющем большинстве случаев ты ничего не прочитаешь! Точно так-же и с VIEW.
Не знаю, локатор у меня заработал или не локатор ;) Я в эти термины не вникал Факт в том, что по значению поля для ORDER переданному в рутину LocateRecord - в Browse селектирутся соответствующая запись, что и нужно было сделать.
Коллега, задавая вопрос, очевидно упустил из виду, что перед этим шла речь как раз о том, что-бы создать ключ чтения. Который и был успешно создан свойством ORDER!
А локатору, в принципе, ничего больше и не нужно - есть ключ, значит будет его использовать для своей работы.

=============================
С уважением, Олег А. Руденко
Написал: ClaList(2)