打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用fdmemTable来代替clientDataset,解决MySQL5.6(含)以上版本用cds多次更新时的错误

使用fdmemTable来代替clientDataset,解决MySQL5.6(含)以上版本用cds多次更新时的错误

时间:2017-05-06 15:07:51      阅读:22      评论:0      收藏:0      [点我收藏+]

标签:app   etl   res   转换   ase   except   edit   ada   line   

//读取mysql保存到fdMemTable中

procedure TForm3.btnOpen1Click(Sender: TObject);
var
stream, stream2: TMemoryStream;
buf: TBytes;
begin
stream := TMemoryStream.Create;
try
try
FDQuery1.Close;
FDQuery1.SQL.Clear;
FDQuery1.Open(‘select * from GLFMKHJL‘);
FDQuery1.SaveToStream(stream, TFDStorageFormat.sfBinary);

// 流转换为BUFFER,将BUFFER通过网络分包传输
stream.Position := 0;
SetLength(buf, stream.Size);
stream.Read(buf[0], stream.Size);

// BUFFER转换为流
stream2 := TMemoryStream.Create;
stream2.Write(buf[0], Length(buf));
stream2.Position := 0;

FDMemTable1.CachedUpdates := True;
FDMemTable1.Close;
FDMemTable1.LoadFromStream(stream2, TFDStorageFormat.sfBinary);
except
on E: Exception do
begin
showmessage(‘错误:‘ + E.Message);
end;
end;
finally
FDQuery1.Close;
stream.Free;
stream2.Free;
end;
end;

//从fdMemTable中编辑数据,通过fdQuery保存到mysql

procedure TForm3.btnSaveClick(Sender: TObject);
var
stream, stream2: TMemoryStream;
buf: TBytes;
begin
stream := TMemoryStream.Create;
try
try
if FDMemTable1.State in [dsInsert, dsEdit] then
FDMemTable1.Post;
if FDMemTable1.ChangeCount = 0 then
Exit;
FDMemTable1.ResourceOptions.StoreItems := [siDelta, siMeta]; // 只提交修改的数据
FDMemTable1.SaveToStream(stream, TFDStorageFormat.sfBinary);
// 流转换为BUFFER,将BUFFER通过网络分包传输
stream.Position := 0;
SetLength(buf, stream.Size);
stream.Read(buf[0], stream.Size);

// BUFFER转换为流
stream2 := TMemoryStream.Create;
stream2.Write(buf[0], Length(buf));
stream2.Position := 0;

FDQuery1.Close;
FDSchemaAdapter1.Close;
FDQuery1.SchemaAdapter := FDSchemaAdapter1;
FDQuery1.CachedUpdates := True;
FDQuery1.SQL.Clear;
FDQuery1.sql.Text := ‘select * from GLFMKHJL where 1=2‘;
FDQuery1.Open;
FDSchemaAdapter1.LoadFromStream(stream2, TFDStorageFormat.sfBinary);
ShowMessage( FDSchemaAdapter1.ApplyUpdates.ToString );//返回0成功
except
on E: Exception do
begin
showmessage(‘错误:‘ + E.Message);
end;
end;
finally
FDQuery1.Close;
stream.Free;
stream2.Free;
end;
end;

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
printf(),fprintf(),sprintf()函数的区别
java序列化与blockdata
c语言文件读写示例(c语言文件操作)
理解 nodeJS 中的 buffer,stream
msm_vb2
字符流相关函数
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服