我正在使用Delphi 2010并使用dbexpress连接到MySQL数据库。连接100%工作,我正在检索我的数据。当我尝试通过dbGrid更新数据时出现问题。我正在运行表中的所有条目,对它们执行检查。在调用ApplyUpdates方法时,我收到“其他用户未找到或更改记录”。
将DataSetProvider上的updateMode更改为upWhereKeyOnly,我现在处于收到“无法找到记录,未指定密钥”的情况。我试过添加
BasysClientDataSet.FieldByName('idPolicy').ProviderFlags := [pfInUpdate, pfInWhere, pfInKey];
这个代码,但我得到了同样的错误。我尝试将ProviderFlags添加到SQLQuery但我没有得到这样的字段“idPolicy”
答案 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;