sqlserver中某表某字段xxx为Varchar型,存入一些二进制数据(不可见字符)
delphi通过数据集控件(query)取出后,用一string型变量tempstr取tempstr:=FieldValues['xxx'];
但是取出的数据与库中的数据不一致。不知delphi中定义什么类型的变量可以顺利存取二进制字段?

解决方案 »

  1.   

    tempstr:=adoquey1.Fieldbyname('fieldname').asstring;
      

  2.   

    我是asstring的呀,还是不行
    有些方面经验的朋友说说看
      

  3.   

    var
      TS:TStream; //保存从数据库中取出的二进制流
      ArrByte:array of byte;
      i:integer;
    begin
      TS:=TStream.Create();
      TBlobField(query1.FieldByName('f')).SaveToStream(TS);//获得二进制流
      setlength(ArrByte,Ts.size); //设置一个动态数组,保存二进制数据
      for i:=1 to TS.Size do  //也有可能是 for i:=0 to TS.size-1 do 不记得了
        begin
          TS.Read(ArrByte[i],1);  //如果是后一种循环这里应该是TS.Read(ArrByte[i+1],1);
        end; //结束循环后ArrByte里的就是二进制数据
    end;
      

  4.   

    to wangyime:
    ArrByte:array of byte;可不可以用string?
    我用了好像不行。不知道string有什么缺陷?
      

  5.   

    var
       Buffer: array[1..1024] of Byte;
    begin ADOQryUserData.FieldByName('CurrentApps').GetData(@WStrBuffer);
      

  6.   

    往库里面写就用SetData好了,不过读出的数据和写的数据都是有格式的,头两个字节是长度,后面才是数据。比如30123就是0x010203