2014-10-20 3 views
1

물 샘의 위치와 해당 우물과 관련된 많은 등록 정보가 포함 된 데이터베이스가 있습니다. 모든 테이블은 내가 알 수있는 "짧은 텍스트"데이터 유형 인 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 

답변

1

텍스트 유형은 CurrentID의 값 주위에 따옴표를 포함한다. 그래서 빠른 수정은 대신 매개 변수 쿼리로 전환하여 따옴표 문제를 피할 수 ... 아마이 그러나

mySQL2 = "SELECT [qryFormation].* " & _ 
     "FROM [qryFormation] " & _ 
     "WHERE [WELL_ID] = '" & CurrentID & "'" 

입니다. 여기

Dim db As DAO.Database 
Dim qdf AS DAO.QueryDef 
Dim rs2 As DAO.Recordset 
Dim mySQL2 As String 

mySQL2 = "SELECT [qryFormation].* " & _ 
     "FROM [qryFormation] " & _ 
     "WHERE [WELL_ID] = [which_id]" 
Set db = CurrentDb 
Set qdf = db.CreateQueryDef(vbNullString, mySQL2) 
qdf.Parameters("which_id") = CurrentID 
Set rs2 = qdf.OpenRecordset 

내가 오류를 만든 경우에 그 코드 등 기능, 구문을 확인하기 위해 액세스 도움말 시스템을 사용하여 ... 검증되지 않은 예입니다. Access를 처음 사용하기 때문에 도움말 시스템에 익숙해지는 것이 좋습니다.

+0

고마워, 나는 이것이 이처럼 단순한 느낌이 들었다. 나는 Access help와 웹 검색을 사용하고 있었고, 내 머리를 감쌀 수있는 많은 것들이있다. 매개 변수 쿼리도 만들려고합니다. 다시 한 번 감사드립니다! – Sashman

관련 문제