Глюк с ВБ+Аксцесом
От: Hludens  
Дата: 02.07.05 10:53
Оценка:
Написал программку анализа данных.
ее задача получать поток данных и обрабатывать последние 10 (каждый раз). определяем как давно встречался этот признак, на основе результата обработки принимается решение.

реализовано следующим образом:





db.Execute ("insert into RES (d) values (" + Str(d)+ ")") 
' добавляем в таблицу новое значение 

Set rs = db.OpenRecordset("select s.*,res.id from res, s where res.d = s.n") 
' таблица s содержит все возможные результаты данных с указанием значений их признаков для анализа 

rs.MoveLast 

For i = 1 To 10 
For j = 1 To 9 ' обрабатываем 9 признаков (от 1 по 9) 
If rs.Fields(j) Then mstavka(j, 4) = i ' собственно поиск 
Next j 
rs.MovePrevious 
Next i


Как видите ничего сложного, но!
система исправно работает, получает 1000-1500 значений а потом начинается что то непонятное
Вот пример с результатом полученные после 2000 значений

for i= 1 to 10: ? rs.Fields(10):rs.MovePrevious :next i 
 2182 
 2181 
 2175 
 2172 
 2176 
 2178 
 2170 
 2179 
 2169 
 2180

вполне очевидно что правильные только 2 первых значения

Кто либо сталкивался с этим?
Что делать?
Мне просто в голову ничего не приходит!
Re: А работающий код можно...
От: Аноним  
Дата: 02.07.05 11:36
Оценка:
Здравствуйте, Hludens, Вы писали:

H>Написал программку анализа данных.

H>ее задача получать поток данных и обрабатывать последние 10 (каждый раз).
Это понятно...
H>определяем как давно встречался этот признак,
Какой признак? Признак чего? "Давно" в последних десяти или во всём диапазоне?
H>на основе результата обработки принимается решение.
Это понятно...

H>реализовано следующим образом:

!!!неработает!!!

PS: код с объявлением переменных плз...
Re[2]: А работающий код можно...
От: Hludens  
Дата: 05.07.05 12:35
Оценка:
H>>определяем как давно встречался этот признак,
А>Какой признак? Признак чего? "Давно" в последних десяти или во всём диапазоне?

Данные поступают в виде чисел. для каждого числа уже ранее определены признаки (9 штук тип логический)
создана таблица вида
число, признак_1, признак_2, и т.д.

Собственно важно как давно последний раз встречался каждый признак (за последние 10 раз)
Этим занимается внутренний цикл (работает как часы, надежно и просто).


А>!!!неработает!!!

хм... что именно?
Я разумется не показывал в примере подключение к базе.
А двумерность массива вызвана необходимостью (в нем еще кое что хранится)
но это ни на что не влияет, с тем же успехом можно использовать одномерный масив.



А>PS: код с объявлением переменных плз...

Собственно объявляем db и rs для работы с ДАО 3.6 и простенький двумерный целочисленный массив
db подключаем к базе данных написаной как видно из заголовка в Аксцессе
dim mstavka(9, 4)  as integer



Вот рабочий код для проверки таблица RES содержит два поля id и d
set db=opendatabase("data1.mdb")
for t=1 to 2000
D=int(10*rnd(1))
db.Execute ("insert into RES (d) values (" + Str(d)+ ")") 
Set rs = db.OpenRecordset("select res.id from res") 
rs.MoveLast 
For i = 1 To 10 
debug.print rs.Fields(0)
rs.MovePrevious 
Next i
next t
Re[3]: А работающий код можно...
От: Hludens  
Дата: 05.07.05 12:39
Оценка:
благодарю за толчек
проверил работу того кода что привел и обнаружил что он не дает ошибки
это заставило покопаться и внимательно посмотреть на результаты, оказалось они как то странно сортировались по умолчанию
короче проблема решилась добавлением в запрос
order by res.id
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.