我有一个EXCEL sheet.it,它有各种各样的表单字段,命名为
“smrBgm133GallonsGross/ smrBgm167GallonsGross “ 和
“smrEgm133GallonsGross/ smrEgm167GallonsGross “我在中添加了两个名为
smrBgm167GrosGalnsDA/smrEgm167GrosGalnsDA
我在EXCEL中创建的上述加载项应该将ACTUALLy命名为
`smrBgm229GallonsGross/smrEgm229GallonsGross` because. This is a MUST for the Delphi application to function properly.此Delphi-4应用程序提取表单数据,并与DB一起使用.
我的Delphi-4应用程序工作(检查/插入/检索),使当前几个月开始的牛奶“bgm229”等于最后几个月结束的牛奶“egm229”,然后抛出一个异常,如果它们不同。
Excel工作表:- Bgm167GrosGalnsDA/ Egm160GrosGalnsDA Delphi代码(DB-输入/ DB-输出/验证):- SQL 229/ egm229 SQL 2005 DB:- bgm167DA/ egm167DA
实际上,我添加的列应该被命名为 "smrEgm133GallonsGross/ smrEgm167GallonsGross“,...I在命名它们时搞砸了,它们现在正在生产中.
在Delphi过程中,对于初始库存,代码是
ExtractFormBgmInfo(smrMilkAvMilk, 'smrBgm133');
ExtractFormBgmInfo(smrMilkDe, 'smrBgm167');为了结束盘存,代码是
ExtractFormEgmInfo(smrMilkAvMilk, 'smrEgm133');
ExtractFormEgmInfo(smrMilkDe, 'smrEgm167');我在列表中添加了“smrBgm229GrosGalns/smrEgm229GrosGalns”,但问题是它们在EXCEL中被错误地命名为“smrBgm167GrosGalnsDA/smrEgm167GrosGalnsDA”,而它们将被命名为‘smrBgm229 229/’smrEgm229 229‘(与Delphi代码中的情况一样)。因此。我在上面添加了...to
ExtractFormBgmInfo(smrMilkAvMilk, 'smrBgm133');
ExtractFormBgmInfo(smrMilkDe, 'smrBgm167');
ExtractFormBgmInfo(smrMilkDyedDe, 'smrBgm229');
ExtractFormEgmInfo(smrMilkAvMilk, 'smrEgm133');
ExtractFormEgmInfo(smrMilkDe, 'smrEgm167');
ExtractFormEgmInfo(smrMilkDyedDe, 'smrEgm229');这会引发一个错误,因为smrBgm229GallonsGross /smrEgm229GallonsGross没有在EXCEL sheets .So中定义,问题是如何将“smrBgm167GrosGalnsDA”从Excel工作表转换为“smrBgm229GallonsGross”,然后使“ExtractForm”语句正确?
请帮助,今天有一个发布计划,并与我的上级讨论这件事。
发布于 2009-09-22 15:33:14
您要做的是将一个字符串映射到另一个字符串。您可以为此使用一个简单的字符串列表。
// Declare the variable somewhere, such as at unit scope or as a field
// of your form class
var
ColumnNameMap: TStrings;// Somewhere else, such as unit initialization or a class constructor,
// initialize the data structure with the column-name mappings.
ColumnNameMap := TStringList.Create;
ColumnNameMap.Values['Bgm167 GrosGalns DA'] := 'bgm229/ egm229';// In yet a third place in your code, use something like this to map
// the column name in your input to the real column name in your output.
i := ColumnNameMap.IndexOfName(ColumnName);
if i >= 0 then
RealColumnName := ColumnNameMap.Values[ColumnName]
else
RealColumnName := ColumnName;Delphi的后期版本具有通用的TDictionary类。使用TDictionary<string, string>。如果任何列名中都有相等的符号,那么上面我描述的TStrings解决方案就会有问题,但是您可以通过更改NameValueSeparator属性来减轻这一点。
var
ColumnNameMap: TDictionary<string, string>;ColumnNameMap := TDictionary<string, string>.Create;
ColumnNameMap.Add('Bgm167 GrosGalns DA', 'bgm229/ egm229');if not ColumnNameMap.TryGetValue(ColumnName, RealColumnName) then
RealColumnName := ColumnName;https://stackoverflow.com/questions/1460297
复制相似问题