Delphi写的数据同步程序提示“内存不足”

来源:互联网 发布:淘宝卖家拉黑买家 编辑:程序博客网 时间:2024/05/29 13:16

之前有做一个数据同步程序,A库是业务库,B库是临时库,临时库是给别人用的,里面的表比A库少,也就2、30张,里面有2张图片表,其他的都是普通数据表。 


我做好的同步程序的功能就是同步A库中的业务数据到B库,B库没有则添加,有则修改。但是从开始到前几天一直有一个表不能同步,到这个表就报内存错误,困扰了我一两个月之久。之间有试好多办法都不行,后来准备写一个程序单独抽取这个图片表的时候发现了问题,并解决了它,贴在下面,帮助自己,同时也给那些跟我有同样错误的人一些提示。 

我的同步方法是建立两个连接,连接到A库和B库,然后有两个ADOQuery通过不同的连接同时访问A库和B库的当前同步表,对每条记录做判断,看看库B中是否有此条记录,没有增加,有则修改内容,循环列赋值。 

添加的代码就是 

ADOQueryA.close; 

ADOQueryA.Sql.Text := 'select c1, c2, c3 from t1 where 1 = 1'; 

ADOQueryA.Sql.Open; 

ADOQueryA.Append; 

.... 

ADOQueryA.Post; 

//各位大牛们只要心细,应该已经看出我语句的BUG了,其实就是因为一个逻辑错误where 1 = 1,这个是因为我方便加and条件而设立的,但是添加时应该查询空表,所以1 = 1是等同于没有过滤,查询全表了,我的表记录有50W+,每条记录有20-30K,这样全部放到内存里肯定会超的,只要多加一个where 1 = 1 and 1 = 2即可。因为我的查询语句是在一个Access表设置的,所以1 = 1我无法去掉,可能看起来很不爽,但是我也只能这样写。自己粗心一直是一个蛋碎的问题。

0 0
原创粉丝点击