首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建Delphi 4结构将XLS中的列名映射为SQL中的列名

如何创建Delphi 4结构将XLS中的列名映射为SQL中的列名
EN

Stack Overflow用户
提问于 2009-09-22 14:02:27
回答 1查看 646关注 0票数 1

我有一个EXCEL sheet.it,它有各种各样的表单字段,命名为

代码语言:javascript
复制
 “smrBgm133GallonsGross/ smrBgm167GallonsGross “  

代码语言:javascript
复制
 “smrEgm133GallonsGross/ smrEgm167GallonsGross “

我在中添加了两个名为

smrBgm167GrosGalnsDA/smrEgm167GrosGalnsDA

我在EXCEL中创建的上述加载项应该将ACTUALLy命名为

代码语言:javascript
复制
`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过程中,对于初始库存,代码是

代码语言:javascript
复制
  ExtractFormBgmInfo(smrMilkAvMilk,  'smrBgm133');
  ExtractFormBgmInfo(smrMilkDe,           'smrBgm167');

为了结束盘存,代码是

代码语言:javascript
复制
  ExtractFormEgmInfo(smrMilkAvMilk,  'smrEgm133');
  ExtractFormEgmInfo(smrMilkDe,           'smrEgm167');

我在列表中添加了“smrBgm229GrosGalns/smrEgm229GrosGalns”,但问题是它们在EXCEL中被错误地命名为“smrBgm167GrosGalnsDA/smrEgm167GrosGalnsDA”,而它们将被命名为‘smrBgm229 229/’smrEgm229 229‘(与Delphi代码中的情况一样)。因此。我在上面添加了...to

代码语言:javascript
复制
  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”语句正确?

请帮助,今天有一个发布计划,并与我的上级讨论这件事。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-09-22 15:33:14

您要做的是将一个字符串映射到另一个字符串。您可以为此使用一个简单的字符串列表。

代码语言:javascript
复制
// Declare the variable somewhere, such as at unit scope or as a field
// of your form class
var
  ColumnNameMap: TStrings;

代码语言:javascript
复制
// 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';

代码语言:javascript
复制
// 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属性来减轻这一点。

代码语言:javascript
复制
var
  ColumnNameMap: TDictionary<string, string>;

代码语言:javascript
复制
ColumnNameMap := TDictionary<string, string>.Create;
ColumnNameMap.Add('Bgm167 GrosGalns DA', 'bgm229/ egm229');

代码语言:javascript
复制
if not ColumnNameMap.TryGetValue(ColumnName, RealColumnName) then
  RealColumnName := ColumnName;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1460297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档