Lazarus中文社区

 找回密码
 立即注册(注册审核可向QQ群索取)

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 1988|回复: 0

Lazarus 在 DataSet 转 MemDataSet

[复制链接]

该用户从未签到

发表于 2013-11-12 20:08:11 | 显示全部楼层 |阅读模式
Pascal下 DataSet中的内容是非离线的,就是说需要与数据库保持联机,这样很不好,会弄出很多连接出来,不喜欢。
MemDataSet,是可以保存离线内容的,于是就有了这个方法。
  1. function TformMain.DataSet2MDataSet(dataSet:TDataSet):TMemDataSet;
  2. var
  3.   i:Integer;
  4.   strColumn,strType,strSize,strValue:string;
  5.   mDataset:TMemDataSet;
  6. begin
  7.   //初始化
  8.   mDataSet:= TMemDataset.Create(nil);
  9.   //字段
  10.   with dataSet do
  11.   for i := 0 to FieldCount-1 do
  12.   begin
  13.      strColumn:= dataSet.Fields[i].FieldName;
  14.      strType:= GetEnumName(TypeInfo(TFieldType),integer(dataSet.Fields[i].DataType)) ;
  15.      strSize:= IntToStr(dataSet.Fields[i].DataSize);
  16.      if strColumn ='SUMNUMBER'then
  17.      Application.MessageBox(Pchar(strType),'',0);
  18.      if (strType ='ftString') or (strType ='ftBCD')then
  19.         mDataSet.FieldDefs.Add(strColumn, TFieldType(GetEnumValue(TypeInfo(TFieldType), strType)),StrToInt(strSize))
  20.      else
  21.         mDataSet.FieldDefs.Add(strColumn, TFieldType(GetEnumValue(TypeInfo(TFieldType), strType)));
  22.   end;
  23.   mDataSet.CreateTable;
  24.   mDataSet.Open;

  25.   //数据
  26.   dataSet.First;
  27.   with dataSet do
  28.     while not dataSet.eof do
  29.      begin
  30.        mDataSet.Append;
  31.        for i := 0 to FieldCount-1 do
  32.         begin
  33.             strValue:= dataSet.Fields[i].AsString;
  34.             mDataSet.Fields[i].AsString:=strValue;
  35.        end;
  36.        dataSet.Next;
  37.      end;
  38.   Result:=mDataSet;
  39. end;
复制代码
回复

使用道具 举报

*滑块验证:

本版积分规则

QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1 )

GMT+8, 2025-5-2 22:44 , Processed in 0.025771 second(s), 10 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表