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


до тех пор, пока вы спрашиваете пользователя об используемом им устройстве и знаете, что собираетесь делать, у вас должна быть возможность просто запросить ответ из файла. Предположим, ваша таблица выглядит примерно так:
fromUnit fromUnitFactor (вероятно, всегда 1) ToUnit ToUnitFactor (все, что нужно для перехода от fromUnit к toUnit)
затем просто запросите это, вы знаете, что ищете, знаете, что у вас есть. Затем просто возьмите сумму, указанную пользователем, и умножьте ее на возвращаемый toUnitFactor.
Самая большая проблема в том, что вам нужна каждая комбинация from и to в вашей таблице.
имеет смысл?
Я думаю, что для приготовления нужно разделить два разных типа единиц.
Вы не можете стандартизировать эти единицы, или какой смысл знать, что вам нужно 2 чашки мяса?
Затем, когда вы дифференцируете эти два разных типа единиц, вы можете стандартизировать их две единицы в одну. Может быть:
Если все они имеют одинаковую базу, вы можете их сравнить.
На самом деле во многих случаях требуется преобразование веса и объема. Например, при разработке базы данных инвентаря / закупок / цен на продукты питания для ресторана, в котором я работаю, мне пришлось выяснить, как конвертировать между фунтами и чашками, потому что (например) мы покупаем петрушку и бобы фунтами, но измеряем их чашками в наших рецептах. Чтобы определить подходящие цены на нашу еду, нам нужно было определить, сколько фунтов петрушки / бобов в x чашках ... это означало, что фактически нужно взвесить установленный объем всех наших продуктов и ввести эти измерения в систему.
Я бы подумал об этом иначе. У вас есть разные типы мер (объем, вес, количество и т. д.). У каждой из этих мер есть разные конвертируемые единицы. Выбирая меру (например, унции), выберите и тип меры, и конкретную единицу. У меня был бы способ преобразования между единицами измерения одного и того же типа - для поддержки рецептов изменения размера - но я бы не стал беспокоиться о преобразовании между разными типами мер.
Узнав тип, вы можете сохранить все значения в базе данных в единицах базовой единицы для этого типа меры. В зависимости от значения и, возможно, предпочтений пользователя, вы можете преобразовать его в подходящий дисплей, когда вы его показываете. Я не думаю, что это было бы особенно легко сделать в SQL, и я бы не побоялся выполнить преобразование в коде. Вам просто нужно иметь другое средство форматирования дисплея для каждого типа меры, которое выбирает соответствующие единицы и выполняет преобразование.
Пользователь должен будет предоставить вам единицу измерения, и каждая единица будет иметь тип (вес, объем и т. д.). Ваша «таблица преобразования» просто должна будет включать базовый уровень для каждого типа единицы. то есть 8 унций на чашку, 128 унций на галлон. Зная эти две вещи, вы можете преобразовать чашки в галлоны.
Другое дело, сделать это в доступе в одном запросе. Если вы можете сделать немного VBA, получить от чашки к унциям за один вызов, а затем из унций в галлоны за другой, я думаю, вам будет намного легче.
У меня получилось вытащить коэффициент пересчета для одной записи. Я просто делал это с помощью запросов. Я в основном ищу столбец и строку (с sql имена столбцов и строк меняются), и это значение - то, на что мне нужно умножить. Однако, как все мы знаем, вы никогда не будете работать только с одной записью в sql. Есть идеи, как расширить это, чтобы включить все данные?
Вы можете иметь в виду CROSS JOIN, например. ВЫБРАТЬ * ИЗ OneRowTable, TenRowTable; (Jet не поддерживает явно синтаксис CROSS JOIN) будет набор результатов из 10 строк, по одной для каждой строки в TenRowTable со значениями из одной строки в OneRowTable в каждой строке набора результатов. Это то, что тебе надо?
ХОРОШО,
Просто хотел опубликовать свое решение на случай, если у кого-то возникнет эта проблема в будущем. На самом деле я составляю таблицу и заполняю ее всеми другими данными, которые меня интересуют, с помощью SQL обычным способом. Затем у меня есть функция DCOUNT, чтобы узнать, сколько записей задает переменную. Затем у меня есть функция DLOOKUP, которая сообщает мне, из чего и что нужно преобразовать, и устанавливает это в новую таблицу для записи, в которой я участвую. Фух, я думаю, что я над головой! Спасибо за помощь, ребята.
Чтобы еще больше усложнить ситуацию, в рецептах существует соглашение об использовании разных физических величин для разных единиц. например 10 мл или 1 столовая ложка, 500 грамм или 1 фунт. - идея в том, что миллилитры и граммы будут иметь те же пропорции, что и столовая ложка. и фунты, если не в одинаковом количестве.