Q1:三层开发中,delphi+ADO读取ORACLE中BLOB图片问题,连接驱动采用MS的驱动,不能用ORACLE的驱动,客户
端用ClientDataset连接,在SQL语句如"select MainID,MainICO from MyTable" OPEN的时候就提示"数
据类型不被支持",问:在不更改驱动的情况下如何对图片进行读写操作,或有另外更好建议?Q2:WMI中,采集硬件设备信息,需要实时刷新,10秒一次,另外还有其他CPU、网络速度、程序列表等的信息采集,
问题是,每次调用内存都会有一定的增长,无论我finally后面UnAssigned也好、nil也好、Null也好,我发现
while循环耗掉的那部分内存始终没释放出来,其他的到最后都可以释放出来,问:如何释放内存?部分代码如下:procedure TMainFrm.getHardDiskTimer(Sender: TObject);
var
iDiskCOunt:Integer; Locator,WMI,RET,Tmp: OleVariant;
Enum: IEnumVariant;
Value: Cardinal;
begin;
try
iDiskCOunt:=0;
ListView2.Items.Clear;
CoInitialize(nil);
Locator := CreateOleObject('WbemScripting.SWbemLocator');
WMI := Locator.ConnectServer('.', '', '', '');
Ret := WMI.ExecQuery('select * from Win32_LogicalDisk where DriveType=3 ');
Enum:= IUnknown(RET._NewEnum) as IEnumVariant;
while (Enum.Next(1, Tmp, Value) = S_OK) do
begin
with ListView2.Items.Add do
begin
Caption:=Tmp.Caption;
SubItems.Add(Tmp.FileSystem);
SubItems.Add(FormatFloat('0.00',Tmp.Size/(1024*1024*1024))+' G');
SubItems.Add(FormatFloat('0.00',(Tmp.Size-Tmp.FreeSpace)/(1024*1024*1024))+' G');
SubItems.Add(FormatFloat('0.00',Tmp.FreeSpace/(1024*1024*1024))+' G');
Inc(iDiskCOunt);
end;
end;
if DiskCOunt=0 then DiskCOunt:=iDiskCOunt;
finally
//……
CoUninitialize;
end;
end;
端用ClientDataset连接,在SQL语句如"select MainID,MainICO from MyTable" OPEN的时候就提示"数
据类型不被支持",问:在不更改驱动的情况下如何对图片进行读写操作,或有另外更好建议?Q2:WMI中,采集硬件设备信息,需要实时刷新,10秒一次,另外还有其他CPU、网络速度、程序列表等的信息采集,
问题是,每次调用内存都会有一定的增长,无论我finally后面UnAssigned也好、nil也好、Null也好,我发现
while循环耗掉的那部分内存始终没释放出来,其他的到最后都可以释放出来,问:如何释放内存?部分代码如下:procedure TMainFrm.getHardDiskTimer(Sender: TObject);
var
iDiskCOunt:Integer; Locator,WMI,RET,Tmp: OleVariant;
Enum: IEnumVariant;
Value: Cardinal;
begin;
try
iDiskCOunt:=0;
ListView2.Items.Clear;
CoInitialize(nil);
Locator := CreateOleObject('WbemScripting.SWbemLocator');
WMI := Locator.ConnectServer('.', '', '', '');
Ret := WMI.ExecQuery('select * from Win32_LogicalDisk where DriveType=3 ');
Enum:= IUnknown(RET._NewEnum) as IEnumVariant;
while (Enum.Next(1, Tmp, Value) = S_OK) do
begin
with ListView2.Items.Add do
begin
Caption:=Tmp.Caption;
SubItems.Add(Tmp.FileSystem);
SubItems.Add(FormatFloat('0.00',Tmp.Size/(1024*1024*1024))+' G');
SubItems.Add(FormatFloat('0.00',(Tmp.Size-Tmp.FreeSpace)/(1024*1024*1024))+' G');
SubItems.Add(FormatFloat('0.00',Tmp.FreeSpace/(1024*1024*1024))+' G');
Inc(iDiskCOunt);
end;
end;
if DiskCOunt=0 then DiskCOunt:=iDiskCOunt;
finally
//……
CoUninitialize;
end;
end;
OraStoredProc1.StoredProcName := 'blobTableUpdate';
OraStoredProc1.Prepare;
OraStoredProc1.ParamByName('p_Id').AsString := OraQ.FieldByName('workno').AsString;
OraStoredProc1.ParamByName('p_Value').ParamType := ptInput;
OraStoredProc1.ParamByName('p_Value').AsbLOBLocator.LoadFromFile(OpenPictureonly.FileName);
OraStoredProc1.Execute;
下面帖子说可以加个"数据转换"组件,不明白怎么回事?帮看看,谢谢:http://www.windbi.com/showtopic-903.aspx