我正在尝试编写一个访问数据库,但我正在使用SQL进行所有查询。我几乎完成了数据库,但是有一个查询使我感到困惑。这是一个包含食谱的数据库。我有一个表格,其中包含所有烹饪转换(汤匙到茶匙,茶匙到杯子等)。用户需要能够使用配方所需的任何单位输入成分(换句话说,我无法标准化单位,我必须找到它们)。然后,我需要能够将它们转换为标准化单位。这就是我遇到问题的地方,因为蔬菜等东西可能以杯、汤匙等形式出现,而肉等东西可能以盎司、磅等形式出现。我想避免创建一堆vb if /then。我觉得必须有一种用SQL完成这项任务的方法,但我似乎无法弄清楚。
我会用不同的方式考虑这个问题。你有不同类型的度量(体积、重量、数量等)。每种度量都有不同的可转换单位。选择一种度量(例如盎司),需要同时选择一种度量类型和一个特定的单位。我会找到一种转换相同度量类型单位的方法——以支持调整菜谱——但我不会担心在不同的度量类型之间进行转换。
一旦您确定了类型,您可以将所有值以该测量类型的基本单位存储在数据库中。根据值,也许还有用户偏好,您可以在显示时将其转换为合适的显示单位。我认为这在SQL中可能不是特别容易做到,我也不会害怕在代码中进行转换。您只需要为每个测量类型拥有一个不同的显示格式化器,选择适当的单位并进行转换即可。
我认为烹饪需要区分两种不同类型的单位。
- by weight
- by volume
你不能将这些单位标准化,或者说知道你需要2杯肉有什么意义呢?
当你区分这两种不同的单位时,你可以将它们标准化为一个单位。也许:
- cups, teaspoon,... in ml
- meat, vegetables,... in g or pounds, or whatever
如果它们都有相同的基础,那么您就可以进行比较。
只要您询问用户正在使用的单位,并知道您要查询的内容,那么您就应该能够从文件中查询答案。假设您的表看起来像:
fromUnit fromUnitFactor (probably always 1) ToUnit ToUnitFactor (whatever it takes to get from the fromUnit to the toUnit)
然后只需查询它,您知道您正在寻找什么,知道您拥有什么。然后只需将用户给出的数量乘以您得到的toUnitFactor。
这个问题最大的问题是你需要在你的表中列出所有的从某处到某处的组合。
有意义吗?
用户需要提供单位,每个单位都有一个类型(重量,体积等)。您的“转换表”只需要包括每个单位类型的基线。即8盎司对于一杯,128盎司对于一加仑。知道这两件事,您就可以将杯子转换为加仑。
在Access中使用单个查询完成此操作是另一回事。 如果您能使用一点VBA,在一个调用中将杯转换为盎司,然后在另一个调用中将盎司转换为加仑,我想您将会轻松得多。
我已经提取出了一条记录的转换因子。我只是用查询做到的。我基本上查找一列和一行(使用 SQL,列和行名称是变量化的),该值就是我需要乘以的值。然而,正如我们所知,你永远不会仅仅使用一个 SQL 记录。有没有什么想法可以扩展这个以涵盖所有数据?
好的。
只是想在这里发布我的解决方案,以防将来有人遇到这个问题。实际上,我用通常的SQL方式制作表格并填充所需的所有其他数据。然后我使用DCOUNT函数告诉我有多少条记录,并设置一个变量。然后我有一个DLOOKUP函数,告诉我要从哪里转换并设置到新表中我正在使用的记录。哇,我想我已经超出我的能力范围了!感谢大家的帮助。
- winforms
- combobox
- fogbugz
- java
- date
- internationalization
- asp.net
- iis
- url-rewriting
- urlrewriter
- c#
- enums
- ocaml
- haxe
- algorithm
- string
- viewstate
- .net
- c++
- c
- symbol-table
- mysql
- database
- postgresql
- licensing
- migration
- vb.net
- vb6
- declaration
- vb6-migration
- python
- psycopg2
- backup
- vmware
- virtualization
- gnu-screen
- authentication
- desktop
- excel
- xll
- cultureinfo
- regioninfo
- oracle
- client
- session
- download
- html
- virtual
- constructor
- scenarios
- perl
- full-text-search
- javascript
- ajax
- testing
- oop
- inheritance
- vim
- encapsulation
- information-hiding