Как обновить курсоры foxpro? - PullRequest
       26

Как обновить курсоры foxpro?

0 голосов
/ 02 сентября 2011

После создания курсора для перезаписи запроса на выборку я обновляю некоторые значения в нем, а затем удаляю строки, которые не соответствуют некоторым критериям. проблема здесь:

Например; Если у меня 30 записей и я их обновлю, то удали 10, номер записи не изменится! Это все еще будет 30. Есть ли способ сказать курсору обновить или перезагрузить так, чтобы номер записи точно совпадал с тем, что у меня есть?

Я использую select для создания курсора и записи для чтения:

update
delete

Но номер записи не меняется, хотя при просмотре курсора записей меньше, чем раньше?

Ответы [ 4 ]

0 голосов
/ 20 августа 2014

Вы можете сделать что-то, почти эквивалентное 'pack', то есть просто выполнить запрос к курсору, который удаляет удаленные строки:

SELECT * FROM mycursor INTO CURSOR mycursor READWRITE WHERE NOT DELETED()
0 голосов
/ 03 сентября 2011

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

0 голосов
/ 18 декабря 2011

Если вы используете Visual Foxpro и ваши таблицы находятся в контейнере базы данных, вы можете использовать обновляемые представления для этого.Представления в основном совпадают с курсором, но после того, как вы закончите редактирование, вы можете запустить TableUpdate () для отправки изменений в Table или TableRevert () для отмены изменений.

Кроме того, Requery () обновит представление, с которым вы работаете.

0 голосов
/ 02 сентября 2011

Когда вы удаляете записи в FoxPro, записи помечаются как удаленные, но не удаляются, пока не будет выполнена команда PACK.Поскольку попытка упаковать курсор приводит к «Недопустимая операция для курсора».ошибка, вы должны выполнить COUNT и другие команды с предложением WHERE NOT DELETED (), чтобы вы работали только с записями, которые не были помечены как удаленные.

Что касается просмотра таблицы и не просмотра удаленных записей, яПодозреваю, что вы установили SET DELETED ON, чтобы скрыть удаленные записи из окна просмотра.

SELECT * FROM myTable INTO CURSOR myCusror READWRITE
COUNT FOR NOT DELETED()
GO TOP
DELETE NEXT 1
COUNT FOR DELETED()
COUNT FOR NOT DELETED()
COPY TO myNewTable FOR NOT DELETED()
...