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;

  • 相关阅读:
    mysql存储过程
    mysql sql语句大全(2)
    JavaScript自动关闭窗口
    mvc存储Cookie和读取Cookie方法
    JS正则表达式验证账号、手机号、电话、邮箱、货币
    Have trouble in your life
    微店网
    MVC4使用EF6连接mysql数据库
    asp.net,mvc4,mysql数据库,Ef遇到问题集合
    Python对DICOM图像进行阈值分割
  • 原文地址:https://www.cnblogs.com/zsfishman/p/6816728.html
Copyright © 2011-2022 走看看