2011-09-02 41 views
0

通過選擇查詢創建遊標讀取後,我更新其中的一些值,然後刪除不符合某些條件的行。 這裏的問題是:如何刷新foxpro遊標?

例如;如果我有30條記錄並更新它們,則刪除10條記錄號碼不會改變!它仍然是30.是否有辦法告訴光標刷新或重新加載,所以rec號碼將完全匹配我所擁有的?

我運行一個select創建光標讀寫:

update 
delete 

但記錄數量不會改變,即使當我瀏覽我的光標有較小的記錄比以前?

回答

0

當您在FoxPro中刪除記錄時,記錄被標記爲已刪除但不會被刪除,直到發出一個PACK命令。由於嘗試打包遊標導致「遊標無效操作」。錯誤,您必須使用WHERE NOT DELETED()子句發出COUNT和其他命令,因此您只能對尚未標記爲已刪除的記錄進行操作。

關於瀏覽表並且沒有看到已刪除的記錄,我懷疑你有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() 
0

如果目標是能夠做出改變,並有當你希望他們得救了,你可能會更好只是用實際的表並打開緩衝。

0

如果您正在使用Visual Foxpro並使您的表位於DataBase容器中,則可以使用可更新視圖來完成此操作。視圖基本上與遊標相同,但編輯完成後,可以發出TableUpdate()將更改發送到Table或TableRevert()以撤消更改。

此外,Requery()將刷新您正在使用的視圖。

0

你可以做一些事情幾乎等同於「包裝」,這是剛剛運行反光標,消除了刪除行的查詢:

SELECT * FROM mycursor INTO CURSOR mycursor READWRITE WHERE NOT DELETED()