我有一张EXCEL sheet.it有各种表单字段,命名为
“smrBgm133GallonsGross/ smrBgm167GallonsGross “
和
“smrEgm133GallonsGross/ smrEgm167GallonsGross “
我在XCEL表格中添加了2个名为
的新表格字段
smrBgm167GrosGalnsDA/smrEgm167GrosGalnsDA
我在EXCEL中制作的上述附加内容应该被命名为
`smrBgm229GallonsGross/smrEgm229GallonsGross` because. This is a MUST for the Delphi application to function properly.
这个Delphi-4应用程序提取并与数据库一起提供表格DATA。
我的Delphi-4应用程序工作(检查/插入/检索),以便当前几个月开始加仑牛奶“bgm229”等于结束加仑牛奶“egm229”的最后几个月,然后如果它们不同则抛出异常。
Excel表格: - Bgm167GrosGalnsDA / Egm160GrosGalnsDA
Delphi代码(DB-输入/ DB-输出/验证): - bgm229 / egm229
SQL 2005 DB: - bgm167DA / egm167DA
实际上我添加的列应该是命名为“smrEgm133GallonsGross / smrEgm167GallonsGross”...我搞砸了命名它们现在正在制作....
在Delphi程序中,对于初始库存,代码是
ExtractFormBgmInfo(smrMilkAvMilk, 'smrBgm133');
ExtractFormBgmInfo(smrMilkDe, 'smrBgm167');
用于结束库存的代码
ExtractFormEgmInfo(smrMilkAvMilk, 'smrEgm133');
ExtractFormEgmInfo(smrMilkDe, 'smrEgm167');
我在列表中添加“smrBgm229GrosGalns / smrEgm229GrosGalns” 但问题是它们在EXCEL表中被错误地命名为“smrBgm167GrosGalnsDA / smrEgm167GrosGalnsDA”,而它们将被命名为'smrBgm229 /'smrEgm229'(就像Delphi代码中的情况一样)。因此。我在上面添加了......
ExtractFormBgmInfo(smrMilkAvMilk, 'smrBgm133');
ExtractFormBgmInfo(smrMilkDe, 'smrBgm167');
ExtractFormBgmInfo(smrMilkDyedDe, 'smrBgm229');
ExtractFormEgmInfo(smrMilkAvMilk, 'smrEgm133');
ExtractFormEgmInfo(smrMilkDe, 'smrEgm167');
ExtractFormEgmInfo(smrMilkDyedDe, 'smrEgm229');
这会引发错误,因为未在EXCEL表中定义smrBgm229GallonsGross / smrEgm229GallonsGross 。因此问题是如何将“smrBgm167GrosGalnsDA”从Excel工作表转换为“smrBgm229GallonsGross”然后让我的“ExtractForm”语句正确吗?
请帮助今天安排发布,并与我的超级人员讨论这个问题
答案 0 :(得分:4)
您要做的是将一个字符串映射到另一个字符串。您可以使用简单的字符串列表。
// 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;