Вывод графика основываясь на данных базы Oracle

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Hallo
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 10.08.2006 (Чт) 16:01

Вывод графика основываясь на данных базы Oracle

Сообщение Hallo » 10.08.2006 (Чт) 16:49

Вообщем есть выборка из таблицы.
Нужно основываясь на данных из столбца (числовые выражения ест-но) построить график.
Подскажите как это реализовать или где можно почитать об этом можно..
Последний раз редактировалось Hallo 10.08.2006 (Чт) 17:05, всего редактировалось 1 раз.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 10.08.2006 (Чт) 17:05

MSChart Control

Hallo
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 10.08.2006 (Чт) 16:01

Сообщение Hallo » 10.08.2006 (Чт) 17:08

Спасибо :) Сейчас почитаю об этом....

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 11.08.2006 (Пт) 16:50

Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Hallo
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 10.08.2006 (Чт) 16:01

Сообщение Hallo » 11.08.2006 (Пт) 20:47

Вроде бы разобрался c Ms... Но пара вопросов (некоторые общие):

1. rs.RecordCount - глючит с Oracle? Все время выдает значение -1, причем rs.Fields.Count при этом прекрасно работает.

2. Из-за первого чтобы посчитать строки, получается надо второй Sql запрос c count() писать и открытие\закрытие базы делать?

Второй компонент посмотрю обязательно.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.08.2006 (Пт) 20:50

Странно... я поискал слово "recordcount" и сразу нашёл ответ... Наверное, я сделал что-то совсем неправильно...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Hallo
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 10.08.2006 (Чт) 16:01

Сообщение Hallo » 11.08.2006 (Пт) 20:58

О, сорь... Спс

Hallo
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 10.08.2006 (Чт) 16:01

Сообщение Hallo » 12.08.2006 (Сб) 19:51

Все что мог попробовал, но так и не понял как легенду переименовать?
С1 немного не то, что мне нужно :)

И второй вопрос, когда выбираю тип area у меня заливается вся область ниже верхнего графика его цветом, включая и те графики что под ним... как сделать чтобы каждая область своим цветом была?

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 14.08.2006 (Пн) 10:21

вот пример, может поможет:
У вас нет доступа для просмотра вложений в этом сообщении.

Hallo
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 10.08.2006 (Чт) 16:01

Сообщение Hallo » 15.08.2006 (Вт) 11:25

Я это видел, когда искал инфу... На самом деле там это не проясняется.

В настройках поля, есть такие парамерты, как:
Column (выбираешь номер столбца), ColumnCount(задаешь сколько столбцов всего должны отображаться) и ColumnLabel(название столбца и соответсвенно название его в легенде)... но как их использовать в коде я не понял.

И еще вопрос, кто нибудь делал чтобы при наведении на какой либо участок графика, появлялось его значение? Детализировать надо бы...

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 15.08.2006 (Вт) 13:06

Hallo писал(а):...В настройках поля, есть такие парамерты, как:
Column (выбираешь номер столбца), ColumnCount(задаешь сколько столбцов всего должны отображаться) и ColumnLabel(название столбца и соответсвенно название его в легенде)... но как их использовать в коде я не понял...

Вот так. Только это секрет! :)
Код: Выделить всё
With Chart1
  .Column = 1
  .ColumnLabel = "Привет"
End With

Hallo
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 10.08.2006 (Чт) 16:01

Сообщение Hallo » 16.08.2006 (Ср) 10:55

Скажу по секрету, я это сразу попровал... Не вышло :)
Плохо смотрел в том файле, что Konst_One прикрепил. Получилось так:
Код: Выделить всё
With mschart1.plot.
       .SeriesCollection(1).DataPoints(-1).Brush.FillColor.Set 0, 0, 255
       .SeriesCollection(1).LegendText = ""
End with


Никто не подскажет, как вывести в текстовое поле значение, при нажатии на одну из точек графика?

Hallo
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 10.08.2006 (Чт) 16:01

Сообщение Hallo » 21.08.2006 (Пн) 11:17

Вообщем дописал я это... Дали еще одну задачу. Не знаю реально ли это сделать с MsChart или проще ручками.

Вообщем есть столбцы start_date, end_date, max, min, id.
Нужно на одной оси вывести все start_date, end_date, а на второй все max и min, отобранные по id.
При этом зав-ть не нужна... нужно чтобы от каждой даты\ выходила линия и от каждой max\min тоже. Там где они пересекают образуются прямоугольники, которые нужно закрасить.

Реально ли такое сделать в mschart?

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 21.08.2006 (Пн) 11:30

вряд ли, нужно искать профессиональный чарт-контрол

Hallo
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 10.08.2006 (Чт) 16:01

Сообщение Hallo » 21.08.2006 (Пн) 18:26

Они денег наверное стоят... :( Если знаете такие бесплатные, подскажите... :)
Можно ли с помощью стандартных так сделать?

