使用带有Delphi XE7的FireDAC阵列DML向Firebird 2.5数据库插入数据时存在此问题,将字符串数据存储为“??????”文字,图片如下:
我有一个TList并将它们循环传递给params:
//ADetalles is a TList<TServiciosDetRec>
ADataSet.Params.ArraySize := ADetalles.Count;
ADataSet.ParamByName('id').DataType := ftInteger;
ADataSet.ParamByName('nombre').DataType := ftString;
ADataSet.ParamByName('serv').DataType := ftInteger;
ADataSet.ParamByName('check').DataType := ftInteger;
for i := 0 to ADataSet.Params.ArraySize -1 do begin
ADataSet.ParamByName('id').AsIntegers[i] := AIndex;
ADataSet.ParamByName('nombre').AsStrings[i] := ADetalles.Items[i].SNombre; //<--- Here the Problem
ADataSet.ParamByName('serv').AsIntegers[i] := ADetalles.Items[i].SCodigo;
ADataSet.ParamByName('check').AsIntegers[i] := AListChecked.Items[ADetalles.IndexOf(ADetalles.Items[i])].Checked.ToInteger;
end;
ADataSet.Execute(ADataSet.Params.ArraySize,0);
这里记录:
TServiciosDetRec = record
SNombre: String;
SCodigo: Integer;
SSelected: Boolean;
end;
使用普通的ExecSQL逐个插入数据,字符串存储正确,但不使用执行数组DML。