Как создать структуру Delphi 4 для сопоставления имен столбцов в XLS с именами столбцов в SQL - PullRequest
1 голос
/ 22 сентября 2009

У меня есть 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 Code (DB-ввод / DB-вывод / проверка): - bgm229 / egm229 БД SQL 2005: - bgm167DA / egm167DA
На самом деле добавленные мной столбцы должны были быть с именем asa "smrEgm133GallonsGross / smrEgm167GallonsGross" ... Я испортил их имена, и они сейчас в производстве ....

В процедуре Delphi для начала инвентаризации код это

  ExtractFormBgmInfo(smrMilkAvMilk,  'smrBgm133');
  ExtractFormBgmInfo(smrMilkDe,           'smrBgm167');

Для завершения инвентаризации код это

  ExtractFormEgmInfo(smrMilkAvMilk,  'smrEgm133');
  ExtractFormEgmInfo(smrMilkDe,           'smrEgm167');

Я добавляю «smrBgm229GrosGalns / smrEgm229GrosGalns» в список Но проблема в том, что они ошибочно названы «smrBgm167GrosGalnsDA / smrEgm167GrosGalnsDA» на листах EXCEL, в то время как они должны называться «smrBgm229 /« smrEgm229 »(как в случае с кодом Delphi). Следовательно. Я добавил ... к вышесказанному

  ExtractFormBgmInfo(smrMilkAvMilk,    'smrBgm133');
  ExtractFormBgmInfo(smrMilkDe,           'smrBgm167');
  ExtractFormBgmInfo(smrMilkDyedDe,       'smrBgm229'); 

  ExtractFormEgmInfo(smrMilkAvMilk,      'smrEgm133');
  ExtractFormEgmInfo(smrMilkDe,           'smrEgm167');
  ExtractFormEgmInfo(smrMilkDyedDe,       'smrEgm229');

Это приводит к ошибке, так как smrBgm229GallonsGross / smrEgm229GallonsGross не определены в листах EXCEL . Так что проблема заключается в , как мне преобразовать «smrBgm167GrosGalnsDA» из листов Excel в «smrBgm229Gall» и затем сделать мой оператор «ExtractForm» правильным?

Пожалуйста, помогите, на сегодня запланирован релиз, и я должен обсудить это с моими супервайзерами

1 Ответ

4 голосов
/ 22 сентября 2009

То, что вы хотите сделать, это map одна строка в другую. Для этого вы можете использовать простой список строк.

// 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...