我正在尝试将JSON从TMemo导入到TFDMemTable。在执行时,我得到一个"Exception EAccessViolation...“错误。似乎导致问题的代码行是FDMemTable1.FieldByName('userId').AsString := oProd.GetValue('PutRequest.Item.userId').Value;,这是我将我的第一个条目附加到FDMemTable的地方。我检查了JSON,它的格式似乎是正确的。
下面是我的JSON数组:
{"Jobs":[{"PutRequest":{"Item":{"userId":{"S":"1"},"WorkOrder":{"S":"29236"},"ServiceDate":{"S":"4/12/2019"}}}},{"PutRequest":{"Item":{"userId":{"S":"1"},"WorkOrder":{"S":"29237"},"ServiceDate":{"S":"4/12/2019"}}}}]}下面是我的代码片段:
uses
System.JSON;
procedure TForm1.FormCreate(Sender: TObject);
var
oJson: TJSONObject;
oArr: TJsonArray;
oPair: TJSONPair;
i: Integer;
oProd: TJSONObject;
begin
FDMemTable1.FieldDefs.Add('userId', ftString, 5);
FDMemTable1.FieldDefs.Add('WorkOrder', ftString, 5);
FDMemTable1.FieldDefs.Add('ServiceDate', ftString, 10);
FDMemTable1.Active := True;
oJson := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(Memo1.Lines.Text), 0) as TJSONObject;
try
oArr := oJson.Get('Jobs').JsonValue as TJSONArray;
for i := 0 to oArr.Count - 1 do begin
oProd := oArr.Items[i] as TJSONObject;
FDMemTable1.Append;
FDMemTable1.FieldByName('userId').AsString := oProd.GetValue('PutRequest.Item.userId').Value;
FDMemTable1.FieldByName('WorkOrder').AsString := oProd.GetValue('PutRequest.Item.WorkOrder').Value;
FDMemTable1.FieldByName('ServiceDate').AsString := oProd.GetValue('PutRequest.Item.ServiceDate').Value;
FDMemTable1.Post;
end;
finally
oJson.Free;
end;
end;我检查了"oArr“和"oProd”的赋值和值,它们看起来都是正确的。我猜想当我试图给FDMemTable赋值时,我没有正确地寻址JSON。我该如何解决这个问题?
发布于 2019-04-20 02:33:42
你忘了加
`FDMemTable1.CreateDataSet;`在……下面
FDMemTable1.FieldDefs.Add('ServiceDate', ftString, 10);这意味着您的dataSet字段尚未创建,因此调用
FDMemTable1.FieldByName('userId').AsString将返回nil并在向其赋值时抛出EV
添加这一行,您就可以开始了
请参阅Jim McKeeth的this guide (视频下面的代码),了解如何正确使用TMemTable以及它能做些什么。
https://stackoverflow.com/questions/55766112
复制相似问题