Гость
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Простая программа рисования данных из базы / 16 сообщений из 16, страница 1 из 1
26.01.2011, 18:39
    #37080341
TAIPHOON
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простая программа рисования данных из базы
Доброго времени суток!
Появилась необходимость показать одним писакам, что такое оптимальный код (или удостовериться, что PowerBuilder этого не умеет):). Дабы сразу не закидали камнями скажу, что их софт формирует табличку из 21 столбца и 16 строк примерно 3-5 минут. Я писал аналог на С++Builder 5, там это выполнялось менее секунды.
Хочу скомпилить приложение, которое будет выполнять данный фрагмент. PowerBilder 8 вижу впервые:).
Теперь постановка задачи:
Имеется база на постгресе. В ней интересует пара табличек. Что бы не формировать сводную таблицу (много вложений), проще всего вручную пройтись по значениям и нарисовать. Нагуглил, что можно делать во так:
Код: plaintext
1.
dw_1.Modify('create rectangle(band="qw" x=10 y=10 height=120 width=137 name="qwe" visible="1" brush.hatch="6" brush.color="0" pen.style="0" pen.width="5" pen.color="16777215" background.mode="2" background.color="0")' )
Но ничего не рисуется.
Итого вопросы:
1. Как правильно связаться с базой и открыть запрос?
2. Как нарисовать прямоугольник с заданными координатами и заданного цвета (список параметров не нашёл:().

Заранее спасибо всем откликнувшимся.
...
Рейтинг: 0 / 0
26.01.2011, 23:29
    #37080677
VanoR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простая программа рисования данных из базы
1. например так
2. использовать заранее подготовленную оформленную так как вам нужно DataWindow.
потом пишете
Код: plaintext
1.
dw_1.SetTransObject(SQLCA);
dw_1.Retrieve();
и PowerBuilder рисует таблицу из цветных прямоугольников с данными из базы внутри. Не думаю что это будет выполняться медленней чем С++Builder 5
...
Рейтинг: 0 / 0
27.01.2011, 08:29
    #37080853
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простая программа рисования данных из базы
TAIPHOON...интересует пара табличек. Что бы не формировать сводную таблицу (много вложений), проще всего вручную пройтись по значениям и нарисовать.Можно про это поподробнее?
...
Рейтинг: 0 / 0
27.01.2011, 15:46
    #37082255
sboyko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простая программа рисования данных из базы
TAIPHOONДоброго времени суток!
Появилась необходимость показать одним писакам, что такое оптимальный код (или удостовериться, что PowerBuilder этого не умеет):). Дабы сразу не закидали камнями скажу, что их софт формирует табличку из 21 столбца и 16 строк примерно 3-5 минут. Я писал аналог на С++Builder 5, там это выполнялось менее секунды.
Хочу скомпилить приложение, которое будет выполнять данный фрагмент. PowerBilder 8 вижу впервые:).
Теперь постановка задачи:
Имеется база на постгресе. В ней интересует пара табличек. Что бы не формировать сводную таблицу (много вложений), проще всего вручную пройтись по значениям и нарисовать. Нагуглил, что можно делать во так:
Код: plaintext
1.
dw_1.Modify('create rectangle(band="qw" x=10 y=10 height=120 width=137 name="qwe" visible="1" brush.hatch="6" brush.color="0" pen.style="0" pen.width="5" pen.color="16777215" background.mode="2" background.color="0")' )
Но ничего не рисуется.
Итого вопросы:
1. Как правильно связаться с базой и открыть запрос?
2. Как нарисовать прямоугольник с заданными координатами и заданного цвета (список параметров не нашёл:().

Заранее спасибо всем откликнувшимся.
А что такое band="qw" ?
...
Рейтинг: 0 / 0
27.01.2011, 17:11
    #37082532
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простая программа рисования данных из базы
TAIPHOON,

А Modify в качестве результата возвращает позицию, где в синтаксисе ошибка.
...
Рейтинг: 0 / 0
27.01.2011, 19:21
    #37082814
TAIPHOON
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простая программа рисования данных из базы
PL99TAIPHOON...интересует пара табличек. Что бы не формировать сводную таблицу (много вложений), проще всего вручную пройтись по значениям и нарисовать.Можно про это поподробнее?
Табличка - график работы. Чем делать сводную, берём время начала работы в указаный день и окончания - нарисовали прямоугольник. И так семь раз. Всё. Очень быстро работает. А делать мега сводный запрос будет долго обрабатыавться.
Локшин МаркTAIPHOON,
А Modify в качестве результата возвращает позицию, где в синтаксисе ошибка.
Возвращается пустая строка:(. Кстати как тут поставить брекпоинты?
sboykoА что такое band="qw" ?
Самому любопытно)) взял из какого то примера.
VanoR1. например так

