【问题标题】:SQL VBA - Update Fields in Table Based on Minimum Result from CalculationSQL VBA - 根据计算的最小结果更新表中的字段
【发布时间】:2017-01-10 12:06:00
【问题描述】:

在尝试解决这个问题几周后,我不得不给朋友打电话。我想我越是弄乱它,我就会越走越远。我在 MS Access 中有两个表(见下文)

目标是在包含最近城市区域的表 ("tblnewbid") 中得到一个名为 ("O_CityRegion") 的新字段。所以我需要使用每个城市的纬度和经度,其中州的地区匹配(只是为了减少计算时间),并计算它们之间的距离。在 Region 内的城市列表中,我需要找到距离最小的地方,并将相应的 SubRegion 返回到字段“O_CityRegion”中。

从数学上讲,我知道以下公式可用于计算坐标之间的距离:

(ACOS(COS(RADIANS(90-(Latitude1))) * COS(RADIANS(90-(Latitude2))) + SIN(RADIANS(90-(Latitude1))) * SIN(RADIANS(90-(Latitude2))) * COS(RADIANS((Longitude1)-(Longitude2))))*3958

这只是让所有其他部分正常工作的问题。我想我之前已经更接近了,但我只是照原样复制了我的代码。

访问其中的表和字段:

tblnewbid

Origin // O_State Region // Latitude // Longitude

tblClosestCities

CityState // Latitude // Longitude // Region // SubRegion

下面是我的代码:

Private Sub btnInsertClosestCityRegion_Click()
Dim strSQL As Variant
Dim rs1 As DAO.Recordset
Dim db As Database
Dim FSO As New FileSystemObject
Dim Distance As Integer

Set db = CurrentDb

db.Execute ALTER TABLE [tblnewbid] ADD COLUMN O_CityRegion CHAR, dbFailOnError

Set rs1 = db.OpenRecordset(Select [Origin] FROM [tblnewbid];)

rs1.MoveFirst

    strSQL = "UPDATE [tblnewbid] INNER JOIN [tblClosestCities]"
    strSQL = strSQL & ON [tblClosestCities].[Region] = tblnewbid.[O_StateRegion]
    strSQL = strSQL & SET [tblClosestCities].[SubRegion] = [tblnewbid].[O_CityRegion]
    strSQL = strSQL & " FROM ( "
    strSQL = strSQL & " SELECT [tblClosestCities].[SubRegion], (3958 * ACOS( COS(RADIANS(90-[tblnewbid].[Latitude])) * COS(RADIANS(90-[tblClosestCities].[Latitude])) + SIN(RADIANS(90-[tblnewbid].[Latitude])) * SIN(RADIANS(90-[tblClosestCities].[Latitude])) * COS(RADIANS([tblnewbid].[Longitude]-[tblClosestCities].[Longitude]))) AS " & Distance & ")"
    strSQL = strSQL & " FROM tblClosestCities, " & tblnewbid & " )"
    strSQL = strSQL & " WHERE " & Distance & " = MIN(" & Distance & ")"

    db.Execute (strSQL), dbFailOnError


rs1.Close

Set rs1 = Nothing
Set db = Nothing

DoCmd.Hourglass False
MsgBox "The proxity of the city within the states have been added!"
End Sub

【问题讨论】:

    标签: sql ms-access vba


    【解决方案1】:

    如果 SQL 包含聚合函数,则无法更新表。首先创建具有最小距离的临时表,然后运行更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-24
      • 1970-01-01
      • 2017-11-23
      • 1970-01-01
      • 2014-05-23
      • 2017-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多