用datastore读入逗号分割的文本文件到数据库报错
以前曾经提过类似的问题,具体问题描述是:
PB用数据窗口向数据库导入数据时报错,但是当导入文本的大小为50M时没有问题,但是换了一个108M的就程序报错了,请问可能是什么原因?
报错内容:"0x10ba6cd0"指令引用的"0x00000000"内存。该内存不能为"written"。
当时的解决方法是:
按文件行次,分批读入了,50000条一循环,同时在循环中dw提交入库后,需要销毁,再重建,再销毁,再重建,如此反复,释放资源即可。
上述方法对108M的文件是可行的,但是现在文件大小达到了145M——176M,还是报上面的错,我尝试降到20000条一循环,还是不行,请问哪位大侠有好的解决方法,望不吝赐教!
[解决办法]
跟前面多少航一次循环无关,是import导入时数据窗的内存溢出报错。
你可以先把文件读到一个字符变量里,然后解析字符变量分批导入。
比如先读到字符变量,然后每次取10W个字符,可以判断最后的回车位置来精确到取一整行,再用ImportString将字符变量导入到数据窗保存。
[解决办法]
如果是导入到ORACLE,是用loader可行。如果是mssqlserver,使用bcp可行。如果还不满足您的要求。将文件分割。我看您的代码问题应该出在循环的最后一次。您并没有判断有多少行数据。在最后一个次的结束行数。
最后一次循环结束的行应该使用
mod(j,50000 )取余数
if m = li_loops then
ds_ls.ImportFile(CSV!,file_name, (m - 1)*50000 + 1)
else
ds_ls.ImportFile(CSV!,file_name, (m - 1)*50000 + 1,mod(j,50000 ))
end if