备注字段的容量限制是2GB,想要超出,那还不容易:
use myTestDbf
scan
for i = 1 to 1000
lcLine = "巴拉巴拉.........一行挺长的文本,大概有1KB"
* myMemo是备注字段
replace myMemo with myMemo + lcline + chr(13) + chr(10)
endfor i
endscan
假设myTestDbf只有1000行记录,len(cLine)也只有1KB,这么循环一下子,可能会迅速让备注字段超出2GB的容量限制!
随手Pack一下,会发觉备注字段其实只有1--2MB!
这才反应过来,正确做法是:
scan
lcMemo = ""
for i = 1 to 1000
cLine = "巴拉巴拉.........一行挺长的文本"
lcMemo = lcMemo + lcline + chr(13) + chr(10)
endfor i
replace myMemo with lcMemo
endscan
估计原因是:备注字段的每一次写入,都是在尾部累加,VFP在内部维护链表,但不清理存储空间,直至发出Pack命令。