물 샘의 위치와 해당 우물과 관련된 많은 등록 정보가 포함 된 데이터베이스가 있습니다. 모든 테이블은 내가 알 수있는 "짧은 텍스트"데이터 유형 인 WELL_ID (우물의 이름)와 연결되어 있습니다. 데이터베이스 내에서 데이터를 얻으려는 기존 쿼리가 있습니다 (실수를하고 무언가를 엉망으로 만들 때를 대비하여 테이블을 엉망으로 만들고 싶지 않습니다).함수에서 MS Access VBA 데이터 형식이 일치하지 않습니다.
사용자가 검색 반경뿐만 아니라 easting 및 northing에 대한 UTM 좌표를 입력 한 다음 "검색"버튼을 클릭하는 양식을 만들었습니다. 검색을 클릭하면 절차는 [qryUTM_NAD83]의 레코드 세트를 생성 한 다음 각 웰의 반지름 거리를 계산하고 지정된 검색 반경 내에 있으면 INSERT INTO를 사용하여 새 [Search_Results] 테이블에 저장됩니다.
이제 우물이 검색 기준을 만족하는 것으로 식별되면 WELL_ID가 저장되고 다른 쿼리 [qryFormation]의 레코드 세트를 검색하는 함수로 전달됩니다. 이 질의는 각각의 지질 층에 대한 레코드가 있고, 각각이 동일한 WELL_ID를 갖는 일대 다 관계를 갖는다 (즉, 각각의 웰은 다중 층을 가지지 만 이들 층 모두는 동일한 WELL_ID를 갖는다). 이 레이어를 하나의 문자열로 연결하여 검색 함수로 다시 전달하고 [Search_Results] 테이블에 추가해야합니다. 그러나 SQL 문에서 데이터 형식 불일치 오류가 발생합니다. 여기
는 내가 가지고있는 코드입니다 : (오류가 발생 "RS2 설정 ..." 이Private Sub SearchButton_Click()
Dim WellID As String, mySQL As String, NewLitho As String
'Creating new recordsets from [qryUTM_NAD83] table
Dim rs1 As DAO.Recordset
'[ZONE] is just user specified, helps me narrow the search a little
Set rs1 = CurrentDb.OpenRecordset("SELECT [qryUTM_NAD83].* " & _
"FROM [qryUTM_NAD83] " & _
"WHERE [ZONE] = " & frmZone, dbOpenDynaset)
'Moving through the recordset
rs1.MoveFirst
Do While Not rs1.EOF
'calculated radius, r , for this well (omitted)
If r < SearchRadius Then
WellID = Val(rs1.Fields("WELL_ID").Value)
NewLitho = LithoTransform(WellID)
mySQL = "INSERT INTO [Search_Results] " & _
"([WELL_ID], [Easting], [Northing], [Radius], [Lithology]) " & _
"VALUES (" & WellID & ", " & x & ", " & y & ", " & r & ", " & NewLitho & ")"
CurrentDb.Execute mySQL
rs1.MoveNext
End If
Loop
End Sub
기능 (난 당신이 모든 짧게 유지하는 코드의 일부를 생략했습니다) - 당신은 당신의 WHERE
절에 포함 할 때 데이터 형식이 일치) WELL_ID
이후
Public Function LithoTransform(CurrentID As String) As String
'CurrentID is the well which was identified as being within the search radius
Dim rs2 As DAO.Recordset
Dim mySQL2 As String
'SQL statement and new recordset of the well we are looking at in the search
Debug.Print CurrentID
mySQL2 = "SELECT [qryFormation].* " & _
"FROM [qryFormation] " & _
"WHERE [WELL_ID] = " & CurrentID
Set rs2 = CurrentDb.OpenRecordset(mySQL2, dbOpenDynaset)
'Move through recordset rs2 and concatenating into new string
'Bunch of code here
'Close recordset set it to 'nothing'
End Function
고마워, 나는 이것이 이처럼 단순한 느낌이 들었다. 나는 Access help와 웹 검색을 사용하고 있었고, 내 머리를 감쌀 수있는 많은 것들이있다. 매개 변수 쿼리도 만들려고합니다. 다시 한 번 감사드립니다! – Sashman