好問題,這兩個在 dBASE 2019 / rowset 裡「看起來都像是定位用」,但本質完全不同。我用你平常寫程式會遇到的情境來講,會比較好記 👍
一句話先記住
-
rowno:目前「畫面 / 游標」在第幾列(位置號碼)
-
.bookmark:目前這一筆資料的「身分證」(唯一識別,不怕移動)
rowno 是什麼?
👉 Rowset 游標目前停在哪一列
特性
-
是 整數 (1,2,3…)
-
代表「第幾列」
-
會變動
-
跟 排序、filter、insert、delete 強烈相關
什麼時候會變?
範例
⚠️ 風險
.bookmark 是什麼?
👉 這一筆資料在 rowset 裡的唯一定位符
特性
-
是 Variant / 不可讀的值
-
每一筆都唯一
-
資料排序或 rowno 改變也不會影響
-
專門用來「回到原本那一筆」
範例
之後不管怎麼排序、過濾:
直接對照表(重點)
| 項目 | rowno | bookmark |
|---|---|---|
| 類型 | 整數 | Variant |
| 是否唯一 | ❌ 否 | ✅ 是 |
| 排序後有效 | ❌ | ✅ |
| Filter 後有效 | ❌ | ✅ |
| delete / insert | ❌ 易錯 | ✅ 安全 |
| 適合用途 | 顯示列號 | 精準定位 |
實務上怎麼用(你很可能會用到)
❌ 不建議
✅ 正確作法
Grid / 多選時的重點(你之前有問過)
因為:
-
rowno 在多選時根本不可靠
-
bookmark 才能保證你處理的是正確資料
什麼情況用哪個?
用 rowno
✔ 顯示「第幾筆」
✔ 快速移動(上一筆 / 下一筆)
用 bookmark
✔ 記住使用者選的資料
✔ 排序 / filter 前後保持定位
✔ delete / update 前後回到原筆
小結(給你一句工程師級記憶法)
rowno 是「位置」,bookmark 是「身分」
位置會變,身分不會。