捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  粤ICP备10103342号-1 DELPHI盒子 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 盒子检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
 
广告
评论:将ADOQUERY的Parameters存储到流中
paopao7985 40860 2010/8/9 15:30:44
不错 和我用的一样
ke8880 40856 2010/8/7 15:23:13
我也在一个三层结构中使用到这个这一功能,以下是我实现的Parameter与流的转换
procedure ParamsToStream(Params: TParams; var Strm: TStream);
var
  I: SmallInt;
  PM: TParam;
  prmName: string;
  nSize: Integer;
  ftp: TFieldType;
  Pnt: Pointer;
begin
  //写入ParamCount
  nSize := Params.Count;
  Strm.Write(nSize, SizeOf(nSize));
  //获取Param
  for I := 0 to Params.Count - 1 do
  begin
    PM := Params[I];
    //写入参数名称
    prmName := PM.Name;
    nSize := Length(prmName);
    Strm.Write(nSize, SizeOf(nSize));
    Strm.Write(prmName[1], nSize);
    //写入数据类型
    ftp := PM.DataType;
    Strm.Write(ftp, SizeOf(ftp));
    //写入数据体
    nSize := PM.GetDataSize;
    Pnt := AllocMem(nSize);
    PM.GetData(Pnt);
    Strm.Write(nSize, SizeOf(nSize));
    Strm.Write(Pnt^, nSize);
    FreeMem(Pnt);
  end;
  Strm.Position := 0;
end;

procedure StreamToParams(Strm: TStream; Params: TParams);
var
  I: SmallInt;
  prmCount, nSize: Integer;
  prmName: string;
  prmType: TFieldType;
  Pnt: Pointer;
  PM: TParam;
begin
  //读取Param总数
  Strm.Position := 0;
  Strm.Read(prmCount, SizeOf(prmcount));
  //读取Param
  for I := 0 to prmCount - 1 do
  begin
    //读取参数名称
    Strm.Read(nSize, SizeOf(nSize));
    SetLength(prmName, nSize);
    Strm.Read(pchar(prmName)^, nSize);
    //读取数据类型
    Strm.Read(prmType, SizeOf(prmType));
    //读取数据体
    Strm.Read(nSize, SizeOf(nSize));
    Pnt := AllocMem(nSize);
    Strm.Read(Pnt^, nSize);

    PM := Params.CreateParam(prmType, prmName, ptInput);

    PM.SetData(Pnt);
    FreeMem(Pnt);
  end;
end;
第一页 上一页 下一页 最后页 有 2 条纪录 共1页 1 - 2
 用户名:
 密 码:
自动登陆(30天有效)
 
  DELPHI盒子版权所有 技术支持:深圳市麟瑞科技有限公司 1999-2024 V4.01 粤ICP备10103342号-1 更新RSS列表