我使用TClientDataSet
在我的Delphi应用程序来比较位于2个不同的数据库2个表之间的数据与本地数据分配。 事情我使用:
-
SpPlansQuery: TADOQuery
-原始数据查询 -
PPUQuery: TADOQuery
-改变了数据查询(使用比SpPlansQuery不同ADO连接) -
ComparisonDataSet: TClientDataSet
-数据集显示前面2个查询之间的唯一区别
我试图填补ComparisonDataSet
如下(我严重减少我的代码以突出的问题):
procedure TComparisonSpPlanForm.RefillDataSet;
const
// IMPORTANT: check that fields count in next 2 lines would be the same
FieldsStr1 = 'Article_PPU;Contractor_S_PPU;Recipient_S_PPU;OrderNum_PPU;OrderNum2_PPU;OrdN_PPU;Title_PPU;Queue_PPU;KolSht_PPU;Weight1_PPU;Material_PPU;Drawing_PPU;Graph_PPU';
FieldsStr2 = 'Title_1;Title_3;Title_4;num;inum;onum;Title;QNum;num_of;weight;Title_2;Drawing;Graph';
var
Deleted: Boolean;
FieldValues2: Variant;
FieldValues1: Variant;
begin
ComparisonDataSet.DisableControls;
// clear ComparisonDataSet
if ComparisonDataSet.Active then
ComparisonDataSet.Close;
ComparisonDataSet.CreateDataSet;
// deleted records
SpPlansQuery.First;
while not SpPlansQuery.Eof do
begin
FieldValues1 := SpPlansQuery[ReplaceStr(FieldsStr1, '_PPU', '')];
Deleted := not PPUQuery.Locate('ID', Integer(SpPlansQuery['PPONREC']), []);
if Deleted then
begin
ComparisonDataSet.Append;
// next string throws exception and this is a big problem
ComparisonDataSet[ReplaceStr(FieldsStr1, '_PPU', '')] := FieldValues1;
ComparisonDataSet.Post;
end;
SpPlansQuery.Next;
end;
ComparisonDataSet.First;
ComparisonDataSet.EnableControls;
end;
至于你可以猜到,ComparisonDataSet包含命名字段ARTICLE
和ARTICLE_PPU
和异常,并出现“无法转换变量类型(空)的成式(整数)”当我尝试赋值将发生ComparisonDataSet['ARTICLE']
我知道这是因为我想直接到现场指定,但得到了同样的结果。
ARTICLE
是具有20个字符长度的字符串字段。
任何人都可以点我如何将值分配给一个TClientDataSet领域没有得到错误?
正如下面的要求,这是我的字段定义:
在ComparisonSpPlanUnit.dfm
:
object ComparisonDataSet: TClientDataSet
Aggregates = <>
FieldDefs = <
...
item
Name = 'ARTICLE'
DataType = ftString
Size = 20
end>
...
object ComparisonDataSetARTICLE: TStringField
DisplayLabel = #1057#1090#1072#1090#1100#1103
FieldName = 'ARTICLE'
end
...
end
在ComparisonSpPlanUnit.pas
:
ComparisonDataSetARTICLE: TStringField;