首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > PB >

用datastore读入逗号瓜分的文本文件到数据库报错

2013-02-06 
用datastore读入逗号分割的文本文件到数据库报错以前曾经提过类似的问题,具体问题描述是:PB用数据窗口向数

用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

热点排行