Например сделать массив со всеми датами и массив со всеми значениями, которые отбираются при выборе id из combobox.
Можно ли сначала сделать линии разграфки, а потом вывести на них значения из массивов?
Последний раз редактировалось Hallo 22.08.2006 (Вт) 15:45, всего редактировалось 1 раз.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 21.08.2006 (Пн) 22:51

можно самому рисовать на Picture с помощью: PSet, Line, Circle - попробуй, алгоритм у тебя уже есть

Hallo
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 10.08.2006 (Чт) 16:01

Сообщение Hallo » 22.08.2006 (Вт) 15:50

А зачем circle?
Так как не рисовал, то прошу помощи... Расчерчил я график, число линий = RecordSet.

Но... как вывести названия на ними? И закрасить область с помощью PSet.
Нарисовал рисунок, для наглядности... http://surreal-clan.com/1.jpg

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 22.08.2006 (Вт) 15:58

PSet (X,Y), Color - поставить точку цвета Color в X,Y
Line (X1,Y2)-(X2,Y2), Color - нарисовать линию
Line (X1,Y2)-(X2,Y2), Color, B - нарисовать прямоугольник
Line (X1,Y2)-(X2,Y2), Color, BF - нарисовать заполненный прямоугольник
Circle (X,Y), Radius, Circle - нарисовать окружность
Lasciate ogni speranza, voi ch'entrate.

Hallo
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 10.08.2006 (Чт) 16:01

Сообщение Hallo » 22.08.2006 (Вт) 21:14

Ну окружность мне не нужна... Остальное в MSDN читал.
Попробую, конечно, строки базы перерисовать как заполненный прямоугольник, или на крайний случай разберусь как заливать точками область... но без примеров все равно тяжеловато.

А как вывести текст не написал :) А я не нашел такой метод... Print'ом что ли делать? :)

А лучше подскажите chart-control, который это делает... :)

Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Сообщение Алексей К. » 23.08.2006 (Ср) 7:19

Твоя диаграмма напоминает диаграмму Ганта, только в гантовской по оси ординат нет возможности изменять высоту закрашенного прямоугольника отдельно для каждого - у всех одинаковая высота. Если для тебе не критично то, чтобы у каждого прямоугольника была своя высота (в соответствии с макс и мин) - то юзай диаграмму ганта, а значения макс и мин выводи на оси ординат вместо подписей для каждого прямоугольника (вместо Market Research, Define Specification,... смотри диаграмму по первой нижней ссылке). Вот как выглядит диаграмма Ганта:

http://www.advsofteng.com/gallery_gantt.html

Это компонент ChartDirector, скачать его можно здесь:

http://www.advsofteng.com/download.html

В незарегистрированной версии снизу любой диаграммы выводится надпись "Unregistered ...." которую легко закрыть пустым фрэймом поместив его в нужно место :)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.08.2006 (Ср) 7:28

Да, текст выводится Print-ом.
А позиционируется CurrentX, CurrentY.
Lasciate ogni speranza, voi ch'entrate.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 23.08.2006 (Ср) 10:38

вот мой примерчик, может что для себя возьмешь:
У вас нет доступа для просмотра вложений в этом сообщении.

Hallo
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 10.08.2006 (Чт) 16:01

Сообщение Hallo » 23.08.2006 (Ср) 11:18

Все скачал. Спасибо. Пошел разбираться..
Если для тебе не критично то, чтобы у каждого прямоугольника была своя высота

В принципе нет... Надо будет узнать.

Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Сообщение Алексей К. » 24.08.2006 (Чт) 7:14

Вот наваял примерчик на вышеуказанном контроле.
У вас нет доступа для просмотра вложений в этом сообщении.

Hallo
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 10.08.2006 (Чт) 16:01

Сообщение Hallo » 24.08.2006 (Чт) 16:42

C этим чартом проблемка возникла, кто пользовался объясните:
Есть массив всех дат(открытия и закрытия), есть массив всех глубин(top и base), есть массивы отдельно по датам открытия и закрытия. Если работы еще ведутся, то дата закрытия в базе = 01.01.3000.

Первые два массива вывожу на оси...
Код: Выделить всё
Call c.xAxis().setLabels(start_close_d)
Call c.yAxis().setLabels(top_base)

Далее пишу
Код: Выделить всё
Call c.addBoxWhiskerLayer(start_d, close_d, Empty, Empty, Empty, &H00cc00, cd.SameAsMainColor, cd.SameAsMainColor)

Он рисует х.з. что...

Пробовал иначе (по примеру из документации Floating Box Chart)... top_t и base_t массивы глубин по столбцам. Обзываю оси:
Код: Выделить всё
Call c.xAxis().setLabels(start_close_d).setFontStyle("arialbd.ttf")
Call c.yAxis().setLabelStyle("arialbd.ttf")

Далее
Код: Выделить всё
Call c.addBoxLayer(top_t, base_t, &H00ff00, "")

