通过ClientDataSet进行Delphi 2010 MySQL更新失败

时间:2011-10-12 13:24:24

标签: mysql delphi dbexpress tclientdataset

我正在使用Delphi 2010并使用dbexpress连接到MySQL数据库。连接100%工作,我正在检索我的数据。当我尝试通过dbGrid更新数据时出现问题。我正在运行表中的所有条目,对它们执行检查。在调用ApplyUpdates方法时,我收到“其他用户未找到或更改记录”。

将DataSetProvider上的updateMode更改为upWhereKeyOnly,我现在处于收到“无法找到记录,未指定密钥”的情况。我试过添加

BasysClientDataSet.FieldByName('idPolicy').ProviderFlags := [pfInUpdate, pfInWhere, pfInKey];

这个代码,但我得到了同样的错误。我尝试将ProviderFlags添加到SQLQuery但我没有得到这样的字段“idPolicy”

3 个答案:

答案 0 :(得分:1)

尝试为所有主键列设置提供者标志pfInKey,就像在客户端数据集中但不在源数据集中一样。当db express忽略这些设置时,即使我不明白字段在客户端数据集中做了什么,这也常常帮助我?我会说它是一个错误。

答案 1 :(得分:0)

尝试将DataSetProvider组件的 ResolveToDataSet 属性设置为 True

答案 2 :(得分:0)

尝试创建此过程并在提供程序BeforeUpdateRecord事件中使用它。

procedure SetOriginFlags(Source, Dest: TCustomClientDataSet);
var
  i: Integer;
begin
  for i := 0 to Source.FieldCount - 1 do
  begin
    if Dest.FindField(Source.Fields[i].FieldName) <> nil then
    begin
      Dest.FindField(Source.Fields[i].FieldName).ProviderFlags :=
        Source.Fields[i].ProviderFlags;
      if Dest.FindField(Source.Fields[i].FieldName).ProviderFlags <> [pfHidden] then
        Dest.FindField(Source.Fields[i].FieldName).Origin :=
          Source.Fields[i].FieldName;
    end;
  end;
end;