Преобразование между разными единицами измерения в SQL (в Access) - PullRequest
0 голосов
/ 14 января 2009

Я пытаюсь запрограммировать базу данных доступа, но я использую SQL для всех своих запросов. У меня есть база данных почти завершена, но у меня есть один запрос, который поставил меня в тупик. Это база данных, которая содержит рецепты. У меня есть таблица, в которой у меня есть все преобразования для приготовления пищи (столовая ложка в чайную ложку, чайная ложка в чашку и т. Д.). Пользователь должен иметь возможность добавлять ингредиенты, используя те единицы измерения, которые требуются в рецепте (другими словами, я не могу стандартизировать единицы измерения, я должен найти, какие они есть). Тогда я должен быть в состоянии преобразовать их в стандартизированную единицу. Вот где у меня проблема, потому что такие вещи, как овощи, могут поступать в чашках, столовых ложках и т. Д. В то время как такие вещи, как мясо, бывают в унциях, фунтах и ​​т. Д. Я хочу избежать создания группы vb if / then. Я чувствую, что должен быть способ сделать это с SQL, но я не могу понять это.

Ответы [ 6 ]

3 голосов
/ 14 января 2009

Я бы подумал об этом по-другому. У вас есть различные типы мер (объем, вес, количество и т. Д.). Каждая из этих мер имеет различные конвертируемые единицы. Выбирая меру (например, унции), выберите тип меры и определенную единицу. У меня был бы способ преобразования между единицами измерения одного типа - для поддержки изменения размеров рецептов - но я бы не беспокоился о преобразовании между различными типами мер.

Как только вы знаете тип, вы можете сохранить все значения в базе данных в единицах измерения для этого типа меры. Основываясь на значении и, возможно, предпочтениях пользователя, вы можете перевести его в подходящий дисплейный блок при его показе. Я не думаю, что это было бы особенно легко сделать в SQL, и я бы не боялся делать преобразование в коде. Вам просто нужно иметь разные средства форматирования отображения для каждого типа меры, которые выбирают соответствующую единицу измерения и выполняют преобразование.

1 голос
/ 14 января 2009

Я думаю, что для приготовления пищи вы должны разделить два разных типа единиц

  1. по весу
  2. по объему

Вы не можете стандартизировать эти юниты, или какой смысл знать, что вам нужно 2 чашки еды?

Затем, когда вы различаете эти два разных типа единиц, вы можете стандартизировать их как две единицы. Может быть:

  1. чашки, чайная ложка, ... в мл
  2. мясо, овощи, ... в г или фунтах, или что-то еще

Если все они имеют одинаковую базу, вы можете сравнить их.

0 голосов
/ 18 января 2009

OK

Просто хотел опубликовать мое решение на случай, если у кого-нибудь возникнет эта проблема в будущем. Я фактически создаю таблицу и заполняю ее всеми другими данными, которые меня интересуют, с помощью SQL обычным способом. Затем у меня есть функция DCOUNT, чтобы сказать, сколько существует записей, которые устанавливают переменную. Затем у меня есть функция DLOOKUP, которая сообщает мне, что конвертировать из и в, и устанавливает ее в новую таблицу для записи, в которой я работаю. Фу, я думаю, что у меня над головой! Спасибо за помощь, ребята.

0 голосов
/ 15 января 2009

Я получил его, чтобы вытащить коэффициент преобразования для одной записи. Я просто сделал это с помощью запросов. Я в основном ищу столбец и строку (с sql, имена столбцов и строк изменяются), и это значение - то, на что мне нужно умножиться. Однако, как мы все знаем, вы никогда не работаете с одной записью в sql. Любые идеи о том, как расширить это, чтобы включить все данные?

0 голосов
/ 14 января 2009

Пользователь должен будет предоставить вам юнит, а у каждого юнита будет тип (вес, объем и т. Д.). Ваша «таблица преобразования» должна просто включать базовую линию для каждого типа юнита. то есть 8 унций на чашку, 128 унций на галлон. Зная эти две вещи, вы можете конвертировать чашки в галлоны.

Выполнение этого в доступе в одном запросе - это отдельная история. Если вы можете сделать немного VBA, набрать чашку в унции за один звонок, а затем унции в галлоны в другой, я думаю, вам будет намного легче.

0 голосов
/ 14 января 2009

до тех пор, пока вы спрашиваете пользователя об используемом им устройстве, и вы знаете, для чего вы собираетесь, тогда вы сможете просто запросить ответ из файла. Предполагая, что ваш стол выглядит примерно так:

fromUnit fromUnitFactor (вероятно, всегда 1) ToUnit ToUnitFactor (все, что нужно, чтобы добраться от fromUnit к toUnit)

тогда просто запросите это, вы знаете, что ищете, знаете, что у вас есть. Затем просто возьмите сумму, предоставленную пользователем, и умножьте ее на значение toUnitFactor, которое вы получите.

Самая большая проблема с этим - вам нужны все комбинации от и до в вашей таблице.

имеет смысл?

...