Все отлично... Пытаюсь поменять местами даты и глубины... опять х.з что рисует. То есть вместо отметок дат на оси, он выводит огромные числа (10кк, 20кк, 30кк и т.д.)

Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Сообщение Алексей К. » 25.08.2006 (Пт) 7:49

Пытаюсь поменять местами даты и глубины... опять х.з что рисует.

Где поменять???? в коде или где???
То есть вместо отметок дат на оси, он выводит огромные числа (10кк, 20кк, 30кк и т.д.)

На какой оси, их две X и Y???

P.S. Формулируй четко: какую диаграмму ты хочешь постоить, и как хочешь чтобы она выглядела (т.е. что на оси X а что на оси Y), скриншоты приветствуются:)

Hallo
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 10.08.2006 (Чт) 16:01

Сообщение Hallo » 25.08.2006 (Пт) 16:57

1. Я вывожу на X глубины. Блоки рисует, только гранчные значения это (диапазон глубин). Когда пытаюсь вывести на X даты и соот-но сделать диапазон по датам... вместо дат появляются огрмоные значения.

Не понятный он какой то, а в примере (в док-ции) вместо массива дат выводят на X их граничные значения...
Код: Выделить всё
Call c.yAxis().setDateScale(DateSerial(2004, 8, 16), DateSerial(2004, 11, 22), 86400 * 7)

Когда я пытался в том же примере вместо них подставить массив... все блоки исчезли.

2. Пример того что нужно получить, я прикрепил в посте чуть раньше.

Вообщем забил я пока. Продолжил ручками... Сделал оси, вывел на них даты\глубины (все как надо). Расчерчил. Осталось самое гемморное - залить нужное. В индексах застрял...
[/code]

Hallo
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 10.08.2006 (Чт) 16:01

Сообщение Hallo » 28.08.2006 (Пн) 11:30

Блин.. народ подтолкните меня.. Я уже не соображаю :)

Смотрите, есть даты на координатной оси OX (выбранные из двух столбцов с помощью union):
Код: Выделить всё
08.01 ; 26.02 ; 03.03 ; 04.03; 13.03 ; 18.03 ; 21.03; 01.01.3000

Границы по OX:
Код: Выделить всё
21.03 - 01.01.3000;
04.03 - 18.03;
13.03 - 18.03;
08.01 - 03.03;
26.02 - 03.03;


Заливка делается таким образом:
x0 = 1000 + h(шаг через который проходят линии)*i1(индекс даты столбца открытия)
x1 = 1000 + h(шаг через который проходят линии)*i2(индекс даты столбца закрытия)

Я так понимаю надо сформировать массивs из всех дат открытия\закрытия и их индексов. То есть, если 26.02 - 03.03, то i1=2, а i2=3... и т.д.:
Код: Выделить всё
select comp_date, close_date from таблица
for i=0 to rs.recordcount - 1
     ind_1=ind_1+1
     comp_array(i) = rs.fields("comp")
     comp_ind(ind_1) = ind_1
next i
---------------------------
for i=0 to rs.recordcount - 1
     ind_2 = ind_1+1
     close_array(i) = rs.fields("close")
     close_ind(ind_2)=ind_2
nex i

То есть стало так:
Код: Выделить всё
08.01 - 1;
26.02 - 2;
04.03 - 3;
13.03 - 4;
21.03 - 5;

и
Код: Выделить всё
03.03 - 6;
03.03 - 7;
18.03 - 8;
18.03 - 9;
01.01.3000 - 10;


Что дальше? Как сделать, чтобы при 08.01-03.03 (и также с остальными повторяющимися, взять минимальный индекс)
Код: Выделить всё
x0 = 1000+h*1
x1 = 1000+h*6

и при 26.02-03.03
Код: Выделить всё
x0 = 1000+h*2
x1 = 1000+h*6(а не 7)...
Последний раз редактировалось Hallo 28.08.2006 (Пн) 11:36, всего редактировалось 2 раз(а).

Hallo
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 10.08.2006 (Чт) 16:01

Сообщение Hallo » 28.08.2006 (Пн) 11:31

Тьфу... случайно процитировал.

Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Сообщение Алексей К. » 28.08.2006 (Пн) 12:15

Замени:
Код: Выделить всё
03.03 - 6;
03.03 - 7;
18.03 - 8;
18.03 - 9;
01.01.3000 - 10;

на
Код: Выделить всё
03.03 - 6;
03.03 - 6;
18.03 - 7;
18.03 - 8;
01.01.3000 - 9;

Т.е. ты добиваешься того, чтобы у тебя правая граница (дата закрытия) для совпадающих дат в одном месте рисовалась а не в разных местах (из-за разных индексов)?
Если да, то алгоритм тебе такой: когда ты индексируешь пару дат (дата открытия и дата закрытия ) перед тем как присвоить ей индекс=индекс+1 проверь на совпадение с предыдущей парой и если совпадает - то индекс не увеличиваешь, а оставляешь текущем (как у пред. пары)

След.

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

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

Сейчас этот форум просматривают: Google-бот и гости: 1

    TopList  
cron