2014-09-18 3 views
0

테이블을 검색하려는 두 개의 텍스트 상자가 있습니다. 내가 문제라고 생각하는 쿼리를 통해 검색을 진행하고 있습니다. 코드는 두 텍스트 상자의 기준을 모두 받아 테이블 하나를 검색해야합니다. 그런 다음 나머지 텍스트 상자는 검색에 가장 가까운 레코드 세트로 채워집니다.여러 기준을 사용하여 검색

RstRecSet.MoveLast에서 오류가 발생합니다. 현재 레코드가 없다는 컴파일 오류가 발생합니다. 상자에 입력 한 것과 같은 레코드가 있는데 그 레코드를 선택하지 않았습니다.

레코드의 정확한 이름을 추가하면 아무런 문제가 없습니다. 그것은 거의 마치 마치 같은 연산자를 다루는 것처럼 보입니다.

Private Sub Command514_Click() 
'DoCmd.Close 
'DoCmd.OpenForm "frmContacts", acNormal 
    Set RstRecSet = Nothing 
    Set db = CurrentDb 
    Dim searchGroup As String 
    Dim searchName As String 

If IsNull(txtgroupSearch) Or txtgroupSearch = "" Then 

     Me.txtGroupName.BackColor = vbRed 
     Forms!frmGroupHeader!txtGroupNr.SetFocus 

    Else 
     'searchNum = txtGroupNr 
     searchGroup = txtgroupSearch 

     Set db = CurrentDb 
     Me.txtGroupName.BackColor = vbWhite 
     Set RstRecSet = db.OpenRecordset("Select * from tblGroupHeader Where groupName like '*" & searchGroup & "*' or groupNum like '*" & searchGroup & "*';", dbOpenDynaset) 
      If RstRecSet.EOF And RstRecSet.BOF Then 
      MsgBox ("NO RECORDS!") 
       Exit Sub 
      End If 
     RstRecSet.MoveLast 
     intMaxCount = RstRecSet.RecordCount 
     RstRecSet.MoveFirst 
     ' Exit Sub 
    End If 

    If RstRecSet.EOF Then 
     Me.txtGroupName.BackColor = vbRed 
     Forms!frmGroupHeader!txtGroupNr.SetFocus 

    Else 
     Call DisplayFields 

    End If 
End Sub 
+0

사람들은 SQL 인젝션이 여전히 1 번 보안 위험이라고 생각합니다. –

+0

RstRecSet.MoveLast에서 오류가 발생합니다. 현재 레코드가 없다는 컴파일 오류가 발생합니다. 나는 상자에 넣는 것 같은 recor를 가지고있다. 그러나 그것을 집어 들지 않고있다. – connor

+0

처음에 저는 응답하고 도와 주시는 모든 분들께 감사 드리고 싶습니다. 정말 고맙습니다. HansUp에 응답하여 SQL 쿼리에서 오류를 찾는데 도움이되는 Option Explicit를 추가했습니다. Unfortunetly, 나는 동일한 런타임 오류 "현재 레코드 없음"가져옵니다. – connor

답변

1

나는 문제가 SQL에 믿습니다 : 여기에 솔루션입니다

Private Sub Command514_Click() 
'DoCmd.Close 
'DoCmd.OpenForm "frmContacts", acNormal 
    Set RstRecSet = Nothing 
    Set db = CurrentDb 
    Dim searchNum As String 
    Dim searchName As String 
    searchNum = txtGroupNr 
    searchName = txtGroupName 
On Error Resume Next 
If IsNull(txtGroupNr) Or txtGroupNr = "" Then 

     Me.txtGroupName.BackColor = vbRed 
     Forms!frmGroupHeader!txtGroupNr.SetFocus 

    Else 
     'strSearchICN = txtGroupNr 
     Set db = CurrentDb 
     Me.txtGroupName.BackColor = vbWhite 
     Set RstRecSet = db.OpenRecordset("Select * from tblGroupHeader Where GroupNum Like '" & searchNum & "' And GroupName Like '" & searchName & "';", dbOpenDynaset) 
     RstRecSet.MoveLast 
     intMaxCount = RstRecSet.RecordCount 
     RstRecSet.MoveFirst 
     ' Exit Sub 
    End If 

    If RstRecSet.EOF Then 


     Me.txtGroupName.BackColor = vbRed 
     Forms!frmGroupHeader!txtGroupNr.SetFocus 

    Else 
     Call DisplayFields 

    End If 
End Sub 

:

여기 내 코드입니다. 이 오류는 기록이 없음을 나타냅니다. 레코드 세트에서 .MoveLast를 호출하기 전에 다음을 사용하여 빠른 테스트에 넣을 수 있습니다.

If RstRecSet.EOF and RstRecSet.BOF Then 
    msgbox("NO RECORDS!") 
    exit sub 
End if 

SQL로 돌아 가기. "Select * from tblGroupHeader Where GroupNum Like '" & searchNum & "' and GroupName Like '" & GroupName & "';"Select * from tblGroupHeader Where GroupNum Like '1' and GroupName Like 'Physics';

I과 같을 것이다 : 당신은

대신 이해되지 않는다 Select * from tblGroupHeader Where GroupNum and GroupName Like '1Physics';처럼 뭔가 나올 것입니다 당신이 GroupNum과 그룹 이름과 같은 "물리학"로 "1"을 선택한 경우, "Select * from tblGroupHeader Where GroupNum and GroupName Like '" & searchNum & GroupName & "';"을 썼다 '내 SQL을 변수에 넣은 다음 Debug.Print SQL을 사용하여 해당 변수를 Immediates 창에 작성하면 모든 것을 이해하고 데이터베이스에 복사하여 붙여 넣을 수 있습니다.

+0

안녕하세요 JNevill, 대표단에게 감사드립니다. 매우 도움이되었습니다. 나는 우리가 해결책에 더 가까워지고있는 것처럼 느낀다. 그러나 당신이 작성한 코드 블록은 작동 오류를 messagebox로 대체합니다. 나는 거기에있는 레코드에 타이핑을하고 있지만 어떤 이유로 그것을 집어 내지는 않는다. 레코드의 정확한 이름을 추가하면 아무런 문제가 없습니다. 그것이 마치 마치 opator를 다루는 것처럼 amost입니다. – connor

+1

SQL 문도 확인 했습니까? 내가 믿는 바는 그것이 당신의 문제의 핵심입니다. – JNevill

+0

여기 내 검색어가 있는데 문제는 보이지 않지만 어쩌면 나는 실종 된 것 같습니다. db.OpenRecordset ("선택 * GroupNum처럼 어디 tblGroupHeader에서 '"& searchNum & "'그리고 그룹 이름처럼 '"& searchName & "'; ", dbOpenDynaset) – connor

관련 문제