通過選擇查詢創建遊標讀取後,我更新其中的一些值,然後刪除不符合某些條件的行。 這裏的問題是:如何刷新foxpro遊標?
例如;如果我有30條記錄並更新它們,則刪除10條記錄號碼不會改變!它仍然是30.是否有辦法告訴光標刷新或重新加載,所以rec號碼將完全匹配我所擁有的?
我運行一個select
創建光標讀寫:
update
delete
但記錄數量不會改變,即使當我瀏覽我的光標有較小的記錄比以前?
通過選擇查詢創建遊標讀取後,我更新其中的一些值,然後刪除不符合某些條件的行。 這裏的問題是:如何刷新foxpro遊標?
例如;如果我有30條記錄並更新它們,則刪除10條記錄號碼不會改變!它仍然是30.是否有辦法告訴光標刷新或重新加載,所以rec號碼將完全匹配我所擁有的?
我運行一個select
創建光標讀寫:
update
delete
但記錄數量不會改變,即使當我瀏覽我的光標有較小的記錄比以前?
當您在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()
如果目標是能夠做出改變,並有當你希望他們得救了,你可能會更好只是用實際的表並打開緩衝。
如果您正在使用Visual Foxpro並使您的表位於DataBase容器中,則可以使用可更新視圖來完成此操作。視圖基本上與遊標相同,但編輯完成後,可以發出TableUpdate()將更改發送到Table或TableRevert()以撤消更改。
此外,Requery()將刷新您正在使用的視圖。
你可以做一些事情幾乎等同於「包裝」,這是剛剛運行反光標,消除了刪除行的查詢:
SELECT * FROM mycursor INTO CURSOR mycursor READWRITE WHERE NOT DELETED()