其余代码略了,关键的是
with tclientdataset.create(nil) do
 begin
  try
  Close ;
  CommandText :='update information set 照片=:照片 where 班级='''+bj+''' and 学号='''+xh+'''';
  Params.ParamByName('照片').LoadFromStream(tempstream,ftBlob);
  Execute ;
 end ;
  finally
  free;
  end ;编译运行了下,他的提示是ntext与image类型不匹配还有别的语句嘛,我client懂得不多。。

解决方案 »

  1.   

    二进制数据你数据库里字段是ntext?
    改成Image就好了 
      

  2.   

    ntext不是ole类型字段你的代码中也没看到ntext字段呀
      

  3.   

    1.数据库里照片字段当然是image啦2.CommandText这里不是text嘛
      

  4.   

    Execute这个调用的代码是什么?
    应该是在这里出错吧
      

  5.   

    用open也不管用啊
    应该怎么办呢
      

  6.   

    印象中 先insert 空,然后edit应该可以吧
      

  7.   

    字段为什么不用image类型呢?
      

  8.   

    三层架构的clientDataSet运行楼主的语句会出现这种错误的,我也碰到这个问题,不知道是什么原因,我的办法就是把照片以流方式传输到中间层,由中间层的TadoQuery来提交,就一点问题也没有了。
      

  9.   

    你的意思是在中间层里面构建个函数或者是接口接受来自客户端的包含照片的流,然后在ado下就ok了?
      

  10.   

    10楼说的对,应该在中间层写个过程,传递OleVariant型的变量
    这个问题是Delphi的Midas的bug
      

  11.   

    13楼说的没错,我是用delphi2007开发的,遇到这个问题,解决方法就是如你提出来的,把Stream转化成OleVariant,传给中间层,由中间层再把OleVariant转换成Stream加载,OK,不过我在delphi2010上,用uniDAc控件好像可以直接在客户端加载Stream,保存成功,d2007加UNiDAc客户端直接加载好像也不行
      

  12.   

    function TForm2.StreamToVariant(Stream: TStream): OleVariant;
    var
      p: Pointer;
    begin
      Result := VarArrayCreate([0, Stream.Size - 1], varByte);
      p := VarArrayLock(Result);
      try
        Stream.Position := 0;
        Stream.Read(p^, Stream.Size);
      finally
        VarArrayUnlock(Result);
      end;
    end;
      

  13.   

    procedure TForm2.VariantToStream(const Data: OleVariant; Stream: TStream);
    var
      p: Pointer;
    begin
      p := VarArrayLock(Data);
      try
        Stream.Write(p^, VarArrayHighBound(Data, 1) + 1);
      finally
        VarArrayUnlock(Data);
      end;
    end;