发现ADOQuery的SQL语句关于参数一个蛋疼的问题,寻找解决?
以下代码
ADOQuery_Exec->SQL->Clear();
ADOQuery_Exec->SQL->Text = "insert into tbl_ecg_review values('000', '111', '2013-09-05 12:34:23', :blob01, :blob02, :blob03, :blob04, :blob05, 'aaaaaa')";
ADOQuery_Exec->Parameters->Clear();
就是这三句代码,放在Timer1的OnTimer里,设置定时器时间间隔为20毫秒,然后打开任务管理器,查看内存使用状况,会发现内存不断增加。
如果我将SQL语句中的参数去掉,就不会有内存泄露的问题。
看起来ADOQuery控件的sql语句只要碰见“:”,就会自动创建一个TParameter对象,然而“ADOQuery_Exec->Parameters->Clear();”一点不起作用,竟然是这个原因造成内存泄露,真是蛋疼。
这个要怎么解决?
就是说不需要参数也可以向数据库插入Blob类型的数据?或者参数是静态的,设计时手工添加,不在SQL语句中用“:”表现出来,要怎么弄?
[解决办法]
blob只能通过参数了,
你把adoqery动态创建,执行完一个sql后delete query,
然后执行时再动态创建,这样试试
[解决办法]
SQL 2005以后的一个方法:
INSERT INTO MyTable(ID, BLOBField)
SELECT 1001,* FROM OPENROWSET(BULK N'C:\a.jpg', SINGLE_BLOB) as photo
INSERT INTO MyTable(ID, BLOBField)
Values(1001,0xCB09ABCDABCDABCD08650066)
你试试看行不行吧。
或者升级到 XE4 , 也挺好的。我现在只装了XE4