powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Простая программа рисования данных из базы
16 сообщений из 16, страница 1 из 1
Простая программа рисования данных из базы
    #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
Простая программа рисования данных из базы
    #37080677
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. например так
2. использовать заранее подготовленную оформленную так как вам нужно DataWindow.
потом пишете
Код: plaintext
1.
dw_1.SetTransObject(SQLCA);
dw_1.Retrieve();
и PowerBuilder рисует таблицу из цветных прямоугольников с данными из базы внутри. Не думаю что это будет выполняться медленней чем С++Builder 5
...
Рейтинг: 0 / 0
Простая программа рисования данных из базы
    #37080853
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TAIPHOON...интересует пара табличек. Что бы не формировать сводную таблицу (много вложений), проще всего вручную пройтись по значениям и нарисовать.Можно про это поподробнее?
...
Рейтинг: 0 / 0
Простая программа рисования данных из базы
    #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
Простая программа рисования данных из базы
    #37082532
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TAIPHOON,

А Modify в качестве результата возвращает позицию, где в синтаксисе ошибка.
...
Рейтинг: 0 / 0
Простая программа рисования данных из базы
    #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
Простая программа рисования данных из базы
    #37083499
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TAIPHOONPL99пропущено...
Можно про это поподробнее?
Табличка - график работы. Чем делать сводную, берём время начала работы в указаный день и окончания - нарисовали прямоугольник. И так семь раз. Всё. Очень быстро работает. А делать мега сводный запрос будет долго обрабатыавться.
Если у вас есть набор некий данных, то можете попробовать сделать аналогично тому, как сделано в приаттаченном файле.
А лучше, сформулируйте исходную задачу в терминах DLL. Желательно с тестовыми данными.
...
Рейтинг: 0 / 0
Простая программа рисования данных из базы
    #37086224
TAIPHOON
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PL99Если у вас есть набор некий данных, то можете попробовать сделать аналогично тому, как сделано в приаттаченном файле.
А лучше, сформулируйте исходную задачу в терминах DLL. Желательно с тестовыми данными.
Я очень плохо разбираюсь в PB, как импортировать данный код? И сорри, но я не в курсе, что такое "в терминах DLL":(.
Постараюсь полностью описать задачу:
Имеется график работы врачей и записи к ним на приём. Необходимо нарисовать таблицу, где строками будет время с интервалом в пол часа, а в столбцах день недели+Фамилия врача т.е. на каждый день недели есть столько столбцов, сколько врачей работает в этот день. Если полный выходной, просто пустой столбец. Ячейка заполняется на половину, если в это время врач ведёт приём, и полностью, если на это время записан пациент. На данный момент разработчики делают мега запрос с кучей пересозданий таблиц вложений. Я хочу перенести данное действо с сервера на клиента, т.к. задача лишь показать на экран.
1. Открываем график работы на заданный понедельник, смотрим сколько человек работает - делаем шапку.
2. Проходим по каждому врачу и зарисовываем половинки ячеек.
3. Открываем запись на приём и прорисовываем вторые половинки ячеек.
На C++Builder это делается тривиально рисованием на форме (естественно сначала в памяти, а потом шлёпаем на форму при перерисовке формы). Тут я на могу понять идеологии программирования:(.
...
Рейтинг: 0 / 0
Простая программа рисования данных из базы
    #37086250
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TAIPHOONНа C++Builder это делается тривиально рисованием на форме (естественно сначала в памяти, а потом шлёпаем на форму при перерисовке формы). Тут я на могу понять идеологии программирования:(.
Забей. Эхотаг не настолько примитивен, чтобы освоить его за час. Задача не из сложных, но если пытаться копировать C++Builder - получится epic fail. Нормальный способ сделать это на эхотаге - ХП на сервере, выдающая какой надо набор данных, и crosstab на клиенте.
...
Рейтинг: 0 / 0
Простая программа рисования данных из базы
    #37087247
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TAIPHOONНа C++Builder это делается тривиально рисованием на форме (естественно сначала в памяти, а потом шлёпаем на форму при перерисовке формы). Тут я на могу понять идеологии программирования:(.
Здесь возмоможен аналогичный подход, но рисовать нужно не на форме, а создавать объекты внутри DataWindow (можно кончено и на форме извратиться, но это совсем сложно выйдет), или использовать CrossTab, как уже предложили.
Однако "с наскока" это действительно не выйдет сделать - придется недельку минимум поучить PB. Проблема, как я понимаю, по тому что описано Вами - в кривом запросе (запросах) к БД, а не в построении таблички. Пусть оптимизируют запросы. Индексы например построют...
...
Рейтинг: 0 / 0
Простая программа рисования данных из базы
    #37087900
TAIPHOON
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Локшин МаркЗдесь возмоможен аналогичный подход, но рисовать нужно не на форме, а создавать объекты внутри DataWindow (можно кончено и на форме извратиться, но это совсем сложно выйдет), или использовать CrossTab, как уже предложили.
Однако "с наскока" это действительно не выйдет сделать - придется недельку минимум поучить PB. Проблема, как я понимаю, по тому что описано Вами - в кривом запросе (запросах) к БД, а не в построении таблички. Пусть оптимизируют запросы. Индексы например построют...
Скорее всего рисовать в DataWindow, но что то не получается:(
Где бы почитать про параметры?
...
Рейтинг: 0 / 0
Простая программа рисования данных из базы
    #37088637
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TAIPHOONЯ очень плохо разбираюсь в PB, как импортировать данный код? В library painter выбрать пункт меню Entry->Import.
Не следует думать, что пример у вас заработает, ему еще нужен какой-нибудь Oracle. Но, как я понял, у вас есть набор данных, который вы собираетесь отображать, не так ли?

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

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

Собственно говоря, я солидарен с Марком, Локшин МаркПусть оптимизируют запросы.
...
Рейтинг: 0 / 0
Простая программа рисования данных из базы
    #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
Простая программа рисования данных из базы
    #37089997
maniac85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TAIPHOONСводная таблица (заранее не определено количество столбцов в день) будет формироваться не быстро, даже если её нормально написать. А пара тривиальных запросов выполняться практически мгновенно.
это пара простых селектов выполнится почти мгновенно, а потом же вы их будете циклами перебирать
это все равно будет медленнее чем взять из базы сразу то что надо

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


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