今天看到一则如何处理超过 2G 大小 dbf 表的方法,这里是他的演示录像:http://devzone.advantagedatabase.com/jeremym/fox_large/foxprolarge.html,他演示了如何将数据插入到一个超过 2GB 的 dbf 表中,以及如何从中查询需要的记录,也看到了他生成的一个近 20GB 的 dbf 表。
总结如下:
1. 这样大的表是不可能直接使用 use 命令来打开的
2. 要使用他提供的 ODBC 驱动程序,从这里下载 http://devzone.advantagedatabase.com/dz/content.aspx?key=20&Release=13&Product=14&Platform=6
此驱动的好处是支持 vfp9 的所有数据类型,包括 AutoInc, Varchar, VarBinary, BLOB 等;而 MS 的 ODBC 仅支持到 vfp6sp3 版本的格式,然后就居心叵测的强迫我们使用 OleDB 这种 ADO 方式来连接 Vfp 数据表。
3. 使用视图或 SPT 方法连接并执行 查询/插入/更新/删除 操作,完整的 spt 链接串的写法(使用自由表):
'Driver=Advantage StreamlineSQL ODBC;' ;
+ 'AdvantageLocking=OFF;' ; && OFF 使用兼容的锁方式,ON 使用 Advantage 独特锁(专利)方式
+ 'CharSet=ANSI;' ; && 或者 OEM
+ 'DataDictionary=True;' ; && 使用数据字典目录,自由表必须指定此项目
+ 'DataDirectory=g:/erp/datas;' ; && 自由表所在目录
+ 'DefaultType=Visual FoxPro;' ; && 其它可选项为 Advantage / Foxpro / Clipper
+ 'Locking=Record;' ; && 或者 File
+ 'MaxTableCloseCache=5;' ; && 缓冲已关闭表的缓冲区最大数量
+ 'MemoBlockSize=64;' ; && 备注块大小
+ 'Rows=False;' ; && 是否显示已删除的行(False 相当于 set delete on)
+ 'TrimTrailingSpaces=False;' ; && 是否截断尾随的空格
+ 'ServerTypes=1;' ; && 1/2/4 - [Local / Remote / Internet] Server,可组合使用
+ 'Compression=Never;' && 数据传送时的压缩方式 - Never / Always / Internet
当然对于大多数情况,这样大的数据表我不会使用 vfp 的本地数据库来存放,应该会升级到 sql server 等大型数据库。唯一的用途是当别人给我一个超过 2GB 的 dbf 表时,我可以用这个方法来处理它。