Arhn - архитектура программирования

как создать структуру Delphi 4 для сопоставления имен столбцов в XLS именам столбцов в SQL

У меня есть лист 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 извлекает и проверяет данные формы в тандеме с БД.

Мое приложение Delphi-4 работает (проверяет / вставляет / извлекает) так, что начальный галлон молока «bgm229» в текущих месяцах равен галлону молока «egm229» за последние месяцы, а затем генерирует исключение, если они отличаются.

Таблицы Excel: - Bgm167GrosGalnsDA / Egm160GrosGalnsDA Delphi Code (DB- ввод / DB- вывод / проверка): - bgm229 / egm229 SQL 2005 DB: - bgm167DA / egm167DA
Фактически столбцы, которые я ДОБАВИЛ, должны были быть названы asa » smrEgm133GallonsGross / smrEgm167GallonsGross "... Я допустил ошибку, назвав их, и теперь они находятся в разработке ....

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

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

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

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

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

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

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

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

Пожалуйста, помогите, сегодня намечен выпуск, и мне нужно обсудить это с моими начальниками.

22.09.2009

  • У вас есть отдельная колонка для каждой возможной цены за галлон молока? Я думаю, вы делаете это неправильно. А почему вы хотите поместить данные за 2,29 доллара в столбец за 1,61 доллара? 22.09.2009
  • На самом деле все столбцы должны были быть названы asa bgm229 / egm229 ... Я напортачил с их названиями, и сейчас они находятся в разработке .... Итак, основная идея, которую я хочу сделать, это IF the excel value is Bgm167 GrosGalns DA then cosider it as bgm229/ egm229 22.09.2009

Ответы:


1

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

// 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, описанное выше, будет иметь проблемы, если какое-либо из имен столбцов может в них есть знаки равенства, но вы можете смягчить это, изменив _7 _ собственность.

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;
22.09.2009
  • Роб, я обновил определение Probelm и все еще работаю над вашим решением. 22.09.2009
  • Я получаю повторно объявленный идентификатор для обеих переменных ColumnNameMap: = TStringList.Create; ColumnNameMap.Values ​​['Bgm167 GrosGalns DA']: = 'bgm229 / egm229'; 22.09.2009
  • Я получаю сообщение об ошибке // несовместимый класс типа и ссылка на строку // для ColumnNameMap: = TStrings ;. Должен ли я определять ColumnNameMap как ssting в var? 22.09.2009
  • Я определил ColumnNameMap как ColumnNameMap: TStringList; ... gettinbg две ошибки 22.09.2009
  • [Ошибка] BgmExcel.pas (2263): несовместимые типы: 'TStringList' и 'Ссылка на класс' [Ошибка] BgmExcel.pas 22.09.2009
  • Мне жаль. Я предполагал, что вы понимаете синтаксис Delphi, например, где разрешено объявление переменных и когда уместно объявлять их переменные, а не использовать их. Отредактирую, чтобы было понятнее. Если у вас все еще есть проблемы с синтаксисом, задайте отдельный вопрос, поскольку он не имеет ничего общего со структурами данных или преобразованием одной строки в другую. 22.09.2009
  • (2266): Необъявленный идентификатор: «Bgm167GrosGalns DA» 22.09.2009
  • спасибо, Роб, я всего в нескольких дюймах от решения, извините, что засыпаю вас пошаговыми инструкциями ... решение / ошибки, которые я дал .... 22.09.2009
  • Но у меня есть один вопрос .... Проблема, которую я ПОЛУЧИЛ, находится в ОДНОЙ процедуре (delphi) .... следует ли мне добавить вышеупомянутое ИСПРАВЛЕНИЕ КАК ОТДЕЛЬНУЮ процедуру / ФУНКЦИЮ или в той же процедуре (delphi) в качестве основной проблемы является? 22.09.2009
  • Объявите переменную в одном месте, чтобы сделать ее доступной для всех мест, где необходимо использовать переменную. Инициализируйте переменную и заполните список ровно один раз. Используйте его там, где вам нужно. Может быть, это все в одной процедуре, а может быть, во всей вашей программе. Я не знаю, потому что не вижу ваш код. 23.09.2009
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..