А разве использовать глобальное подключение правильно? Мне казалось что как то через компонент transaction. А как ODBC на постгрес натравить?
VanoR2. использовать заранее подготовленную оформленную так как вам нужно DataWindow.
потом пишете
Код: plaintext
1.
dw_1.SetTransObject(SQLCA);
dw_1.Retrieve();
и PowerBuilder рисует таблицу из цветных прямоугольников с данными из базы внутри. Не думаю что это будет выполняться медленней чем С++Builder 5
Для этого нужна сводная таблица, а она будет долго формироваться, кроме того некоторые из прямоугольников будут залиты только на половину:).
...
Рейтинг: 0 / 0
28.01.2011, 10:04
    #37083499
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простая программа рисования данных из базы
TAIPHOONPL99пропущено...
Можно про это поподробнее?
Табличка - график работы. Чем делать сводную, берём время начала работы в указаный день и окончания - нарисовали прямоугольник. И так семь раз. Всё. Очень быстро работает. А делать мега сводный запрос будет долго обрабатыавться.
Если у вас есть набор некий данных, то можете попробовать сделать аналогично тому, как сделано в приаттаченном файле.
А лучше, сформулируйте исходную задачу в терминах DLL. Желательно с тестовыми данными.
...
Рейтинг: 0 / 0
29.01.2011, 19:16
    #37086224
