Dbase, проблема при работе с базой

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Dbase, проблема при работе с базой

Сообщение Алексей К. » 10.06.2004 (Чт) 13:01

По чему так происходит:
База dbase4 (табличка 256 строк, 48 столбцов)
Подключаем:
Код: Выделить всё
Base = App.Path + "\"
Table = "g080603"
Set dbf = DAO.OpenDatabase(Base, False, False, "dBASE IV;LANGID=0x0419;CP=866;COUNTRY=0")
Set rs = dbf.OpenRecordset(Table, dbOpenTable)
rs.Close
a$ = "select * from " & Table
Set rs = dbf.OpenRecordset(a$)

Далее...
Вариант1:
Код: Выделить всё
rs.GetRows (1)
Form1.Label1.Caption = rs.Fields(1)

rs.Close
Set rs = Nothing
dbf.Close
Set dbf = Nothing

Вариант2:
Код: Выделить всё
For i = 1 To 30
rs.GetRows (i)
Form1.Label1.Caption = rs.Fields(1)
Form1.Label2.Caption = i
Next i
rs.Close
Set rs = Nothing
dbf.Close
Set dbf = Nothing

Первый вариант работает нормально - отображается запись в getrows(№строки) в 1-ом столбце. Т.е. любую запись в первом столбце можно получить.
А когда прогоняю в цикле (2 вариант) то выдает ошибки на отчтутсвие записей. Записи в базе точно есть. Через первый вариант , к примеру, вызываю 23 строку показывает. А через цикл останавливается на ошибках. Причем без какой-либо закономерности. от 1 до 25 вырубается на 23; 20 до 50 на 25; от 100 до 150 на 100.
Почему в 1 варианте работает, а в цикле не хочет? Че за беда? Помогите!!!

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 10.06.2004 (Чт) 17:23

А MoveNext кто за тебя делать будет? У тебя же нет 50-го столбца. Кроме того, если начало цикла больше его конца, то будь добр ставь Step -1 - иначе глюки.

Leon_
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 333
Зарегистрирован: 19.05.2004 (Ср) 16:31
Откуда: Moscow

Сообщение Leon_ » 11.06.2004 (Пт) 0:20

Потому что rs.GetRows(i) возвращает не i-ю строку, а i строк из рекордсета, начиная с текущей позиции, передвигая ее на i вперед.

Таким образом 22-я итерация тебе возвращает уже по 253 запись, а на 23-й итерации вполне закономерно выдает ошибки -- записей в рекордсете всего
База dbase4 (табличка 256 строк, 48 столбцов)


Тут нельзя делать через For..Next, используй While с проверкой на EOF.

Leon_
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 333
Зарегистрирован: 19.05.2004 (Ср) 16:31
Откуда: Moscow

Сообщение Leon_ » 11.06.2004 (Пт) 0:23

А MoveNext кто за тебя делать будет?

Этого делать не нужно.


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList