var
range:Olevariant;
begin
Range:=OleContainer1.OleObject.Application.Selection.Range; 
Range先保存进数据库 image字段
.....
end;
图片可在word指定的位置中插入从数据库读出Range
var
filename:String;
LinkToFile,SaveWithDocument:boolean;
Range:olevariant;
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from aa');
adoquery1.Open;
adoquery1.last;
Range:=adoquery1.fieldByName('test').AsVariant;
filename:='C:\word.png';
LinkToFile:=false;
SaveWithDocument:=true;
OleContainer1.OleObject.Application.Selection.InlineShapes.AddPicture(filename, LinkToFile, SaveWithDocument,range);
end;
提示:数据类型不匹配?请问要怎样实现?

解决方案 »

  1.   

    写进数据库
    adoquery1.FieldByName('test').AsVariant:=Range;  //test 是使用image类型
    //Range是OleVariant类型   通过GetVariantType 得到的是dispatch 从数据库读出
    Range:=adoquery1.FieldByName('test').AsVariant;
    Range也是属于OleVariant 类型   但是通过GetVariantType获取到的是OleStr   所以
    OleContainer1.OleObject.Application.Selection.InlineShapes.AddPicture(filename, LinkToFile, SaveWithDocument,Range);就出现不匹配了请问要怎么转换?
      

  2.   

    你参照一下,是否满足你的需求 
    //保存图像 
    procedure   TFrmNewGoods.AddPicture(sgoodscode:String); 
    var 
        picstream:tadoblobstream; 
        bmppic:tbitmap; 
        jpgpic:tjpegimage; 
        bmpstream:TMemoryStream; 
        OpenPicDialog:TOpenPictureDialog; 
        itype:boolean; 
    begin 
        try 
            OpenPicDialog:=TOpenPictureDialog.Create(nil); 
            adoquery1.Connection:=DMdataMode.DBConnection; 
            OpenPicDialog.Filter:='All   *.jpg; ¦*.jpg;)'; 
            itype:=false; 
            adoquery1.SQL.Text:='select   goodscode,picture   from   gds_goodscode   with(nolock)   where   goodscode='+sgoodscode; 
            adoquery1.open; 
            adoquery1.Edit; 
            if   OpenPicDialog.Execute   then 
            begin 
                jpgpic:=tjpegimage.Create; 
                bmppic:=tbitmap.Create; 
                bmpstream:=tmemorystream.Create; 
                jpgpic.LoadFromFile(OpenPicDialog.filename); 
                bmppic.Assign(jpgpic); 
                bmppic.SaveToStream(bmpstream); 
                picstream:=tadoblobstream.Create(tblobfield(adoquery1.Fields[1]),bmWrite); 
                picstream.LoadFromStream(bmpstream); 
                picstream.Position:=0; 
                tblobfield(adoquery1.Fields[1]).loadfromstream(picstream); 
                itype:=true; 
            end; 
            adoquery1.Post; 
            if   itype   then 
            begin 
                Adoquery1.Edit; 
                picstream.Free; 
                jpgpic.Free; 
                bmppic.Free; 
                bmpstream.Free; 
            end; 
        finally 
            OpenPicDialog.free; 
        end; 
    end; 
    显示图像 
    用一个DBImage    关联显示就行
      

  3.   

    to zxf_feng 先谢谢你
    保存图片我已经完成。我现在是想在WORD中 指定位置显示图片,
    我保存了位置 类型是OLEVariant 但是从数据库读取Range值OleContainer1.OleObject.Application.Selection.InlineShapes.AddPicture(filename,   LinkToFile,   SaveWithDocument,Range); 就出现不匹配了