gpt4 book ai didi

sql - 如何创建 Delphi 4 结构以将 XLS 中的列名映射到 SQL 中的列名

转载 作者:行者123 更新时间:2023-12-03 19:36:03 27 4
gpt4 key购买 nike

我有一个 EXCEL 表。它有各种名为的表单域

 “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 应用程序与 DB 一起提取并验证表单 DATA。

我的 Delphi-4 应用程序工作(检查/插入/检索),因此当前月份开始的牛奶加仑“bgm229”等于上个月结束的加仑牛奶“egm229”,如果它们不同则抛出异常。

Excel 表:- Bgm167GrosGalnsDA/Egm160GrosGalnsDA
Delphi 代码(DB- 输入/DB- 输出/验证):- bgm229/egm229
SQL 2005 数据库:- bgm167DA/egm167DA
实际上我添加的列应该是 命名为“smrEgm133GallonsGross/smrEgm167GallonsGross”...I 搞砸了他们的名字,他们现在正在制作中......

在德尔福程序中,对于开始库存,代码是
  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');

这会引发错误,因为 smrBgm229GallonsGross/smrEgm229GallonsGross 未在 EXCEL 表格 中定义.所以问题是 如何将 Excel 表格中的“smrBgm167GrosGalnsDA”转换为“smrBgm229GallonsGross”然后让我的“ExtractForm”声明正确?

请帮忙,今天安排了一个发布,并与我的上级讨论这个问题

最佳答案

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

// 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 类(class)。使用 TDictionary<string, string> . TStrings 如果任何列名中可以包含等号,我上面概述的解决方案将出现问题,但您可以通过更改 NameValueSeparator 来缓解这种情况。属性(property)。
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;

关于sql - 如何创建 Delphi 4 结构以将 XLS 中的列名映射到 SQL 中的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1460297/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com