zoukankan      html  css  js  c++  java
  • 使用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;

  • 相关阅读:
    原型和原型链
    面向对象
    git在idea中的使用,如何构远程git方仓库
    java maven 安装
    Kafka消费者APi
    Kafka生产者APi
    kafka基本概念
    redis常用命令
    redis.conf配置文件参数说明
    Redis.RedisNativeClient的方法get_Db 没有实现
  • 原文地址:https://www.cnblogs.com/zsfishman/p/6816728.html
Copyright © 2011-2022 走看看