Написал программку анализа данных.
ее задача получать поток данных и обрабатывать последние 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 первых значения
Кто либо сталкивался с этим?
Что делать?
Мне просто в голову ничего не приходит!
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
благодарю за толчек
проверил работу того кода что привел и обнаружил что он не дает ошибки
это заставило покопаться и внимательно посмотреть на результаты, оказалось они как то странно сортировались по умолчанию
короче проблема решилась добавлением в запрос
order by res.id