捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  粤ICP备10103342号-1 DELPHI盒子 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 盒子检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
盒子资源分类
全部展开 - 全部合拢
将ADOQUERY的Parameters存储到流中
关键字:Ado Parameters 流
来 自:原创
平 台:Win2k/XP/NT,Win2003 下载所需:0 火柴
深浅度:中级 完成时间:2010/8/5
发布者:dcopyboy 发布时间:2010/8/8
编辑器:DELPHI7 语  种:简体中文
分 类:数据库 下载浏览:722/9281
加入到我的收藏
下载错误报错
登陆以后才能下载
 用户名:
 密 码:
自动登陆(30天有效)
图片如果打不开,说明流量不够了,请稍候下载……
将ADOQUERY的Parameters存储到流中
   
     将ADOQUERY的Parameters存储到流中在常规的编程开发中用处可能不大,但在基于TCP/IP 套接字模式开发的类三层架构中,如虫虫的远程数据对象,若能采用此法,必将大幅度提高此类对象的使用范围及查询效率。

     核心单元WebAdoStream的流读写部分改编自New Midas VCL Library(1.00)的JxStream.pas,为方便与AdoQuery的接口,笔者专门编写了AdoQuerySaveTostream(将ADOQuery的查询语句及Parameters保存到流中)、AdoQueryLoadFromstream(从流中恢复ADOQuery的查询语句及Parameters)2个过程。

    演示程序中使用的数据表结构请按下列语句创建:
CREATE TABLE [dbo].[test] (
 [f1] [float] NULL ,
 [f2] [int] NULL ,
 [f3] [money] NULL ,
 [f4] [numeric](18, 0) NULL ,
 [f5] [real] NULL ,
 [d1] [datetime] NULL ,
 [c1] [char] (10) NULL ,
 [c2] [varchar] (50) NULL ,
 [b1] [ntext] NULL ,
 [b2] [text] NULL ,
 [b3] [image] NULL ,
 [B4] [image] NULL ,
 [id] [int] IDENTITY (1, 1) NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]


    演示程序中使用的‘本草纲目.txt’及 ‘东阳.jpg’只是比较大的文本及图片,发布时不再跟上。


   Dcopyboy
   Email:dcopyboy@tom.com
   QQ:445235526
Google
 
本站原创作品,未经作者许可,严禁任何方式转载;转载作品,如果侵犯了您的权益,请联系我们
龙脉加密锁 15元起 Grid++Report 报表 申请支付@网
 相关文章
没有相关文章
相关评论
共有评论2条 当前显示最后2条评论
ke8880 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;
paopao7985 2010/8/9 15:30:44
不错 和我用的一样
我要发表评论 查看全部评论
 
  DELPHI盒子版权所有 技术支持:深圳市麟瑞科技有限公司 1999-2024 V4.01 粤ICP备10103342号-1 更新RSS列表