Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在Microsoft Access查询中使用数组_Sql_Vba_Ms Access - Fatal编程技术网

Sql 在Microsoft Access查询中使用数组

Sql 在Microsoft Access查询中使用数组,sql,vba,ms-access,Sql,Vba,Ms Access,我在Microsoft Access中有一个查询,它用距离和时间更新表(I_postcodes)中的zipcode/postcodes,从base原始zipcode(保存在I_BasePostcode中)到相关zipcode 我的Access仅用于确定距离的查询是: UPDATE I_Postcodes, I_BasePostcode SET I_Postcodes.DistanceFromBase = GetDistance(I_BasePostcode.Postcode,I_Postcode

我在Microsoft Access中有一个查询,它用
距离
时间
更新表(
I_postcodes
)中的zipcode/postcodes,从
base
原始zipcode(保存在
I_BasePostcode
中)到相关zipcode

我的
Access
仅用于确定距离的查询是:

UPDATE I_Postcodes, I_BasePostcode
SET I_Postcodes.DistanceFromBase = GetDistance(I_BasePostcode.Postcode,I_Postcodes.Postcode)
WHERE (I_Postcodes.DistanceFromBase Is Null);
I_BasePostcode
表如下所示:

+----------+
| Postcode |
+----------+
| LS1 3EX  |
+----------+
+----------+------------------+--------------+
| Postcode | DistanceFromBase | TimeFromBase |
+----------+------------------+--------------+
| SW13 9EE |               50 |          200 |
| SW13 9EF |               50 |          201 |
| SW13 9EG |               52 |          210 |
+----------+------------------+--------------+
I_Postcodes
表中提取的内容如下所示:

+----------+
| Postcode |
+----------+
| LS1 3EX  |
+----------+
+----------+------------------+--------------+
| Postcode | DistanceFromBase | TimeFromBase |
+----------+------------------+--------------+
| SW13 9EE |               50 |          200 |
| SW13 9EF |               50 |          201 |
| SW13 9EG |               52 |          210 |
+----------+------------------+--------------+
就这个问题而言,
GetDistance
函数有点复杂,但它的工作原理与我所希望的一样,并返回一个由两个值组成的数组:距离整数和时间整数。我可以通过拨打以下电话访问这两个站点:

' Distance
GetDistance(Origin, Destination)(0)

' Time
GetDistance(Origin, Destination)(1)

我想更新我的查询,以包括到达目的地所需的时间,但我不确定如何在不调用
GetDistance
函数两次的情况下执行此操作?

使用静态变量返回GetDistance函数中的数组和以前的参数值。如果参数相同且数组已经有有效值,则从静态变量返回数组,否则计算时间/距离。

这是什么样子?“使用静态变量…”-是的,这也是我所设想的。另一种选择是使用记录集更新而不是SQL查询。它看起来没什么特别的,只要记住,如果在声明中使用
Static
而不是
Dim
,变量在函数调用之间保持当前值,因此,如果参数相同,则不需要重新计算结果。
GetDistance
函数是否昂贵,是否经常为相同的值调用该函数?如果是这样的话,也许值得为以前的调用和结果建立一个字典;这不仅可以解决两次调用同一个函数的问题(您将有两个函数调用同一个字典),而且还可能加速对相同的from/to位置的重复调用