2009-09-22 5 views
1

У меня есть sheet.it EXCEL имеет различные полей формы, которые названы в качествекак создать Delphi 4 структуры для отображения имен столбцов в XLS имен столбцов в SQL

“smrBgm133GallonsGross/ smrBgm167GallonsGross “ 

и

“smrEgm133GallonsGross/ smrEgm167GallonsGross “ 

я добавил к XCEL листов 2 новых полей формы названных
smrBgm167GrosGalnsDA/smrEgm167GrosGalnsDA

Вышеуказанные ДОБАВЛЕНИЯ я сделал в EXCEL должны фактически быть назван

`smrBgm229GallonsGross/smrEgm229GallonsGross` because. This is a MUST for the Delphi application to function properly. 

Эти Делая-4 экстракты приложений и vewrifys данные форм в тандеме с БД.

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

Excel листов: - Bgm167GrosGalnsDA/Egm160GrosGalnsDA Delphi Code (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» в список Но проблема в том, что они названы ошибочно, как «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 .so вопроса является как преобразовать «smrBgm167GrosGalnsDA» из листов Excel в "SmrBgm229GallonsGross", а затем сделать мое заявление "ExtractForm" правильным?

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

+1

У вас есть отдельный столбец для каждой возможной цене галлона молока? Я думаю, вы делаете это неправильно. И почему вы хотите поместить данные за $ 2,29 в столбец за $ 1,61? –

+0

На самом деле все столбцы должны были быть названы как «bgm229/egm229» ... Я ** испортил их, и они сейчас на производстве ... Итак, основная идея - это то, что я хочу сделать: 'ЕСЛИ значение excel - это Bgm167 GrosGalns DA , тогда коснитесь его как bgm229/egm229' – vas

+1

Я беспокоюсь о молоке. –

ответ

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; 
+0

спасибо миллиону Роба ..... Я буду работать и сообщить результаты ... ASAP – vas

+0

Роб, я обновил определение Probelm и все еще работаю над вашим решением. – vas

+0

Идентификатор gettged для всех переменных ColumnNameMap: = TStringList.Create; ColumnNameMap.Values ​​['Bgm167 GrosGalns DA']: = 'bgm229/egm229'; – vas

Смежные вопросы