起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 263|回复: 15

[请求]如何把blob数据从一个字段复制到到另一个字段

[复制链接]
发表于 2009-7-30 13:08:41 | 显示全部楼层 |阅读模式
qry1.Params.ParamByName('wj').AsBlob:=qry2.FieldByName('wj').AsString;
可以的
为什么qry1.Params.ParamByName('wj').AsBlob:=qry2.FieldByName('wj').AsBlob不行

具体要如何写?Stream
具体如何写
回复

使用道具 举报

发表于 2009-7-30 13:31:07 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-30 13:45:05 | 显示全部楼层
3、实现Copy表二(Source)中当前记录的二进制流OLE字段到表一(Target)中,代码如下:

dsTarget.DataSet.FieldByName('BlobOLE').Assign
(dsSource.DataSet.FieldByName('BlobOLE'));

              qry1:=TQuery.Create(nil);
              try
              qry1.ConnectionString:='DATABASEURL=Biz:\SYSTEM\SYSTEM.DATABASE';
              qry1.CommandText:='insert into '+Out_Bm+' '+
                   '(id,htbh,wjmc,wj,wjhz,wjdx,scrid)'+
                   'VALUES (:id,:htbh,:wjmc,:wj,:wjhz,:wjdx,:scrid)';
              qry1.Params.ParamByName('id').AsString:=qry2.FieldByName('id').AsString;
              qry1.Params.ParamByName('htbh').AsString:=sOut;
              qry1.Params.ParamByName('wjmc').AsString:=qry2.FieldByName('wjmc').AsString;
              qry1.Params.ParamByName('wj').AsBlob:=qry2.FieldByName('wj').AsBlob;
              qry1.Params.ParamByName('wjhz').AsString:=qry2.FieldByName('wjhz').AsString;
              qry1.Params.ParamByName('wjdx').AsString:=qry2.FieldByName('wjdx').AsString;
              qry1.Params.ParamByName('scrid').AsString:=qry2.FieldByName('scrid').AsString;
              qry1.Execute;
              finally
                qry1.Free;
              end;

这种的 要如何改
回复 支持 反对

使用道具 举报

发表于 2009-7-30 13:52:26 | 显示全部楼层
qry1.append;
qry1.FieldByName('wj').Assign(qry2.FieldByName('wj'));
.
.
.
.

qry1.Execute;

看看这样行么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-30 15:50:29 | 显示全部楼层
qry1:=TQuery.Create(nil);
              try
              qry1.ConnectionString:='DATABASEURL=Biz:\SYSTEM\SYSTEM.DATABASE';
              qry1.CommandText:='insert into '+Out_Bm+' '+
                   '(id,htbh,wjmc,wj,wjhz,wjdx,scrid)'+
                   'VALUES (:id,:htbh,:wjmc,:wj,:wjhz,:wjdx,:scrid)';
              qry1.Params.ParamByName('id').AsString:=qry2.FieldByName('id').AsString;
              qry1.Params.ParamByName('htbh').AsString:=sOut;
              qry1.Params.ParamByName('wjmc').AsString:=qry2.FieldByName('wjmc').AsString;
              qry1.Params.ParamByName('wj').Assign(qry2.FieldByName('wj'));
              qry1.Params.ParamByName('wjhz').AsString:=qry2.FieldByName('wjhz').AsString;
              qry1.Params.ParamByName('wjdx').AsString:=qry2.FieldByName('wjdx').AsString;
              qry1.Params.ParamByName('scrid').AsString:=qry2.FieldByName('scrid').AsString;
              qry1.Execute;
              finally
                qry1.Free;
              end;
数据过去少了  不知是什么原因,附件就不能打开了 如何解决
回复 支持 反对

使用道具 举报

发表于 2009-7-30 15:52:56 | 显示全部楼层
楼主的数据过去少了是什么意思,不是很明白
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-30 15:55:12 | 显示全部楼层
本来59K的文件,到另一个表中字段中 数据只有57K了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-30 15:56:16 | 显示全部楼层
我想实现 把A库的附件 复制到 B库的 附件表中去
回复 支持 反对

使用道具 举报

发表于 2009-7-30 16:16:58 | 显示全部楼层
我这样测试没有问题:
procedure TMainForm.Button1Click(Sender: TObject);
var lQuery1,lQuery2 :TQuery;
begin
   lQuery1 :=TQuery.Create(nil);
   lQuery2 :=TQuery.Create(nil);
   try
   lQuery1.ConnectionString :='DATABASEURL=Biz:\OPERATION\OPERATIONDB.DATABASE';
   lQuery2.ConnectionString :='DATABASEURL=Biz:\OPERATION\OPERATIONDB.DATABASE';
   lQuery2.CommandText :='select * from sjb11';
   lQuery2.Open;
   lQuery2.First;
   lQuery1.CommandText :='select * from tp2';
   lQuery1.Open;
   lQuery1.Append;
   lQuery1.FieldByName('zd1').AsString :=jscommon.CreateGUIDStr;
   lQuery1.FieldByName('tp').Assign(lQuery2.FieldByName('tp'));
   lQuery1.ApplyUpdates;
   finally
   lQuery1.Free;
   lQuery2.Free;
   end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-30 16:18:12 | 显示全部楼层
你测试的文件多大 有没有上100K,我小的 没问题
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-18 12:18 , Processed in 0.046265 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表