0
經過幾個星期的努力,我必須給朋友打電話。我認爲我愈發離我越來越亂。我在MS Access中有兩個表格(見下面)SQL VBA - 基於計算的最小結果更新表中的字段
目標是在包含最近城市的地區的表(「tblnewbid」)的表格(「tblnewbid」)中結束一個名爲(「O_CityRegion」)的新字段。所以我需要使用每個城市的經度和緯度,這些國家的地區相匹配(簡單地減少計算時間),並計算它們之間的距離。在該區域內的城市列表中,我需要找到最小距離並將相應的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
這是剛剛工作的所有其他部分的問題。我想我以前一直很接近,但我現在只是複製我的代碼。在其中
Access表和字段:
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