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

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

Сообщение Hallo » 28.08.2006 (Пн) 17:45

Угу.. этот момент прояснил, спс.
Еще вопросик...
Код: Выделить всё
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

Этот код не работает. То есть после выполнения первого цикла... ind_2 не увеличивается с того момента как закончился ind_1, а остается равным значению последнего ind_1. В чем причина?

И последний вопрос... как собственно залить, если получил ты эти индексы? На бумаге все хорошо.. а вот на экран не могу перенести.
Вот есть:
Код: Выделить всё
x0=1000 + h * comp_ind(ind_1)
x1=1000 + h * close_ind(ind_2)
y0=1000 + h * top_ind(ind_3)
y1=1000 + h * base_ind(ind_4)


Правильно? И если да, то каким образом засунуть в цикл?

Для наглядности http://surreal-clan.com/2.jpg

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

Сообщение Алексей К. » 29.08.2006 (Вт) 7:58

Код: Выделить всё
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

Этот код не работает

и не будет, ты его пробовал запускать? - похоже что нет: nex i, где у тебя открытие рекордсета?
надо открывать так:
Код: Выделить всё
rs.open "select comp_date, close_date from таблица"

В циклах у тебя курсор всегда стоит на одной записи, добавь в тела обоих переход на следующую запись:
Код: Выделить всё
rs.movenext

После первого цикла тебе необходимо опять вернуться на первую запись, иначе ты во втором цикле будешь стоять на последней, после первого цикла добавь:
Код: Выделить всё
rs.movefirst

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

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

Сообщение Hallo » 29.08.2006 (Вт) 10:32

MoveNext есть, просто не написал здесь... Забудь про то, что выше. Это я от спешки написал.

Код: Выделить всё
08.01 - 1
26.02 - 2 
03.03 - 3 
03.03 - 4 
04.03 - 5 
13.03 - 6 
18.03 - 7
18.03 - 8 
21.03 - 9
01.01.3000 - 10


Вот смотри, такой массив я получаю когда:
Код: Выделить всё
Открываю первый раз
....
Redim comp_array((rs.RecordCount) * 2 - 1)
for i=0 to rs.RecordCount - 1
     comp_array(i) = rs.Fields("comp_date")
     rs.MoveNext
next i

Открываю второй раз
...
for i=(rs.RecordCount) * 2 to (rs.RecordCount) * 2 - 1
     comp_array(i) = rs.Fields("close_date")
     rs.MoveNext
next i

Сортирую получившийся массив
....
Формирую индексы
Последний раз редактировалось Hallo 30.08.2006 (Ср) 10:30, всего редактировалось 1 раз.

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

Сообщение Hallo » 29.08.2006 (Вт) 20:57

И что делать дальше? Я уже запутался. :(

Как мне подставить в уравнение нужный индекс? Там же не по порядку нужно, а по открытию\закрытию:

Код: Выделить всё
21.03 - 01.01.3000;
04.03 - 18.03;
13.03 - 18.03;
08.01 - 03.03;
26.02 - 03.03;


То есть формировать еще два массива отдельных? А потом проверять при формировании индексов эл-ты на совпадение? И если comp_close_d(1)=comp_close_dstart(i) то кидать индекс в один массив, а если нет в другой?\
Но как такое сделать?

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

Сообщение Hallo » 31.08.2006 (Чт) 10:59

Сделал, так... не знаю может можно легче :) Это только даты.
Код: Выделить всё
ind1 = 1
g = 0
a = 0
b = 0
For i = 0 To countD * 2 - 1
     If i > 0 Then
        If comp_close_d(i) <> comp_close_d(i - 1) Then
        ind1 = ind1 + 1
        End If
     End If
     
     For j = 0 To countD - 1
        ex = False
        If comp_close_sd(j) = comp_close_d(i) Then
           a = a + 1
           ind1_a(a) = ind1
           ex = True
           Exit For
        End If
     Next j
     
     If ex = False Then
        b = b + 1
        ind2_a(b) = ind1
     End If
Next i

'Просто проверка
For i = 1 To countD * 2
x1 = 1000 + 850 * ind1_a(i)
x2 = 1000 + 850 * ind2_a(i)
If ind1_a(i) > 0 And ind2_a(i) > 0 Then
Picture1.Line (x1, 1000)-(x2, 1200), , BF
End If
Next i


А вот глубины еще хуже... И этот алгоритм не подойдет. Там так:
Код: Выделить всё
1380 - 1386
1388 - 1390
1390 - 1394
1398 - 1403
1398 - 1406

То есть повторяются еще и в разных столбцах. Не знаю пока как сделать.
+
Потом надо как то еще и узнать какие индексы поставлять при нахождении y, при заданном x.

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

Сообщение Hallo » 01.09.2006 (Пт) 10:13

Все так я сделал это :)
Если кому нибудь пригодиться могу выложить

Пред.

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

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

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

    TopList