TAIPHOON
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простая программа рисования данных из базы
PL99Если у вас есть набор некий данных, то можете попробовать сделать аналогично тому, как сделано в приаттаченном файле.
А лучше, сформулируйте исходную задачу в терминах DLL. Желательно с тестовыми данными.
Я очень плохо разбираюсь в PB, как импортировать данный код? И сорри, но я не в курсе, что такое "в терминах DLL":(.
Постараюсь полностью описать задачу:
Имеется график работы врачей и записи к ним на приём. Необходимо нарисовать таблицу, где строками будет время с интервалом в пол часа, а в столбцах день недели+Фамилия врача т.е. на каждый день недели есть столько столбцов, сколько врачей работает в этот день. Если полный выходной, просто пустой столбец. Ячейка заполняется на половину, если в это время врач ведёт приём, и полностью, если на это время записан пациент. На данный момент разработчики делают мега запрос с кучей пересозданий таблиц вложений. Я хочу перенести данное действо с сервера на клиента, т.к. задача лишь показать на экран.
1. Открываем график работы на заданный понедельник, смотрим сколько человек работает - делаем шапку.
2. Проходим по каждому врачу и зарисовываем половинки ячеек.
3. Открываем запись на приём и прорисовываем вторые половинки ячеек.
На C++Builder это делается тривиально рисованием на форме (естественно сначала в памяти, а потом шлёпаем на форму при перерисовке формы). Тут я на могу понять идеологии программирования:(.
...
Рейтинг: 0 / 0
29.01.2011, 19:48
    #37086250
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простая программа рисования данных из базы
TAIPHOONНа C++Builder это делается тривиально рисованием на форме (естественно сначала в памяти, а потом шлёпаем на форму при перерисовке формы). Тут я на могу понять идеологии программирования:(.
Забей. Эхотаг не настолько примитивен, чтобы освоить его за час. Задача не из сложных, но если пытаться копировать C++Builder - получится epic fail. Нормальный способ сделать это на эхотаге - ХП на сервере, выдающая какой надо набор данных, и crosstab на клиенте.
...
Рейтинг: 0 / 0
30.01.2011, 22:48
    #37087247
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простая программа рисования данных из базы
TAIPHOONНа C++Builder это делается тривиально рисованием на форме (естественно сначала в памяти, а потом шлёпаем на форму при перерисовке формы). Тут я на могу понять идеологии программирования:(.
Здесь возмоможен аналогичный подход, но рисовать нужно не на форме, а создавать объекты внутри DataWindow (можно кончено и на форме извратиться, но это совсем сложно выйдет), или использовать CrossTab, как уже предложили.
Однако "с наскока" это действительно не выйдет сделать - придется недельку минимум поучить PB. Проблема, как я понимаю, по тому что описано Вами - в кривом запросе (запросах) к БД, а не в построении таблички. Пусть оптимизируют запросы. Индексы например построют...
...
Рейтинг: 0 / 0
31.01.2011, 12:17
    #37087900
TAIPHOON
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простая программа рисования данных из базы
Локшин МаркЗдесь возмоможен аналогичный подход, но рисовать нужно не на форме, а создавать объекты внутри DataWindow (можно кончено и на форме извратиться, но это совсем сложно выйдет), или использовать CrossTab, как уже предложили.
Однако "с наскока" это действительно не выйдет сделать - придется недельку минимум поучить PB. Проблема, как я понимаю, по тому что описано Вами - в кривом запросе (запросах) к БД, а не в построении таблички. Пусть оптимизируют запросы. Индексы например построют...
Скорее всего рисовать в DataWindow, но что то не получается:(
Где бы почитать про параметры?
...
Рейтинг: 0 / 0
31.01.2011, 15:26
    #37088637
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простая программа рисования данных из базы
TAIPHOONЯ очень плохо разбираюсь в PB, как импортировать данный код? В library painter выбрать пункт меню Entry->Import.
Не следует думать, что пример у вас заработает, ему еще нужен какой-нибудь Oracle. Но, как я понял, у вас есть набор данных, который вы собираетесь отображать, не так ли?

TAIPHOONИ сорри, но я не в курсе, что такое "в терминах DLL":(.Прошу прощения, конечно же, DDL. Меня интересует структура данных, для которых выполняется "мега сводный запрос".

TAIPHOONПостараюсь полностью описать задачу:
Имеется график работы врачей и записи к ним на приём. Необходимо нарисовать таблицу, где строками будет время с интервалом в пол часа, а в столбцах день недели+Фамилия врача т.е. на каждый день недели есть столько столбцов, сколько врачей работает в этот день. Если полный выходной, просто пустой столбец. Ячейка заполняется на половину, если в это время врач ведёт приём, и полностью, если на это время записан пациент. На данный момент разработчики делают мега запрос с кучей пересозданий таблиц вложений. Я хочу перенести данное действо с сервера на клиента, т.к. задача лишь показать на экран.
1. Открываем график работы на заданный понедельник, смотрим сколько человек работает - делаем шапку.
2. Проходим по каждому врачу и зарисовываем половинки ячеек.
3. Открываем запись на приём и прорисовываем вторые половинки ячеек.
На C++Builder это делается тривиально рисованием на форме (естественно сначала в памяти, а потом шлёпаем на форму при перерисовке формы). Тут я на могу понять идеологии программирования:(.Вы полагаете, что два запроса будут выполняться быстрее, чем один? Такое, конечно, возможно, но это явным образом указывает на малый радиус рук архитектора БД.

Собственно говоря, я солидарен с Марком, Локшин МаркПусть оптимизируют запросы.
...
Рейтинг: 0 / 0
31.01.2011, 19:45
    #37089197
TAIPHOON
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простая программа рисования данных из базы
PL99В library painter выбрать пункт меню Entry->Import.

Импорт неактивен:(. Нагуглил, что с 8 до 10 версии ПБ изменился формат.
PL99Не следует думать, что пример у вас заработает, ему еще нужен какой-нибудь Oracle. Но, как я понял, у вас есть набор данных, который вы собираетесь отображать, не так ли?

TAIPHOONИ сорри, но я не в курсе, что такое "в терминах DLL":(.Прошу прощения, конечно же, DDL. Меня интересует структура данных, для которых выполняется "мега сводный запрос".
Прочитал в вики про ДДЛ.
Вот структура необходимых таблиц (из серии "аффтар жжот. пеши исчо"):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
CREATE TABLE m.emp
(
  id int8 NOT NULL DEFAULT nextval('emp_id_seq'::regclass),
  fname varchar( 50 ),
  mname varchar( 50 ),
  lname varchar( 50 ),
...
  color numeric DEFAULT  16777215 
...
)
CREATE TABLE m.raspisanie
(
  id int8 NOT NULL DEFAULT nextval('raspisanie_id_seq'::regclass),
  emp int8,
  time_beg timestamptz,
  time_end timestamptz,
...
)
CREATE TABLE m.sheduling
(
  id int8 NOT NULL DEFAULT nextval('sheduling_id_seq'::regclass),
  days int8 NOT NULL,
  emp int8 NOT NULL,
  patient int8 NOT NULL,
  cur_date timestamptz DEFAULT now(),
  status char( 1 ) DEFAULT 'N'::bpchar,
  period numeric DEFAULT  30 ,
  notes varchar( 100 ),
...
)
Привожу фрагменты таблиц, т.к. товарищи писатели загоняют всё в одну таблицу и разобраться в этом изобилии полей очень сложно. Ключи есть.
Сводная таблица (заранее не определено количество столбцов в день) будет формироваться не быстро, даже если её нормально написать. А пара тривиальных запросов выполняться практически мгновенно.

PL99Вы полагаете, что два запроса будут выполняться быстрее, чем один? Такое, конечно, возможно, но это явным образом указывает на малый радиус рук архитектора БД.
Собственно говоря, я солидарен с Марком, Локшин МаркПусть оптимизируют запросы.
С радиусом там точно проблема. Там выполняется пусть и один, но очень большой запрос с перезаполнением таблиц (одна из которых имеет количество строк примерно кол-во врачей*300). Хотя для вывода нужны данные трёх таблиц (справочник врачей, график приёма, запись на приём), фрагменты которых я привёл.
...
Рейтинг: 0 / 0
01.02.2011, 11:00
    #37089997
maniac85
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простая программа рисования данных из базы
TAIPHOONСводная таблица (заранее не определено количество столбцов в день) будет формироваться не быстро, даже если её нормально написать. А пара тривиальных запросов выполняться практически мгновенно.
это пара простых селектов выполнится почти мгновенно, а потом же вы их будете циклами перебирать
это все равно будет медленнее чем взять из базы сразу то что надо

честно говоря не совсем понимаю что там за такой тяжелый запрос, врачей (столбцов) явно не много, строк тоже не должно быть много, там же надеюсь с интервалом в полчаса за какой-то небольшой период а не все что в базе есть?)
...
Рейтинг: 0 / 0
04.02.2011, 11:16
    #37097298
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простая программа рисования данных из базы
TAIPHOONВот структура необходимых таблиц...Прошу прощения, никак руки не дойдут до ваших таблиц. Задача еще не потеряла актуальность?
...
Рейтинг: 0 / 0
16.02.2011, 19:30
    #37120933
TAIPHOON
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простая программа рисования данных из базы
Период - одна неделя.
Задача актукальна, просто был в командировке.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Простая программа рисования данных из базы / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]