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

//读取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;

时间: 2024-10-11 06:07:02

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

[ArchLinux]进行更新时出现错误:GPGME error: 无数据,数据库无效的解决办法/

今天在我进行系统更新pacman -Syu时,出现了如下错误: # pacman -Syu 错误:GPGME error: 无数据 错误:GPGME error: 无数据 错误:GPGME error: 无数据 错误:GPGME error: 无数据 错误:GPGME error: 无数据 :: 正在同步软件包数据库... core 已经是最新版本 0.0 B 0.00B/s 00:00 [----------------------] 0% extra 已经是最新版本 0.0 B 0.00B/

[Windows Update] 当更新时碰到错误消息为 80240016 时的解决方式

★ Windows Update 错误代码: ─ Windows Update 误误 80240016 ★ Windows Update 错误之处理方式: 1. 关闭 Windows Update 窗口 2. 按下 [开始] 按钮,并在搜寻字段中输入 "命令提示符"(英文版OS可输入:Command Prompt) ,并执行它 图一>: ? 步骤二,亦可以按下 [开始] 按钮,选择 [所有程序] ,再选择 [附属应用程序] / [命令提示符],并在该项目上按下鼠标右键,以 [ 以

【Mac】解决macos安装升级时报错安装所选更新时发生错误的问题

1 系统更新macjave 更新一直失败: 2  解决方法为:重新启动Mac,并按住Command+R进入恢复模式,找到Terminal后输入csrutil disable,然后重启Mac,再次下载并安装更新. 3 系统更新后,务必记得重启Mac再次进入恢复模式(重启时按住Command+R),找到Terminal并输入csrutil enable,再重启系统,大功告成! 原文地址:https://www.cnblogs.com/richerdyoung/p/11183825.html

mysql-5.7.9-winx64 MySQL服务无法启动,服务没有报告任何错误 的解决办法

mysql-5.7.9-winx64 MySQL服务无法启动,服务没有报告任何错误 最新解压版本的mysql 解压安装的时候报错 D:\mysql-5.7.9-winx64\bin>net start mysql MySQL 服务正在启动 . MySQL 服务无法启动. 服务没有报告任何错误. mysql下面是没有data文件夹的,此文件夹不需要自己建. D:\mysql-5.7.9-winx64\bin>mysqld --console 2015-11-23T14:46:03.711082Z

MySQL-5.6.x二进制版本安装记录

一.操作系统安装环境 1. 操作系统:CentOS 6.7 x86_64, 操作系统基本环境提前准备过程略过. 2. 二进制MySQL版本:mysql-5.6.29-linux-glibc2.5-x86_64.tar.gz 3. 本安装过程也适合mysql-5.5.x二进制版本的安装过程参考. 二.安装mysql-5.6.29-linux-glibc2.5-x86_64 1. 下载编译版本mysql安装 wget http://mirrors.sohu.com/mysql/MySQL-5.6/m

C#如何解决对ListView控件更新以及更新时界面闪烁问题

第一个问题:如何更新ListView控件内容 很多时候运行窗体程序时,由于程序中使用了多线程加之操作不当,所以在对控件操作时会出现下面这样的异常: 这是因为我们在窗体中添加的控件都有属于自己的线程,所以不能从其它线程来访问它. 那要如何解决? 使用委托:MethodInvoker,我用这个挺方便的.下面举一个用例: 1 //调用InitListView(),便可以对ListView控件进行自由更新啦 2 private void InitListView() 3 { 4 MethodInvoke

解决Win8.1 / Win Server 2012 r2 下安装 Visual Studio 时一直要求重新启动的问题(原创)

注:本文为作者原创文章,转载于引用请注明出处,谢谢. 今天在x64的英文版Windows Server 2012 r2上安装最新版的 Visual Studio 2015 Exterprise 时,提示需要重新启动: 于是我restart了N次,可还是不行,在网上进行搜索,发现能在日志文件中找到原因,日志文件在C:\Users\%username%\AppData\Local\Temp中,或者直接在安装界面点"日志文件"进入. 参考日志文件的Condition(环境检查)部分: [0A

zabbix前端在php7上退出时出现错误解决方法

环境是zabbix3.0 + php7.1.2 当点击logout时出现错误:http://zabbix/index.php?reconnect=1 这是一个bug(原文地址:http://wuhf2015.blog.51cto.com/8213008/1761805) 解决办法:修改php函数 在zabbix前端目录中切换到:/zabbix/include/classes/api/wrappers 找到函数:__call 原函数定义为:        public function __cal

PHP编译安装时常见错误解决办法,php编译常见错误

PHP编译安装时常见错误解决办法,php编译常见错误 1.configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution 解决方法: yum -y install libxslt-devel 2.configure: error: Could not find net-snmp-config binary. Please check your net-snmp installa